From b18d187a5a72841afa7721595e66311814b781f8 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Mon, 18 Mar 2024 18:54:37 +0100 Subject: [PATCH 01/37] Basic tokenization with single hard-coded tokenizer --- discojs/discojs-core/package.json | 1 + .../data/preprocessing/text_preprocessing.ts | 41 +++---- .../src/default_tasks/wikitext.ts | 10 +- .../src/logging/trainer_logger.ts | 9 +- .../discojs-core/src/models/gpt/evaluate.ts | 5 +- discojs/discojs-core/src/models/gpt/index.ts | 102 ++++++++---------- discojs/discojs-core/src/models/gpt/train.ts | 4 +- discojs/discojs-core/src/models/model.ts | 2 +- .../src/task/training_information.ts | 5 + .../src/training/trainer/trainer.ts | 3 +- discojs/discojs-node/src/data/text_loader.ts | 8 +- docs/examples/wikitext.ts | 43 ++++++++ package-lock.json | 14 +++ 13 files changed, 146 insertions(+), 101 deletions(-) create mode 100644 docs/examples/wikitext.ts diff --git a/discojs/discojs-core/package.json b/discojs/discojs-core/package.json index bcbb0d9bd..e8e0178f6 100644 --- a/discojs/discojs-core/package.json +++ b/discojs/discojs-core/package.json @@ -22,6 +22,7 @@ "@tensorflow/tfjs": "4", "@types/msgpack-lite": "0.1", "axios": "1", + "gpt-tokenizer": "^2.1.2", "gpt3-tokenizer": "1", "immutable": "4", "isomorphic-wrtc": "1", diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index e372bde4d..e37613ea3 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -3,6 +3,7 @@ import tf from '@tensorflow/tfjs' import type { Task } from '../../..' import type { PreprocessingFunction } from './base' +import { encode } from 'gpt-tokenizer/cjs/model/text-davinci-003' /** * Available text preprocessing types. @@ -12,32 +13,22 @@ export enum TextPreprocessing { Padding } -interface TextEntry extends tf.TensorContainerObject { - xs: string[] - ys: number[] -} - interface TokenizedEntry extends tf.TensorContainerObject { xs: tf.Tensor1D - ys: tf.Tensor1D } -const gpt3Tokenizer = null as any - const padding: PreprocessingFunction = { type: TextPreprocessing.Padding, apply: (x: tf.TensorContainer, task: Task) => { - const { xs, ys } = x as TokenizedEntry - // TODO: add to task definition - const maxLength = 64 - if (maxLength === undefined) { - return { xs, ys } - } + const { xs } = x as TokenizedEntry + const maxLength = task.trainingInformation.maxSequenceLength ?? 128 + // Use the tokenizer paddingToken except if undefined + // Fallback value to the last value of the vocab size + const paddingToken = task.trainingInformation.paddingToken ?? 50257 return { xs: xs - .pad([[0, Math.max(0, maxLength - xs.size)]]) - .slice([0], [maxLength]), - ys + .pad([[0, Math.max(0, maxLength - xs.size)]], paddingToken) + .slice([0], [maxLength]) } } } @@ -45,21 +36,13 @@ const padding: PreprocessingFunction = { const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, apply: (x: tf.TensorContainer, task: Task) => { - const { xs, ys } = x as TextEntry - const params = task.trainingInformation + const xs = x as string // tf.TextLineDataset yields strings // TODO: add to task definition - const tokenizer = (params as unknown as any).tokenizer - - let tokenized: number[] - if (tokenizer === undefined) { - tokenized = gpt3Tokenizer.encode(xs[0]).bpe - } else { - throw new Error('tokenizer not implemented') - } + const tokenizer = { encode } + const tokens = tokenizer.encode(xs) return { - xs: tf.tensor(tokenized), - ys: tf.tensor(ys) + xs: tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs } } } diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 691a7d177..9686c5c1c 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -1,5 +1,6 @@ import type { Model, Task, TaskProvider } from '..' -import { TrainingSchemes, models } from '..' +import { TrainingSchemes, models, data } from '..' +import { encode, EndOfText } from 'gpt-tokenizer/cjs/model/text-davinci-003' export const wikitext: TaskProvider = { getTask (): Task { @@ -19,8 +20,9 @@ export const wikitext: TaskProvider = { trainingInformation: { dataType: 'text', modelID: 'wikitext-103-raw-model', + preprocessingFunctions: [data.TextPreprocessing.Tokenize, data.TextPreprocessing.Padding], validationSplit: 0.2, // TODO: is this used somewhere? because train, eval and test are already split in dataset - epochs: 10, + epochs: 1, // constructing a batch is taken care automatically in the dataset to make things faster // so we fake a batch size of 1 batchSize: 1, @@ -29,7 +31,9 @@ export const wikitext: TaskProvider = { decentralizedSecure: true, minimumReadyPeers: 3, maxShareValue: 100, - roundDuration: 10 + roundDuration: 10, + paddingToken: encode(EndOfText, { allowedSpecial: new Set([EndOfText]) })[0], + maxSequenceLength: 128 } } }, diff --git a/discojs/discojs-core/src/logging/trainer_logger.ts b/discojs/discojs-core/src/logging/trainer_logger.ts index 84bcdec6a..9a7b29038 100644 --- a/discojs/discojs-core/src/logging/trainer_logger.ts +++ b/discojs/discojs-core/src/logging/trainer_logger.ts @@ -41,7 +41,12 @@ export class TrainerLogger extends ConsoleLogger { } // console output - const msg = `Epoch: ${epoch}\nTrain: ${logs?.acc ?? 'undefined'}\nValidation:${logs?.val_acc ?? 'undefined'}\nLoss:${logs?.loss ?? 'undefined'}` + let msg = `Epoch: ${epoch}\n` + if (logs !== undefined) { + for (const [key, value] of Object.entries(logs)) { + msg += `${key}: ${value}\n` + } + } this.success(`On epoch end:\n${msg}\n`) } @@ -49,7 +54,7 @@ export class TrainerLogger extends ConsoleLogger { * Display ram usage */ ramUsage (): void { - this.success(`Training RAM usage is = ${tf.memory().numBytes * 0.000001} MB`) + this.success(`Training RAM usage is = ${tf.memory().numBytes / 1024 / 1024} MB`) this.success(`Number of allocated tensors = ${tf.memory().numTensors}`) } } diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index cd07653b7..004c4272e 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -2,13 +2,14 @@ import tf from '@tensorflow/tfjs' export default async function evaluate ( model: tf.LayersModel, - dataset: tf.data.Dataset<{ xs: tf.Tensor, ys: tf.Tensor }> + dataset: tf.data.Dataset<{ xs: tf.Tensor, ys: tf.Tensor }>, + maxEvalBatches: number ): Promise> { let datasetSize = 0 let totalLoss = 0 const acc: [number, number] = [0, 0] - await dataset.map(({ xs, ys }) => { + await dataset.take(maxEvalBatches).map(({ xs, ys }) => { const logits = model.apply(xs) if (Array.isArray(logits)) { throw new Error('model outputed many tensor') diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 39552fc8c..61f0ab652 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -7,6 +7,7 @@ import tf from '@tensorflow/tfjs' import { WeightsContainer } from '../..' import type { Dataset } from '../../dataset' import { Sink } from '../../utils/event_emitter' +import { encode, decode } from 'gpt-tokenizer/cjs/model/text-davinci-003' import type { EpochLogs, Prediction, Sample } from '../model' import { Model } from '../model' @@ -28,7 +29,7 @@ interface Config { export class GPT extends Model { private readonly model: GPTLMHeadModel - private static readonly batchSize = 4 + private static readonly batchSize = 8 private static readonly blockSize = 128 private static readonly vocabSize = 50258 @@ -38,13 +39,13 @@ export class GPT extends Model { // TODO sensible defaults? const config: Config = { modelType: 'gpt-nano', + lr: 0.001, epochs: 1, - maxIter: 2, + maxIter: 10, + maxEvalBatches: 10, batchSize: GPT.batchSize, blockSize: GPT.blockSize, - lr: 0.001, - vocabSize: GPT.vocabSize, - maxEvalBatches: 1 + vocabSize: GPT.vocabSize } this.model = new GPTLMHeadModel(config) @@ -58,44 +59,13 @@ export class GPT extends Model { this.model.setWeights(ws.weights) } - // takes a stream of two bytes followed by a token ID - private convertCharDataset (dataset: Dataset): tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }> { - const batchSize = 4 - const sampleSize = GPT.blockSize + 1 - const chunkSize = sampleSize * batchSize * 2 - - function toUInt16 (low: number, high: number): number { - low &= 0xff - high &= 0xff - return (high << 8) | low - } - - // TODO add support for small last batch - return dataset.batch(chunkSize, false).mapAsync(async (chunk) => { - if (!(chunk instanceof tf.Tensor)) { - throw new Error('chunk is not a Tensor') - } - if (chunk.shape.length !== 2 || chunk.shape[1] !== 1) { - throw new Error('dataset is not a only char') - } - - const buffer = await chunk.buffer() - - const xs = tf.buffer([batchSize, GPT.blockSize], 'int32') - const ys = tf.buffer([batchSize, GPT.blockSize, GPT.vocabSize], 'int32') - - for (let i = 0; i < batchSize; i++) { - for (let j = 0; j < sampleSize; j++) { - const idx = (i * sampleSize + j) * 2 - const low = buffer.get(idx) - const high = buffer.get(idx + 1) - const token = toUInt16(low, high) - if (j < sampleSize - 1) xs.set(token, i, j) - if (j > 0) ys.set(1, i, j - 1, token) - } - } - - return { xs: xs.toTensor(), ys: ys.toTensor() } + private batchTokens (dataset: Dataset): Dataset { + const batchSize = 16 + return dataset.batch(batchSize).mapAsync(async chunk => { + let xs = (chunk as tf.TensorContainerObject).xs as tf.Tensor + xs = tf.squeeze(xs) // Remove extra dimension + const ys = tf.oneHot(xs, GPT.vocabSize) + return { xs, ys } }) } @@ -105,20 +75,24 @@ export class GPT extends Model { epochs = 1, tracker = new Sink() ): AsyncGenerator { - for (let i = 0; i < epochs; i++) { - let logs: tf.Logs | undefined - - await this.model.fitDataset( - this.convertCharDataset(trainingData), { - epochs: 1, - validationData: validationData !== undefined ? this.convertCharDataset(validationData) : validationData, - callbacks: { - onEpochEnd: (_, cur) => { logs = cur }, - onBatchBegin: () => { tracker.emit('batchBegin', undefined) }, - onBatchEnd: () => { tracker.emit('batchEnd', undefined) } + let logs: tf.Logs | undefined + trainingData = this.batchTokens(trainingData) + const trainingArgs: tf.ModelFitDatasetArgs = { + epochs: 1, // required to match the ModelFitDatasetArgs type but is currently unused + validationData: validationData !== undefined ? this.batchTokens(validationData) : undefined, + callbacks: { + onEpochEnd: (epoch, cur) => { + logs = cur + if (logs !== undefined && cur !== undefined) { + logs.loss = cur.val_loss } - }) - + }, + onBatchBegin: () => { tracker.emit('batchBegin', undefined) }, + onBatchEnd: () => { tracker.emit('batchEnd', undefined) } + } + } + for (let i = 0; i < epochs; i++) { + await this.model.fitDataset(trainingData, trainingArgs) yield logs } } @@ -132,6 +106,22 @@ export class GPT extends Model { return ret } + async generate (input: Sample, newTokens: number): Promise { + const string = ((input.arraySync() as unknown) as string[])[0] + const tokenizer = { encode, decode } + const tokens = tokenizer.encode(string) + + const generationConfig = { + maxNewTokens: newTokens, + temperature: 1.0, + doSample: false, + topK: null + } + const predictedTokens = await this.model.generate([tokens], generationConfig) + const generatedWords = tokenizer.decode(predictedTokens[0]) + return generatedWords + } + static deserialize (weights: WeightsContainer): Model { const model = new GPT() model.weights = weights diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index 3d1c92649..80bc99971 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -104,10 +104,10 @@ export async function train ( let logs: tf.Logs | undefined if (evalDs !== undefined) { - logs = await evaluate(model, evalDs) + logs = await evaluate(model, evalDs, c.maxEvalBatches) } + console.log(epoch) await callbacks.onEpochEnd?.(epoch, logs) - await new Promise((resolve) => setTimeout(resolve, 1)) } diff --git a/discojs/discojs-core/src/models/model.ts b/discojs/discojs-core/src/models/model.ts index dd6e6713a..179eff508 100644 --- a/discojs/discojs-core/src/models/model.ts +++ b/discojs/discojs-core/src/models/model.ts @@ -33,7 +33,7 @@ export abstract class Model { * * @param trainingData dataset to optimize for * @param validationData dataset to measure how well it is training - * @param epochs number of pass over the training datatset + * @param epochs number of pass over the training dataset * @param tracker watch the various steps * @yields on every epoch, training can be stop by `return`ing it */ diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index bd2e13956..a27162fe9 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -166,4 +166,9 @@ export interface TrainingInformation { // aggregator: aggregator to be used by the server for federated learning, or by the peers for decentralized learning // default is 'average', other options include for instance 'bandit' aggregator?: AggregatorChoice + // paddingToken (number) used for padding batches with different length sequences. + paddingToken?: number + // maxSequenceLength: the maximum length of a input string used as input to a GPT model. It is used during preprocessing to + // truncate string to a maximum length + maxSequenceLength?: number } diff --git a/discojs/discojs-core/src/training/trainer/trainer.ts b/discojs/discojs-core/src/training/trainer/trainer.ts index c9b20d784..fe29ca67f 100644 --- a/discojs/discojs-core/src/training/trainer/trainer.ts +++ b/discojs/discojs-core/src/training/trainer/trainer.ts @@ -75,6 +75,7 @@ export abstract class Trainer { * We update the training graph, this needs to be done on epoch end as there is no validation accuracy onBatchEnd. */ protected onEpochEnd (epoch: number, logs?: tf.Logs): void { + console.log('Trainer', epoch) this.trainerLogger.onEpochEnd(epoch, logs) if (logs !== undefined && !isNaN(logs.acc) && !isNaN(logs.val_acc)) { @@ -133,7 +134,7 @@ export abstract class Trainer { }) ) - let epoch = 0 + let epoch = 0 // TODO: Trainer's epoch is not the same as the epoch in this.training this.onEpochBegin(epoch) for await (const logs of this.training) { this.onEpochEnd(epoch, logs) diff --git a/discojs/discojs-node/src/data/text_loader.ts b/discojs/discojs-node/src/data/text_loader.ts index 9698df611..960eef286 100644 --- a/discojs/discojs-node/src/data/text_loader.ts +++ b/discojs/discojs-node/src/data/text_loader.ts @@ -1,14 +1,12 @@ -import fs from 'node:fs/promises' import { data as tfData } from '@tensorflow/tfjs-node' import { data } from '@epfml/discojs-core' export class TextLoader extends data.TextLoader { async loadDatasetFrom (source: string): Promise { - // TODO sure, good idea to load the whole dataset in memory #irony - const content = await fs.readFile(source) - const file = new tfData.FileDataSource(content) - + // Lazy chunk file reader + const file = new tfData.FileDataSource(source, { chunkSize: 1024 }) + // TODO: reading files line by line is an issue for LLM tokenization return new tfData.TextLineDataset(file) } } diff --git a/docs/examples/wikitext.ts b/docs/examples/wikitext.ts new file mode 100644 index 000000000..9ff1d25e9 --- /dev/null +++ b/docs/examples/wikitext.ts @@ -0,0 +1,43 @@ +import type { Task, models } from '@epfml/discojs-core' +import { + Disco, fetchTasks, TrainingSchemes, data, client as clients, + aggregator as aggregators, informant +} from '@epfml/discojs-core' +import { NodeTextLoader } from '@epfml/discojs-node' +import tf from '@tensorflow/tfjs' + +async function main (): Promise { + // Launch a server instance + const url = new URL('http://localhost:8080') + const tasks = await fetchTasks(url) + const task = tasks.get('wikitext-103') + if (task === undefined) { throw new Error('task not found') } + const dataset = await loadWikitextData(task) + + const aggregator = new aggregators.MeanAggregator() + const client = new clients.federated.FederatedClient(url, task, aggregator) + const trainingInformant = new informant.FederatedInformant(task, 10) + const disco = new Disco(task, { scheme: TrainingSchemes.FEDERATED, client, aggregator, informant: trainingInformant }) + await disco.fit(dataset) + + if (aggregator.model === undefined) { + throw new Error('model was not set') + } + const model = aggregator.model as models.GPT + const sample = tf.tensor(['Hello world,']) + const predictions = await model.generate(sample, 1) + console.log(predictions) + await disco.close() +} + +async function loadWikitextData (task: Task): Promise { + const loader = new NodeTextLoader(task) + const dataSplit: data.DataSplit = { + train: await data.TextData.init((await loader.load('../../datasets/wikitext/wiki.train.tokens')), task), + validation: await data.TextData.init(await loader.load('../../datasets/wikitext/wiki.valid.tokens'), task) + } + return dataSplit +} + +// You can run this example with "npm start" from this folder +main().catch(console.error) diff --git a/package-lock.json b/package-lock.json index d31e53a11..ce4b67aff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ "@tensorflow/tfjs": "4", "@types/msgpack-lite": "0.1", "axios": "1", + "gpt-tokenizer": "^2.1.2", "gpt3-tokenizer": "1", "immutable": "4", "isomorphic-wrtc": "1", @@ -10103,6 +10104,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gpt-tokenizer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/gpt-tokenizer/-/gpt-tokenizer-2.1.2.tgz", + "integrity": "sha512-HSuI5d6uey+c7x/VzQlPfCoGrfLyAc28vxWofKbjR9PJHm0AjQGSWkKw/OJnb+8S1g7nzgRsf0WH3dK+NNWYbg==", + "dependencies": { + "rfc4648": "^1.5.2" + } + }, "node_modules/gpt3-tokenizer": { "version": "1.1.5", "license": "MIT", @@ -15196,6 +15205,11 @@ "node": ">=0.10.0" } }, + "node_modules/rfc4648": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", + "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==" + }, "node_modules/rfdc": { "version": "1.3.1", "license": "MIT" From 59c1b7ea5870f05aa1c51a168f42944b1d5e1019 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Tue, 19 Mar 2024 13:03:28 +0100 Subject: [PATCH 02/37] Mv batch size from gpt-tfjs config to Task and mv all preprocessing in text_preprocessing --- .../data/preprocessing/text_preprocessing.ts | 9 ++++--- .../src/default_tasks/wikitext.ts | 5 ++-- discojs/discojs-core/src/models/gpt/config.ts | 2 -- discojs/discojs-core/src/models/gpt/index.ts | 27 ++++--------------- discojs/discojs-core/src/models/gpt/model.ts | 2 -- .../src/task/training_information.ts | 6 +++-- 6 files changed, 16 insertions(+), 35 deletions(-) diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index e37613ea3..a590fcc88 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -21,14 +21,15 @@ const padding: PreprocessingFunction = { type: TextPreprocessing.Padding, apply: (x: tf.TensorContainer, task: Task) => { const { xs } = x as TokenizedEntry + const vocabSize = task.trainingInformation.vocabSize ?? 50258 const maxLength = task.trainingInformation.maxSequenceLength ?? 128 // Use the tokenizer paddingToken except if undefined // Fallback value to the last value of the vocab size - const paddingToken = task.trainingInformation.paddingToken ?? 50257 + const paddingToken = task.trainingInformation.paddingToken ?? vocabSize + const xsPadded = xs.pad([[0, Math.max(0, maxLength - xs.size)]], paddingToken).slice([0], [maxLength]) return { - xs: xs - .pad([[0, Math.max(0, maxLength - xs.size)]], paddingToken) - .slice([0], [maxLength]) + xs: xsPadded, + ys: tf.oneHot(xsPadded, vocabSize) // gpt-tfjs expects a one-hot encoded token label } } } diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 9686c5c1c..c94f49489 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -23,16 +23,15 @@ export const wikitext: TaskProvider = { preprocessingFunctions: [data.TextPreprocessing.Tokenize, data.TextPreprocessing.Padding], validationSplit: 0.2, // TODO: is this used somewhere? because train, eval and test are already split in dataset epochs: 1, - // constructing a batch is taken care automatically in the dataset to make things faster - // so we fake a batch size of 1 - batchSize: 1, scheme: TrainingSchemes.FEDERATED, noiseScale: undefined, decentralizedSecure: true, minimumReadyPeers: 3, maxShareValue: 100, roundDuration: 10, + batchSize: 16, paddingToken: encode(EndOfText, { allowedSpecial: new Set([EndOfText]) })[0], + vocabSize: 50258, maxSequenceLength: 128 } } diff --git a/discojs/discojs-core/src/models/gpt/config.ts b/discojs/discojs-core/src/models/gpt/config.ts index b8e879dfb..a487d9b1c 100644 --- a/discojs/discojs-core/src/models/gpt/config.ts +++ b/discojs/discojs-core/src/models/gpt/config.ts @@ -15,7 +15,6 @@ interface ModelSize { export interface GPTConfig { lr: number - batchSize: number blockSize: number vocabSize: number evaluate?: boolean @@ -38,7 +37,6 @@ export interface GPTConfig { export const DEFAULT_CONFIG: Required = { lr: 0.001, weightDecay: 0, - batchSize: 2, epochs: 9999, maxIter: 10_000, verbose: 0, diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 61f0ab652..a04e19f96 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -2,7 +2,7 @@ * this code is taken from gpt-tfjs with modifications from @peacefulotter and @lukemovement **/ -import tf from '@tensorflow/tfjs' +import type tf from '@tensorflow/tfjs' import { WeightsContainer } from '../..' import type { Dataset } from '../../dataset' @@ -19,20 +19,15 @@ interface Config { modelType: 'gpt-nano' epochs: number // TODO mv to Task maxIter: number - batchSize: number blockSize: number - lr: number vocabSize: number + lr: number maxEvalBatches: number } export class GPT extends Model { private readonly model: GPTLMHeadModel - private static readonly batchSize = 8 - private static readonly blockSize = 128 - private static readonly vocabSize = 50258 - constructor () { super() @@ -43,9 +38,8 @@ export class GPT extends Model { epochs: 1, maxIter: 10, maxEvalBatches: 10, - batchSize: GPT.batchSize, - blockSize: GPT.blockSize, - vocabSize: GPT.vocabSize + blockSize: 128, + vocabSize: 50258 } this.model = new GPTLMHeadModel(config) @@ -59,16 +53,6 @@ export class GPT extends Model { this.model.setWeights(ws.weights) } - private batchTokens (dataset: Dataset): Dataset { - const batchSize = 16 - return dataset.batch(batchSize).mapAsync(async chunk => { - let xs = (chunk as tf.TensorContainerObject).xs as tf.Tensor - xs = tf.squeeze(xs) // Remove extra dimension - const ys = tf.oneHot(xs, GPT.vocabSize) - return { xs, ys } - }) - } - override async * train ( trainingData: Dataset, validationData?: Dataset, @@ -76,10 +60,9 @@ export class GPT extends Model { tracker = new Sink() ): AsyncGenerator { let logs: tf.Logs | undefined - trainingData = this.batchTokens(trainingData) const trainingArgs: tf.ModelFitDatasetArgs = { epochs: 1, // required to match the ModelFitDatasetArgs type but is currently unused - validationData: validationData !== undefined ? this.batchTokens(validationData) : undefined, + validationData, callbacks: { onEpochEnd: (epoch, cur) => { logs = cur diff --git a/discojs/discojs-core/src/models/gpt/model.ts b/discojs/discojs-core/src/models/gpt/model.ts index f881c50c6..d13a37234 100644 --- a/discojs/discojs-core/src/models/gpt/model.ts +++ b/discojs/discojs-core/src/models/gpt/model.ts @@ -342,8 +342,6 @@ function GPT (conf: GPTConfig): LayersModel { const modelSizes = getModelSizes(conf.modelType) const config = Object.assign({}, configDefaults, conf, modelSizes) - console.log('IN MODEL CONFIG', config) - const inputs = tf.input({ shape: [null] }) const tokEmb = config.tokEmb diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index a27162fe9..7c7407cee 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -166,9 +166,11 @@ export interface TrainingInformation { // aggregator: aggregator to be used by the server for federated learning, or by the peers for decentralized learning // default is 'average', other options include for instance 'bandit' aggregator?: AggregatorChoice - // paddingToken (number) used for padding batches with different length sequences. + // paddingToken (number) used for text preprocessing to pad batches containing sequences of different lengths. The padding token is defined by which pre-trained tokenizer is selected paddingToken?: number + // vocabSize (number) used for text preprocessing using a tokenizer. The vocabSize is the number of tokens in the pre-trained tokenizer vocabulary. + vocabSize?: number // maxSequenceLength: the maximum length of a input string used as input to a GPT model. It is used during preprocessing to - // truncate string to a maximum length + // truncate strings to a maximum length maxSequenceLength?: number } From 57e425adb78270622f54e8baae8237d34188f7c7 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Tue, 19 Mar 2024 14:09:37 +0100 Subject: [PATCH 03/37] Move epochs parameter from gpt-tfjs config to Task --- discojs/discojs-core/src/models/gpt/config.ts | 2 -- discojs/discojs-core/src/models/gpt/index.ts | 15 ++++++++++++--- discojs/discojs-core/src/models/gpt/model.ts | 1 + discojs/discojs-core/src/models/gpt/train.ts | 3 ++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/discojs/discojs-core/src/models/gpt/config.ts b/discojs/discojs-core/src/models/gpt/config.ts index a487d9b1c..f00680ede 100644 --- a/discojs/discojs-core/src/models/gpt/config.ts +++ b/discojs/discojs-core/src/models/gpt/config.ts @@ -20,7 +20,6 @@ export interface GPTConfig { evaluate?: boolean maxEvalBatches?: number evaluateEvery?: number - epochs?: number maxIter?: number weightDecay?: number verbose?: 0 | 1 @@ -37,7 +36,6 @@ export interface GPTConfig { export const DEFAULT_CONFIG: Required = { lr: 0.001, weightDecay: 0, - epochs: 9999, maxIter: 10_000, verbose: 0, modelType: 'gpt-nano', diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index a04e19f96..59624b2d8 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -17,7 +17,7 @@ import { GPTLMHeadModel } from './model' // TODO too big config interface Config { modelType: 'gpt-nano' - epochs: number // TODO mv to Task + // epochs: number // TODO mv to Task maxIter: number blockSize: number vocabSize: number @@ -35,7 +35,6 @@ export class GPT extends Model { const config: Config = { modelType: 'gpt-nano', lr: 0.001, - epochs: 1, maxIter: 10, maxEvalBatches: 10, blockSize: 128, @@ -53,15 +52,25 @@ export class GPT extends Model { this.model.setWeights(ws.weights) } + /** + * The GPT train methods wraps the model.fitDataset call in a for loop to act as a generator (of logs) + * This allows for getting logs and stopping training without callbacks. + * + * @param trainingData training dataset + * @param validationData validation dataset + * @param epochs the number of passes of the training dataset + * @param tracker + */ override async * train ( trainingData: Dataset, validationData?: Dataset, epochs = 1, tracker = new Sink() ): AsyncGenerator { + console.log(epochs) let logs: tf.Logs | undefined const trainingArgs: tf.ModelFitDatasetArgs = { - epochs: 1, // required to match the ModelFitDatasetArgs type but is currently unused + epochs: 1, // force fitDataset to do only one epoch because it is wrapped in a for loop validationData, callbacks: { onEpochEnd: (epoch, cur) => { diff --git a/discojs/discojs-core/src/models/gpt/model.ts b/discojs/discojs-core/src/models/gpt/model.ts index d13a37234..997bd57fc 100644 --- a/discojs/discojs-core/src/models/gpt/model.ts +++ b/discojs/discojs-core/src/models/gpt/model.ts @@ -473,6 +473,7 @@ class GPTModel extends LayersModel { this, dataset as tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }>, config, + args.epochs, args.callbacks as TrainingCallbacks, args.validationData as tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }> ) diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index 80bc99971..ad170c329 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -44,6 +44,7 @@ export async function train ( model: tf.LayersModel, ds: tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }>, config: GPTConfig, + epochs: number, callbacks: TrainingCallbacks, evalDs?: tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }> ): Promise { @@ -55,7 +56,7 @@ export async function train ( console.warn('=== Starting training ===') - for (let epoch = 1; epoch <= c.epochs; epoch++) { + for (let epoch = 1; epoch <= epochs; epoch++) { await callbacks.onEpochBegin?.(epoch) await tf.data.zip<[number, { xs: tf.Tensor2D, ys: tf.Tensor3D }]>([ From 612d4415da9b1cc5c51cd81953322cb536fc4881 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Tue, 19 Mar 2024 18:26:23 +0100 Subject: [PATCH 04/37] No memory leak with iterator while true --- discojs/discojs-core/src/models/gpt/train.ts | 191 ++++++++++++++----- 1 file changed, 144 insertions(+), 47 deletions(-) diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index ad170c329..6c2bd28f1 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -48,69 +48,166 @@ export async function train ( callbacks: TrainingCallbacks, evalDs?: tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }> ): Promise { + console.log('Train before - numTensors: ' + tf.memory().numTensors, `${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB`) const c = resolveConfig(config) - const opt = c.weightDecay !== 0 ? getCustomAdam(model, c) : tf.train.adam(c.lr) await callbacks.onTrainBegin?.() - - console.warn('=== Starting training ===') - for (let epoch = 1; epoch <= epochs; epoch++) { - await callbacks.onEpochBegin?.(epoch) - - await tf.data.zip<[number, { xs: tf.Tensor2D, ys: tf.Tensor3D }]>([ - tf.data.generator(function * () { - for (let i = 1; i <= c.maxIter; i++) { yield i } - }), - ds - ]).mapAsync(async ([iteration, { xs, ys }]) => { - await callbacks.onBatchBegin?.(iteration) - return { iteration, xs, ys } - }).map(({ iteration, xs, ys }) => tf.tidy(() => { - const { grads, value: loss } = opt.computeGradients(() => { + let iteration = 1 + const iterator = await ds.iterator() + while (true) { + const next = await iterator.next() + if (next.done === true) { + break + } + await callbacks.onEpochBegin?.(epoch) + const { xs, ys } = next.value + + const lossFn: () => tf.Scalar = () => { const logits = model.apply(xs) - if (Array.isArray(logits)) { - throw new Error('model outputed many tensor') - } - if (logits instanceof tf.SymbolicTensor) { - throw new Error('model outputed symbolic tensor') - } - - const loss = tf.losses.softmaxCrossEntropy(ys, logits) - return loss as tf.Scalar + if (Array.isArray(logits)) { throw new Error('model outputs too many tensor') } + if (logits instanceof tf.SymbolicTensor) { throw new Error('model outputs symbolic tensor') } + return tf.losses.softmaxCrossEntropy(ys, logits) + } + const lossTensor = tf.tidy(() => { + const { grads, value: loss } = opt.computeGradients(lossFn) + const gradsClipped = clipByGlobalNormObj(grads, 1) + opt.applyGradients(gradsClipped) + return loss }) - tf.dispose([xs, ys]) - - const gradsClipped = clipByGlobalNormObj(grads, 1) - opt.applyGradients(gradsClipped) - - return { iteration, loss } - })).mapAsync(async ({ iteration, loss }) => { - const raw = await loss.array() - tf.dispose(loss) - return [iteration, raw] - }).mapAsync(async ([iteration, loss]) => { - await callbacks.onBatchEnd?.(iteration) - return [iteration, loss] - }).forEachAsync(([iteration, loss]) => { + const loss = await lossTensor.array() + tf.dispose([xs, ys, lossTensor, loss]) console.log( `Epoch: ${epoch}`, `\tStep: ${iteration} / ${c.maxIter}`, `\tLoss: ${loss.toFixed(3)}`, `\tMemory: ${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB` ) - }) - - let logs: tf.Logs | undefined - if (evalDs !== undefined) { - logs = await evaluate(model, evalDs, c.maxEvalBatches) + // Check if we should stop + iteration++ + if (iteration > c.maxIter) { + break + } + let logs: tf.Logs | undefined + if (evalDs !== undefined) { + logs = await evaluate(model, evalDs, c.maxEvalBatches) + } + await callbacks.onEpochEnd?.(epoch, logs) + await new Promise((resolve) => setTimeout(resolve, 1)) } - console.log(epoch) - await callbacks.onEpochEnd?.(epoch, logs) - await new Promise((resolve) => setTimeout(resolve, 1)) } + opt.dispose() + console.log('Train after - numTensors: ' + tf.memory().numTensors, `${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB`) await callbacks.onTrainEnd?.() } + +// let epoch = 1 +// let iteration = 1 +// let iterator = await ds.iterator() + +// while (true) { +// let next = await iterator.next() +// if (next.done === true) { +// epoch++ +// if (epoch > epochs) { +// break +// } +// iterator = await ds.iterator() +// next = await iterator.next() +// } +// await callbacks.onEpochBegin?.(epoch) +// const { xs, ys } = next.value + +// // Keep loss for reporting +// let loss +// const optFunc: () => tf.Scalar = () => { +// const logits = model.apply(xs as tf.Tensor2D) +// loss = tf.keep(tf.losses.softmaxCrossEntropy(ys, logits)) +// return loss as tf.Scalar +// } +// tf.tidy(() => { +// const { value, grads } = opt.computeGradients(optFunc) +// const gradsClipped = clipByGlobalNormObj(grads, 1) +// opt.applyGradients(gradsClipped) +// }) +// if (loss !== undefined) { +// tf.dispose([(loss as tf.Scalar)]) +// } +// xs.dispose() +// ys.dispose() + +// // Check if we should stop +// iteration++ +// if (iteration > c.maxIter) { +// break +// } + +// for (let epoch = 1; epoch <= epochs; epoch++) { +// await callbacks.onEpochBegin?.(epoch) + +// // Zip each batch with the iteration number +// await tf.data.zip<[number, { xs: tf.Tensor2D, ys: tf.Tensor3D }]>([ +// tf.data.generator(function * () { +// for (let i = 1; i <= c.maxIter; i++) { yield i } +// }), +// ds +// ]).mapAsync(async ([iteration, { xs, ys }]) => { +// await callbacks.onBatchBegin?.(iteration) +// let loss +// const optFunc: () => tf.Scalar = () => { +// const logits = model.apply(xs) +// if (Array.isArray(logits)) { throw new Error('model outputs too many tensor') } +// if (logits instanceof tf.SymbolicTensor) { throw new Error('model outputs symbolic tensor') } +// loss = tf.keep(tf.losses.softmaxCrossEntropy(ys, logits)) +// return loss as tf.Scalar +// } +// tf.tidy(() => { +// const { value, grads } = opt.computeGradients(optFunc) +// const gradsClipped = clipByGlobalNormObj(grads, 1) +// opt.applyGradients(gradsClipped) +// }) +// let lossNumber = 0 +// if (loss !== undefined) { +// lossNumber = await (loss as tf.Scalar).array() +// tf.dispose([(loss as tf.Scalar)]) +// } +// xs.dispose() +// ys.dispose() +// // const lossFn: () => tf.Scalar = () => { +// // const logits = model.apply(xs) +// // if (Array.isArray(logits)) { throw new Error('model outputs too many tensor') } +// // if (logits instanceof tf.SymbolicTensor) { throw new Error('model outputs symbolic tensor') } +// // const loss = tf.losses.softmaxCrossEntropy(ys, logits) +// // return loss as tf.Scalar +// // } +// // const loss = tf.tidy(() => { +// // const { grads, value: loss } = opt.computeGradients(lossFn) +// // const gradsClipped = clipByGlobalNormObj(grads, 1) +// // opt.applyGradients(gradsClipped) +// // return loss +// // }) + +// // const lossNumber = await loss.array() +// // tf.dispose([xs, ys, loss]) +// await callbacks.onBatchEnd?.(iteration) +// return [iteration, lossNumber] +// }).forEachAsync(([iteration, loss]) => { +// const a = loss +// // console.log( +// // `Epoch: ${epoch}`, +// // `\tStep: ${iteration} / ${c.maxIter}`, +// // `\tLoss: ${loss.toFixed(3)}`, +// // `\tMemory: ${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB` +// // ) +// }) + +// let logs: tf.Logs | undefined +// if (evalDs !== undefined) { +// logs = await evaluate(model, evalDs, c.maxEvalBatches) +// } +// await callbacks.onEpochEnd?.(epoch, logs) +// await new Promise((resolve) => setTimeout(resolve, 1)) +// } From 9bb412002df92e4f525bbea3b582e49189a16489 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Tue, 19 Mar 2024 18:51:56 +0100 Subject: [PATCH 05/37] Clean training loop and fix evaluate memory leak --- .../discojs-core/src/models/gpt/evaluate.ts | 12 +- discojs/discojs-core/src/models/gpt/index.ts | 1 - discojs/discojs-core/src/models/gpt/model.ts | 1 - discojs/discojs-core/src/models/gpt/train.ts | 129 ++---------------- .../src/training/trainer/trainer.ts | 1 - 5 files changed, 16 insertions(+), 128 deletions(-) diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index 004c4272e..616226c67 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -12,16 +12,17 @@ export default async function evaluate ( await dataset.take(maxEvalBatches).map(({ xs, ys }) => { const logits = model.apply(xs) if (Array.isArray(logits)) { - throw new Error('model outputed many tensor') + throw new Error('model output too many tensor') } if (logits instanceof tf.SymbolicTensor) { - throw new Error('model outputed symbolic tensor') + throw new Error('model output symbolic tensor') } xs.dispose() return { logits, ys } }).mapAsync(async ({ logits, ys }) => { - const loss = (await tf.losses.softmaxCrossEntropy(ys, logits).array()) + const lossTensor = tf.losses.softmaxCrossEntropy(ys, logits) + const loss = await lossTensor.array() if (typeof loss !== 'number') { throw new Error('got multiple loss') } @@ -29,13 +30,12 @@ export default async function evaluate ( const accTensor = tf.metrics.categoricalAccuracy(ys, logits) const accSize = accTensor.shape.reduce((l, r) => l * r, 1) const accSum = accTensor.sum() - const accSummed = await accSum.array() + const accSummed = accSum.arraySync() if (typeof accSummed !== 'number') { throw new Error('got multiple accuracy sum') } - tf.dispose([ys, logits, accTensor, accSum]) - + tf.dispose([ys, logits, accTensor, accSum, lossTensor]) return { loss, accSummed, accSize } }).forEachAsync(({ loss, accSummed, accSize }) => { datasetSize += 1 diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 59624b2d8..924b22fc4 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -67,7 +67,6 @@ export class GPT extends Model { epochs = 1, tracker = new Sink() ): AsyncGenerator { - console.log(epochs) let logs: tf.Logs | undefined const trainingArgs: tf.ModelFitDatasetArgs = { epochs: 1, // force fitDataset to do only one epoch because it is wrapped in a for loop diff --git a/discojs/discojs-core/src/models/gpt/model.ts b/discojs/discojs-core/src/models/gpt/model.ts index 997bd57fc..3a6b5ca87 100644 --- a/discojs/discojs-core/src/models/gpt/model.ts +++ b/discojs/discojs-core/src/models/gpt/model.ts @@ -466,7 +466,6 @@ class GPTModel extends LayersModel { dataset: Dataset, args: tf.ModelFitDatasetArgs ): Promise { - console.log('=== GPTModel custom train function ===') const config = { ...this.config, ...args } await train( diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index 6c2bd28f1..50ef550e6 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -48,7 +48,6 @@ export async function train ( callbacks: TrainingCallbacks, evalDs?: tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }> ): Promise { - console.log('Train before - numTensors: ' + tf.memory().numTensors, `${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB`) const c = resolveConfig(config) const opt = c.weightDecay !== 0 ? getCustomAdam(model, c) : tf.train.adam(c.lr) @@ -58,7 +57,8 @@ export async function train ( const iterator = await ds.iterator() while (true) { const next = await iterator.next() - if (next.done === true) { + if (next.done === true || iteration > c.maxIter) { + tf.dispose([next.value]) break } await callbacks.onEpochBegin?.(epoch) @@ -66,8 +66,12 @@ export async function train ( const lossFn: () => tf.Scalar = () => { const logits = model.apply(xs) - if (Array.isArray(logits)) { throw new Error('model outputs too many tensor') } - if (logits instanceof tf.SymbolicTensor) { throw new Error('model outputs symbolic tensor') } + if (Array.isArray(logits)) { + throw new Error('model outputs too many tensor') + } + if (logits instanceof tf.SymbolicTensor) { + throw new Error('model outputs symbolic tensor') + } return tf.losses.softmaxCrossEntropy(ys, logits) } const lossTensor = tf.tidy(() => { @@ -78,136 +82,23 @@ export async function train ( }) const loss = await lossTensor.array() - tf.dispose([xs, ys, lossTensor, loss]) + tf.dispose([xs, ys, lossTensor]) console.log( `Epoch: ${epoch}`, `\tStep: ${iteration} / ${c.maxIter}`, `\tLoss: ${loss.toFixed(3)}`, `\tMemory: ${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB` ) - // Check if we should stop - iteration++ - if (iteration > c.maxIter) { - break - } let logs: tf.Logs | undefined if (evalDs !== undefined) { logs = await evaluate(model, evalDs, c.maxEvalBatches) } await callbacks.onEpochEnd?.(epoch, logs) await new Promise((resolve) => setTimeout(resolve, 1)) + iteration++ } } opt.dispose() - console.log('Train after - numTensors: ' + tf.memory().numTensors, `${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB`) await callbacks.onTrainEnd?.() } - -// let epoch = 1 -// let iteration = 1 -// let iterator = await ds.iterator() - -// while (true) { -// let next = await iterator.next() -// if (next.done === true) { -// epoch++ -// if (epoch > epochs) { -// break -// } -// iterator = await ds.iterator() -// next = await iterator.next() -// } -// await callbacks.onEpochBegin?.(epoch) -// const { xs, ys } = next.value - -// // Keep loss for reporting -// let loss -// const optFunc: () => tf.Scalar = () => { -// const logits = model.apply(xs as tf.Tensor2D) -// loss = tf.keep(tf.losses.softmaxCrossEntropy(ys, logits)) -// return loss as tf.Scalar -// } -// tf.tidy(() => { -// const { value, grads } = opt.computeGradients(optFunc) -// const gradsClipped = clipByGlobalNormObj(grads, 1) -// opt.applyGradients(gradsClipped) -// }) -// if (loss !== undefined) { -// tf.dispose([(loss as tf.Scalar)]) -// } -// xs.dispose() -// ys.dispose() - -// // Check if we should stop -// iteration++ -// if (iteration > c.maxIter) { -// break -// } - -// for (let epoch = 1; epoch <= epochs; epoch++) { -// await callbacks.onEpochBegin?.(epoch) - -// // Zip each batch with the iteration number -// await tf.data.zip<[number, { xs: tf.Tensor2D, ys: tf.Tensor3D }]>([ -// tf.data.generator(function * () { -// for (let i = 1; i <= c.maxIter; i++) { yield i } -// }), -// ds -// ]).mapAsync(async ([iteration, { xs, ys }]) => { -// await callbacks.onBatchBegin?.(iteration) -// let loss -// const optFunc: () => tf.Scalar = () => { -// const logits = model.apply(xs) -// if (Array.isArray(logits)) { throw new Error('model outputs too many tensor') } -// if (logits instanceof tf.SymbolicTensor) { throw new Error('model outputs symbolic tensor') } -// loss = tf.keep(tf.losses.softmaxCrossEntropy(ys, logits)) -// return loss as tf.Scalar -// } -// tf.tidy(() => { -// const { value, grads } = opt.computeGradients(optFunc) -// const gradsClipped = clipByGlobalNormObj(grads, 1) -// opt.applyGradients(gradsClipped) -// }) -// let lossNumber = 0 -// if (loss !== undefined) { -// lossNumber = await (loss as tf.Scalar).array() -// tf.dispose([(loss as tf.Scalar)]) -// } -// xs.dispose() -// ys.dispose() -// // const lossFn: () => tf.Scalar = () => { -// // const logits = model.apply(xs) -// // if (Array.isArray(logits)) { throw new Error('model outputs too many tensor') } -// // if (logits instanceof tf.SymbolicTensor) { throw new Error('model outputs symbolic tensor') } -// // const loss = tf.losses.softmaxCrossEntropy(ys, logits) -// // return loss as tf.Scalar -// // } -// // const loss = tf.tidy(() => { -// // const { grads, value: loss } = opt.computeGradients(lossFn) -// // const gradsClipped = clipByGlobalNormObj(grads, 1) -// // opt.applyGradients(gradsClipped) -// // return loss -// // }) - -// // const lossNumber = await loss.array() -// // tf.dispose([xs, ys, loss]) -// await callbacks.onBatchEnd?.(iteration) -// return [iteration, lossNumber] -// }).forEachAsync(([iteration, loss]) => { -// const a = loss -// // console.log( -// // `Epoch: ${epoch}`, -// // `\tStep: ${iteration} / ${c.maxIter}`, -// // `\tLoss: ${loss.toFixed(3)}`, -// // `\tMemory: ${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB` -// // ) -// }) - -// let logs: tf.Logs | undefined -// if (evalDs !== undefined) { -// logs = await evaluate(model, evalDs, c.maxEvalBatches) -// } -// await callbacks.onEpochEnd?.(epoch, logs) -// await new Promise((resolve) => setTimeout(resolve, 1)) -// } diff --git a/discojs/discojs-core/src/training/trainer/trainer.ts b/discojs/discojs-core/src/training/trainer/trainer.ts index fe29ca67f..360af31dd 100644 --- a/discojs/discojs-core/src/training/trainer/trainer.ts +++ b/discojs/discojs-core/src/training/trainer/trainer.ts @@ -75,7 +75,6 @@ export abstract class Trainer { * We update the training graph, this needs to be done on epoch end as there is no validation accuracy onBatchEnd. */ protected onEpochEnd (epoch: number, logs?: tf.Logs): void { - console.log('Trainer', epoch) this.trainerLogger.onEpochEnd(epoch, logs) if (logs !== undefined && !isNaN(logs.acc) && !isNaN(logs.val_acc)) { From d6c12c4e9b230713496c85cebbf8b1080fd75ffd Mon Sep 17 00:00:00 2001 From: tharvik Date: Fri, 16 Feb 2024 16:51:32 +0100 Subject: [PATCH 06/37] *: use latest LTS node --- .github/workflows/deploy-server.yml | 3 +- .github/workflows/github-pages.yml | 13 +++----- .github/workflows/lint-test-build.yml | 45 +++++++++++++-------------- .github/workflows/publish.yml | 6 +--- .nvmrc | 2 +- DEV.md | 39 +++++++++-------------- Dockerfile | 15 +-------- 7 files changed, 44 insertions(+), 79 deletions(-) diff --git a/.github/workflows/deploy-server.yml b/.github/workflows/deploy-server.yml index 6eb9fcfc8..b44e61325 100644 --- a/.github/workflows/deploy-server.yml +++ b/.github/workflows/deploy-server.yml @@ -6,7 +6,6 @@ on: types: [completed] env: - node_version: 16 server_url: https://deai-313515.ew.r.appspot.com/ jobs: @@ -20,7 +19,7 @@ jobs: ref: production - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm cache-dependency-path: | discojs/package-lock.json diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index f3333d58f..783de6af5 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -5,9 +5,6 @@ on: branches: [production] types: [completed] -env: - node_version: 16 - jobs: gh-pages-build: runs-on: ubuntu-latest @@ -15,7 +12,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm cache-dependency-path: | discojs/package-lock.json @@ -30,15 +27,15 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v1 with: - path: './web-client/dist' - + path: "./web-client/dist" + gh-pages-deploy: needs: gh-pages-build # Grant GITHUB_TOKEN the permissions required to make a Pages deployment permissions: - pages: write # to deploy to Pages - id-token: write # to verify the deployment originates from an appropriate source + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source # Deploy to the github-pages environment environment: diff --git a/.github/workflows/lint-test-build.yml b/.github/workflows/lint-test-build.yml index 5228ed62c..fa8207e6f 100644 --- a/.github/workflows/lint-test-build.yml +++ b/.github/workflows/lint-test-build.yml @@ -4,9 +4,6 @@ on: branches: production pull_request: -env: - node_version: 16 - jobs: download-datasets: runs-on: ubuntu-latest @@ -28,7 +25,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,node} run build @@ -41,7 +38,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build @@ -54,7 +51,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build @@ -67,7 +64,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,node} run build @@ -80,7 +77,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace={./discojs/discojs-{core,node},./server} run build @@ -93,7 +90,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,web} run build @@ -106,7 +103,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace={./discojs/discojs-{core,node},./server} run build @@ -119,7 +116,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build @@ -131,7 +128,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build @@ -144,7 +141,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm run --workspace=./discojs/discojs-core build @@ -157,7 +154,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm run --workspace=./discojs/discojs-{core,node} build @@ -180,7 +177,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm run --workspace={./discojs/discojs-{core,node},./server} build @@ -193,7 +190,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,web} run build @@ -206,7 +203,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace={./discojs/discojs-{core,node},./server} run build @@ -228,7 +225,7 @@ jobs: key: datasets-${{ hashFiles('datasets/**') }} - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,node} run build @@ -248,7 +245,7 @@ jobs: key: datasets-${{ hashFiles('datasets/**') }} - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build @@ -268,7 +265,7 @@ jobs: key: datasets-${{ hashFiles('datasets/**') }} - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build @@ -288,7 +285,7 @@ jobs: key: datasets-${{ hashFiles('datasets/**') }} - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,node} run build @@ -308,7 +305,7 @@ jobs: key: datasets-${{ hashFiles('datasets/**') }} - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,web} run build @@ -335,7 +332,7 @@ jobs: key: datasets-${{ hashFiles('datasets/**') }} - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace={./discojs/discojs-{core,node},./server} run build @@ -355,7 +352,7 @@ jobs: key: datasets-${{ hashFiles('datasets/**') }} - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc cache: npm - run: npm ci - run: npm --workspace={./discojs/discojs-{core,node},./server} run build diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b25b3cc49..bd2afe4a5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,18 +7,14 @@ on: required: true type: string -env: - node_version: 16 - jobs: - publish-and-tag: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: ${{ env.node_version }} + node-version-file: .nvmrc registry-url: https://registry.npmjs.org cache: npm cache-dependency-path: | diff --git a/.nvmrc b/.nvmrc index 6f7f377bf..9a2a0e219 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16 +v20 diff --git a/DEV.md b/DEV.md index cf02d2b11..ce854f0fa 100644 --- a/DEV.md +++ b/DEV.md @@ -44,49 +44,38 @@ flowchart LR The following instructions will install the required dependencies, build Disco.js and launch a DISCO server and a web client. If you run into any sort of trouble check our [FAQ](./docs/FAQ.md); otherwise please create a new issue or feel free to ask on [our slack](https://join.slack.com/t/disco-decentralized/shared_invite/zt-fpsb7c9h-1M9hnbaSonZ7lAgJRTyNsw). -**1.** We recommend using [nvm](https://github.com/nvm-sh/nvm) (Node Version Manager) to handle multiple Node.js versions. Start by installing `nvm` by following [their installation instructions](https://github.com/nvm-sh/nvm). -After installation, you should be able to run +**1.** Clone the repository ``` -nvm -v -0.39.7 # my nvm version at the time +git clone git@github.com:epfml/disco.git +cd disco ``` -**2.** Install Node.js version 16 +**2.** Install Node.js -``` -nvm install 16 -``` - -You can now choose which Node.js version to use: +We recommend using [nvm](https://github.com/nvm-sh/nvm) (Node Version Manager) to handle multiple Node.js versions. Start by installing `nvm` by following [their installation instructions](https://github.com/nvm-sh/nvm). +After installation, you should be able to run ``` -nvm use 16 +nvm -v +0.39.7 # at the time of writing ``` -Using Node.js v16 should automatically set your [npm](https://docs.npmjs.com/about-npm) (Node Package Manager, different from n**v**m) version to 8: +Use it to install the version we use in DISCO. ``` -npm --version -8.xx.xx +nvm install # it reads `.nvmrc` to select the correct version ``` `nvm` manages your different Node.js versions while `npm` handles your different Node.js project packages within one version. -**3.** Clone the repository - -``` -git clone git@github.com:epfml/disco.git -cd disco -``` - -**4.** Install the dependencies +**3.** Install the dependencies ``` npm ci ``` -**5.** Build the projects +**4.** Build the projects Then we need to builds the packages meaning compile TypeScript into JavaScript. @@ -98,13 +87,13 @@ Or you can select a specific workspace via `--workspace=$name-or-path-to-package npm -ws run build ``` -**6.** Download and extract the sample training datasets. These datasets are used in the automated tests. +**5.** Download and extract the sample training datasets. These datasets are used in the automated tests. ``` ./datasets/populate ``` -**7.** Launch DISCO +**6.** Launch DISCO As you may have seen, there are many ways to use DISCO. Here we will run a server and a web client. From there, a user can use DISCO from their browser. diff --git a/Dockerfile b/Dockerfile index 3473e420e..acdf05df8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,4 @@ -# syntax=docker/dockerfile:1 - -FROM ubuntu:20.04 - -ENV NODE_ENV=development - -RUN apt-get upgrade -y \ - && apt-get update -y \ - && apt-get install -y libnode-dev \ - && apt-get install -y python3.8 \ - && apt install -y build-essential \ - && apt-get install -y curl \ - && curl --silent --location https://deb.nodesource.com/setup_16.x | bash - \ - && apt install -y nodejs +FROM node:20 COPY package*.json . COPY isomorphic-wrtc/package.json isomorphic-wrtc/ From 737339a343c3a94cd46ca97eb36b0a80ca09bde4 Mon Sep 17 00:00:00 2001 From: tharvik Date: Thu, 21 Mar 2024 09:49:14 +0100 Subject: [PATCH 07/37] github: upgrade actions --- .github/workflows/deploy-server.yml | 4 +- .github/workflows/github-pages.yml | 4 +- .github/workflows/lint-test-build.yml | 106 +++++++++++++------------- .github/workflows/publish.yml | 4 +- 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.github/workflows/deploy-server.yml b/.github/workflows/deploy-server.yml index b44e61325..2e25cdd5c 100644 --- a/.github/workflows/deploy-server.yml +++ b/.github/workflows/deploy-server.yml @@ -14,10 +14,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: production - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 783de6af5..7e1932272 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -9,8 +9,8 @@ jobs: gh-pages-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm diff --git a/.github/workflows/lint-test-build.yml b/.github/workflows/lint-test-build.yml index fa8207e6f..926473dcf 100644 --- a/.github/workflows/lint-test-build.yml +++ b/.github/workflows/lint-test-build.yml @@ -8,11 +8,11 @@ jobs: download-datasets: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} @@ -22,8 +22,8 @@ jobs: needs: [build-lib-core, build-lib-node] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -35,8 +35,8 @@ jobs: needs: build-lib-core runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -48,8 +48,8 @@ jobs: needs: build-lib-core runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -61,8 +61,8 @@ jobs: needs: [build-lib-core, build-lib-node] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -74,8 +74,8 @@ jobs: needs: [build-lib-core, build-lib-node, build-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -87,8 +87,8 @@ jobs: needs: [build-lib-core, build-lib-web] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -100,8 +100,8 @@ jobs: needs: [build-lib-core, build-lib-node, build-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -113,8 +113,8 @@ jobs: build-lib-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -125,8 +125,8 @@ jobs: needs: build-lib-core runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -138,8 +138,8 @@ jobs: needs: build-lib-core runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -151,8 +151,8 @@ jobs: needs: [build-lib-core, build-lib-node] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -164,8 +164,8 @@ jobs: needs: build-server runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: docker/setup-buildx-action@v1 + - uses: actions/checkout@v4 + - uses: docker/setup-buildx-action@v3 with: install: true - run: docker build . @@ -174,8 +174,8 @@ jobs: needs: [build-lib-core, build-lib-node, build-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -187,8 +187,8 @@ jobs: needs: [build-lib-core, build-lib-web] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -200,8 +200,8 @@ jobs: needs: [build-lib-core, build-lib-node, build-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -215,15 +215,15 @@ jobs: [build-lib-core, build-lib-node, build-server-docker, download-datasets] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -235,15 +235,15 @@ jobs: needs: [build-lib-core, build-server-docker, download-datasets] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -255,15 +255,15 @@ jobs: needs: [build-lib-core, build-server-docker, download-datasets] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -275,15 +275,15 @@ jobs: needs: [build-lib-core, build-lib-node, download-datasets] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -295,15 +295,15 @@ jobs: needs: [build-lib-core, build-lib-web, download-datasets] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -322,15 +322,15 @@ jobs: needs: [build-lib-core, build-lib-node, build-server, download-datasets] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm @@ -342,15 +342,15 @@ jobs: needs: [build-lib-core, build-lib-node, build-server, download-datasets] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true submodules: true - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: datasets key: datasets-${{ hashFiles('datasets/**') }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc cache: npm diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index bd2afe4a5..a31cacf7b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,8 +11,8 @@ jobs: publish-and-tag: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .nvmrc registry-url: https://registry.npmjs.org From f5624ce1632214810ee046786a0a0bab492f29f2 Mon Sep 17 00:00:00 2001 From: tharvik Date: Thu, 21 Mar 2024 08:44:49 +0100 Subject: [PATCH 08/37] isomorphic-wrtc/node: use node-datachannel Closes: #633 --- isomorphic-wrtc/README.md | 2 +- isomorphic-wrtc/node.js | 2 +- isomorphic-wrtc/package.json | 2 +- package-lock.json | 7222 ++++++++++++++++++++++------------ 4 files changed, 4648 insertions(+), 2580 deletions(-) diff --git a/isomorphic-wrtc/README.md b/isomorphic-wrtc/README.md index 533d1ba63..b5dc3bfaf 100644 --- a/isomorphic-wrtc/README.md +++ b/isomorphic-wrtc/README.md @@ -2,7 +2,7 @@ Allow to load a different WebRTC implementation depending on the platform. -* on node, load @koush/wrtc, a C++ plugin +* on node, load node-datachannel, a C++ plugin * in browser, simply exposes the available WebRTC implementation It allows to simply `import wrct from 'isomorphic-wrtc'` and get the same coding experience. diff --git a/isomorphic-wrtc/node.js b/isomorphic-wrtc/node.js index f0f717dc8..24e7a5c2e 100644 --- a/isomorphic-wrtc/node.js +++ b/isomorphic-wrtc/node.js @@ -1,3 +1,3 @@ "use strict"; -module.exports = require("@koush/wrtc"); +module.exports = require("node-datachannel/polyfill"); diff --git a/isomorphic-wrtc/package.json b/isomorphic-wrtc/package.json index b354d0562..aed696638 100644 --- a/isomorphic-wrtc/package.json +++ b/isomorphic-wrtc/package.json @@ -13,6 +13,6 @@ "test": ": nothing" }, "peerDependencies": { - "@koush/wrtc": "*" + "node-datachannel": "*" } } diff --git a/package-lock.json b/package-lock.json index d31e53a11..576727a68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,21 +95,23 @@ "version": "1.0.0", "license": "MIT", "peerDependencies": { - "@koush/wrtc": "*" + "node-datachannel": "*" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@achrinza/node-ipc": { "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz", + "integrity": "sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg==", "dev": true, - "license": "MIT", "dependencies": { "@node-ipc/js-queue": "2.0.3", "event-pubsub": "4.3.0", @@ -121,7 +123,8 @@ }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "engines": { "node": ">=10" }, @@ -130,116 +133,56 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.9", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -256,8 +199,9 @@ }, "node_modules/@babel/core/node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -267,20 +211,22 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.23.6", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -289,8 +235,9 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -300,8 +247,9 @@ }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.15" }, @@ -311,8 +259,9 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -326,36 +275,40 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", + "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -369,16 +322,18 @@ }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -393,16 +348,18 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -416,16 +373,18 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -436,8 +395,9 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -447,8 +407,9 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.23.0" }, @@ -457,11 +418,12 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -469,8 +431,9 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -487,8 +450,9 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -497,17 +461,19 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -521,12 +487,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -538,8 +505,9 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -549,8 +517,9 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -560,8 +529,9 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -570,33 +540,37 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", @@ -607,26 +581,29 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.9", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -634,8 +611,9 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -645,8 +623,9 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -658,37 +637,42 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -697,8 +681,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "license": "MIT", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -707,11 +692,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -721,13 +707,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -737,12 +724,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -753,8 +741,10 @@ }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -767,13 +757,14 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.23.9", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz", + "integrity": "sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.23.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-decorators": "^7.23.3" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-decorators": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -784,8 +775,9 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -795,8 +787,9 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -806,8 +799,9 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -817,8 +811,9 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -830,11 +825,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", + "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -845,8 +841,9 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -856,8 +853,9 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -866,11 +864,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -880,11 +879,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -895,8 +895,9 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -906,8 +907,9 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -916,11 +918,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -931,8 +934,9 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -942,8 +946,9 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -953,8 +958,9 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -964,8 +970,9 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -975,8 +982,9 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -986,8 +994,9 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -997,8 +1006,9 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1011,8 +1021,9 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1025,8 +1036,9 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1039,11 +1051,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1053,12 +1066,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -1070,12 +1084,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { @@ -1086,11 +1101,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1100,11 +1116,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", + "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1114,12 +1131,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1129,12 +1147,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", + "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1145,16 +1164,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1167,19 +1187,21 @@ }, "node_modules/@babel/plugin-transform-classes/node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1189,11 +1211,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1203,12 +1226,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1218,11 +1242,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1232,11 +1257,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1247,12 +1273,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1262,11 +1289,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1277,11 +1305,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1292,13 +1321,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1308,11 +1338,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1323,11 +1354,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1337,11 +1369,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1352,11 +1385,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1366,12 +1400,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1381,12 +1416,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -1397,13 +1433,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { @@ -1414,12 +1451,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1430,8 +1468,9 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1444,11 +1483,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1458,11 +1498,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1473,11 +1514,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1488,15 +1530,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1506,12 +1548,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1521,11 +1564,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1536,11 +1580,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1552,11 +1597,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1566,12 +1612,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1581,13 +1628,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1598,11 +1646,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1612,11 +1661,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1627,11 +1677,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1641,15 +1692,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.9", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1661,18 +1713,20 @@ }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1682,11 +1736,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { @@ -1697,11 +1752,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1711,11 +1767,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1725,11 +1782,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1739,11 +1797,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1753,12 +1812,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1768,12 +1828,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1783,12 +1844,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1798,25 +1860,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.9", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz", + "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", + "@babel/compat-data": "^7.24.1", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1828,58 +1891,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.1", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.1", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1892,16 +1955,18 @@ }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1913,12 +1978,14 @@ }, "node_modules/@babel/regjsgen": { "version": "0.8.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "license": "MIT", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1927,9 +1994,10 @@ } }, "node_modules/@babel/runtime-corejs2": { - "version": "7.23.9", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.24.1.tgz", + "integrity": "sha512-De0q0utpUPiXnc7+B7Ku86mJ0eDItC/v3uFa/lQkq63XnHyZiytDHeCIvechlnVwwpU2ChjGF7c3I+mBrTudwg==", "dev": true, - "license": "MIT", "dependencies": { "core-js": "^2.6.12", "regenerator-runtime": "^0.14.0" @@ -1940,45 +2008,51 @@ }, "node_modules/@babel/runtime-corejs2/node_modules/core-js": { "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "dev": true, - "hasInstallScript": true, - "license": "MIT" + "hasInstallScript": true }, "node_modules/@babel/runtime-corejs2/node_modules/regenerator-runtime": { "version": "0.14.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true }, "node_modules/@babel/runtime/node_modules/regenerator-runtime": { "version": "0.14.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/@babel/template": { - "version": "7.23.9", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1988,16 +2062,18 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.23.9", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -2009,7 +2085,8 @@ }, "node_modules/@colors/colors": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "optional": true, "engines": { "node": ">=0.1.90" @@ -2017,7 +2094,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2027,7 +2105,8 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2035,7 +2114,8 @@ }, "node_modules/@cypress/request": { "version": "2.88.12", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", + "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2062,7 +2142,8 @@ }, "node_modules/@cypress/request/node_modules/form-data": { "version": "2.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -2074,14 +2155,16 @@ }, "node_modules/@cypress/request/node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@cypress/xvfb": { "version": "1.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -2089,15 +2172,17 @@ }, "node_modules/@cypress/xvfb/node_modules/debug": { "version": "3.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { "ms": "^2.1.1" } }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -2128,8 +2213,9 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -2142,16 +2228,18 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2172,8 +2260,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2181,8 +2270,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2191,30 +2281,34 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@hapi/hoek": { "version": "9.3.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true }, "node_modules/@hapi/topo": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -2226,8 +2320,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2235,8 +2330,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2246,8 +2342,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2258,15 +2355,17 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.2", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true }, "node_modules/@intlify/core-base": { - "version": "9.9.1", - "license": "MIT", + "version": "9.10.2", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.10.2.tgz", + "integrity": "sha512-HGStVnKobsJL0DoYIyRCGXBH63DMQqEZxDUGrkNI05FuTcruYUtOAxyL3zoAZu/uDGO6mcUvm3VXBaHG2GdZCg==", "dependencies": { - "@intlify/message-compiler": "9.9.1", - "@intlify/shared": "9.9.1" + "@intlify/message-compiler": "9.10.2", + "@intlify/shared": "9.10.2" }, "engines": { "node": ">= 16" @@ -2276,10 +2375,11 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "9.9.1", - "license": "MIT", + "version": "9.10.2", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.10.2.tgz", + "integrity": "sha512-ntY/kfBwQRtX5Zh6wL8cSATujPzWW2ZQd1QwKyWwAy5fMqJyyixHMeovN4fmEyCqSu+hFfYOE63nU94evsy4YA==", "dependencies": { - "@intlify/shared": "9.9.1", + "@intlify/shared": "9.10.2", "source-map-js": "^1.0.2" }, "engines": { @@ -2290,8 +2390,9 @@ } }, "node_modules/@intlify/shared": { - "version": "9.9.1", - "license": "MIT", + "version": "9.10.2", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.10.2.tgz", + "integrity": "sha512-ttHCAJkRy7R5W2S9RVnN9KYQYPIpV2+GiS79T4EE37nrPyH6/1SrOh3bmdCRC1T3ocL8qCDx7x2lBJ0xaITU7Q==", "engines": { "node": ">= 16" }, @@ -2301,7 +2402,8 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2316,7 +2418,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "engines": { "node": ">=12" }, @@ -2326,7 +2429,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { "node": ">=12" }, @@ -2336,11 +2440,13 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -2355,7 +2461,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2368,7 +2475,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -2382,12 +2490,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "license": "MIT", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -2395,34 +2504,39 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "license": "MIT", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "license": "MIT", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2430,8 +2544,9 @@ }, "node_modules/@koush/wrtc": { "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@koush/wrtc/-/wrtc-0.5.3.tgz", + "integrity": "sha512-hQqoSZS3/1pUJo3v91oXqFPRQZnqVxiGbEvYE4QsCGUv1hoqGyvr9Kj47RUP9xdYkHMra9HSWFqPj61U8PdSRQ==", "hasInstallScript": true, - "license": "BSD-2-Clause", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.8", "nan": "^2.3.2", @@ -2447,12 +2562,14 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -2470,7 +2587,8 @@ }, "node_modules/@meforma/vue-toaster": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@meforma/vue-toaster/-/vue-toaster-1.3.0.tgz", + "integrity": "sha512-jH0zOA/jTiT+UKHO9n5hjPTLkIfg7d66X4fnd7ssIbcXpZOoe+J8IY6Kf3nRW5iVD6/tkjeyp+tjVK8zk6zASg==", "dependencies": { "stylus": "~0.54.8", "stylus-loader": "~3.0.2" @@ -2478,8 +2596,9 @@ }, "node_modules/@node-ipc/js-queue": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", "dev": true, - "license": "MIT", "dependencies": { "easy-stack": "1.0.1" }, @@ -2489,7 +2608,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2500,14 +2620,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2518,25 +2640,29 @@ }, "node_modules/@one-ini/wasm": { "version": "0.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "optional": true, "engines": { "node": ">=14" } }, "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "dev": true, - "license": "MIT" + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", + "dev": true }, "node_modules/@popperjs/core": { "version": "2.11.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -2544,26 +2670,30 @@ }, "node_modules/@sideway/address": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@sideway/formula": { "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true }, "node_modules/@soda/friendly-errors-webpack-plugin": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^3.0.0", "error-stack-parser": "^2.0.6", @@ -2579,8 +2709,9 @@ }, "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2591,12 +2722,14 @@ }, "node_modules/@soda/get-current-script": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true }, "node_modules/@tensorflow/tfjs": { "version": "4.17.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-4.17.0.tgz", + "integrity": "sha512-yXRBhpM3frlNA/YaPp6HNk9EfIi8han5RYeQA3R8OCa0Od+AfoG1PUmlxV8fE2wCorlGVyHsgpiJ6M9YZPB56w==", "dependencies": { "@tensorflow/tfjs-backend-cpu": "4.17.0", "@tensorflow/tfjs-backend-webgl": "4.17.0", @@ -2616,7 +2749,8 @@ }, "node_modules/@tensorflow/tfjs-backend-cpu": { "version": "4.17.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.17.0.tgz", + "integrity": "sha512-2VSCHnX9qhYTjw9HiVwTBSnRVlntKXeBlK7aSVsmZfHGwWE2faErTtO7bWmqNqw0U7gyznJbVAjlow/p+0RNGw==", "dependencies": { "@types/seedrandom": "^2.4.28", "seedrandom": "^3.0.5" @@ -2630,7 +2764,8 @@ }, "node_modules/@tensorflow/tfjs-backend-webgl": { "version": "4.17.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.17.0.tgz", + "integrity": "sha512-CC5GsGECCd7eYAUaKq0XJ48FjEZdgXZWPxgUYx4djvfUx5fQPp35hCSP9w/k463jllBMbjl2tKRg8u7Ia/LYzg==", "dependencies": { "@tensorflow/tfjs-backend-cpu": "4.17.0", "@types/offscreencanvas": "~2019.3.0", @@ -2646,14 +2781,16 @@ }, "node_modules/@tensorflow/tfjs-converter": { "version": "4.17.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.17.0.tgz", + "integrity": "sha512-qFxIjPfomCuTrYxsFjtKbi3QfdmTTCWo+RvqD64oCMS0sjp7sUDNhJyKDoLx6LZhXlwXpHIVDJctLMRMwet0Zw==", "peerDependencies": { "@tensorflow/tfjs-core": "4.17.0" } }, "node_modules/@tensorflow/tfjs-core": { "version": "4.17.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.17.0.tgz", + "integrity": "sha512-v9Q5430EnRpyhWNd9LVgXadciKvxLiq+sTrLKRowh26BHyAsams4tZIgX3lFKjB7b90p+FYifVMcqLTTHgjGpQ==", "dependencies": { "@types/long": "^4.0.1", "@types/offscreencanvas": "~2019.7.0", @@ -2669,11 +2806,13 @@ }, "node_modules/@tensorflow/tfjs-core/node_modules/@types/offscreencanvas": { "version": "2019.7.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==" }, "node_modules/@tensorflow/tfjs-core/node_modules/node-fetch": { "version": "2.6.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2691,15 +2830,18 @@ }, "node_modules/@tensorflow/tfjs-core/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/@tensorflow/tfjs-core/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/@tensorflow/tfjs-core/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -2707,7 +2849,8 @@ }, "node_modules/@tensorflow/tfjs-data": { "version": "4.17.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-4.17.0.tgz", + "integrity": "sha512-aPKrDFip+gXicWOFALeNT7KKQjRXFkHd/hNe/zs4mCFcIN00hy1PkZ6xkYsgrsdLDQMBSGeS4B4ZM0k5Cs88QA==", "dependencies": { "@types/node-fetch": "^2.1.2", "node-fetch": "~2.6.1", @@ -2720,7 +2863,8 @@ }, "node_modules/@tensorflow/tfjs-data/node_modules/node-fetch": { "version": "2.6.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2738,15 +2882,18 @@ }, "node_modules/@tensorflow/tfjs-data/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/@tensorflow/tfjs-data/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/@tensorflow/tfjs-data/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -2754,15 +2901,17 @@ }, "node_modules/@tensorflow/tfjs-layers": { "version": "4.17.0", - "license": "Apache-2.0 AND MIT", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-4.17.0.tgz", + "integrity": "sha512-DEE0zRKvf3LJ0EcvG5XouJYOgFGWYAneZ0K1d23969z7LfSyqVmBdLC6BTwdLKuJk3ouUJIKXU1TcpFmjDuh7g==", "peerDependencies": { "@tensorflow/tfjs-core": "4.17.0" } }, "node_modules/@tensorflow/tfjs-node": { "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-4.17.0.tgz", + "integrity": "sha512-lRe5XPwLzVgpLoxgKWWlqCX9uYybklMai3npgVcvniLQnd6JjkGx+RY2D+7jyQmdo1zJUACfxw3conP88OcBug==", "hasInstallScript": true, - "license": "Apache-2.0", "dependencies": { "@mapbox/node-pre-gyp": "1.0.9", "@tensorflow/tfjs": "4.17.0", @@ -2779,7 +2928,8 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp": { "version": "1.0.9", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -2797,7 +2947,8 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -2808,14 +2959,16 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/minipass": { "version": "5.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/mkdirp": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" }, @@ -2825,7 +2978,8 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { "version": "3.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, @@ -2837,8 +2991,9 @@ } }, "node_modules/@tensorflow/tfjs-node/node_modules/@mapbox/node-pre-gyp/node_modules/tar": { - "version": "6.2.0", - "license": "ISC", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -2853,7 +3008,8 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/https-proxy-agent": { "version": "2.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -2864,7 +3020,8 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/https-proxy-agent/node_modules/agent-base": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dependencies": { "es6-promisify": "^5.0.0" }, @@ -2874,14 +3031,16 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/https-proxy-agent/node_modules/debug": { "version": "3.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { "ms": "^2.1.1" } }, "node_modules/@tensorflow/tfjs-node/node_modules/minipass": { "version": "2.9.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2889,11 +3048,13 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/minipass/node_modules/yallist": { "version": "3.1.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@tensorflow/tfjs-node/node_modules/rimraf": { "version": "2.7.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { "glob": "^7.1.3" }, @@ -2903,7 +3064,8 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/tar": { "version": "4.4.19", - "license": "ISC", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dependencies": { "chownr": "^1.1.4", "fs-minipass": "^1.2.7", @@ -2919,37 +3081,43 @@ }, "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/chownr": { "version": "1.1.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/fs-minipass": { "version": "1.2.7", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dependencies": { "minipass": "^2.6.0" } }, "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/minizlib": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dependencies": { "minipass": "^2.9.0" } }, "node_modules/@tensorflow/tfjs-node/node_modules/tar/node_modules/yallist": { "version": "3.1.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@tensorflow/tfjs/node_modules/argparse": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@tensorflow/tfjs/node_modules/core-js": { "version": "3.29.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.1.tgz", + "integrity": "sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -2957,40 +3125,47 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@trysound/sax": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10.13.0" } }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "node_modules/@types/body-parser": { "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -2998,29 +3173,33 @@ }, "node_modules/@types/bonjour": { "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/chai": { - "version": "4.3.11", - "dev": true, - "license": "MIT" + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.14.tgz", + "integrity": "sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==", + "dev": true }, "node_modules/@types/connect": { "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, - "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -3028,15 +3207,17 @@ }, "node_modules/@types/cors": { "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/d3": { "version": "7.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", @@ -3072,33 +3253,39 @@ }, "node_modules/@types/d3-array": { "version": "3.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" }, "node_modules/@types/d3-axis": { "version": "3.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", "dependencies": { "@types/d3-selection": "*" } }, "node_modules/@types/d3-brush": { "version": "3.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", "dependencies": { "@types/d3-selection": "*" } }, "node_modules/@types/d3-chord": { "version": "3.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==" }, "node_modules/@types/d3-color": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" }, "node_modules/@types/d3-contour": { "version": "3.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", "dependencies": { "@types/d3-array": "*", "@types/geojson": "*" @@ -3106,129 +3293,154 @@ }, "node_modules/@types/d3-delaunay": { "version": "6.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==" }, "node_modules/@types/d3-dispatch": { "version": "3.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==" }, "node_modules/@types/d3-drag": { "version": "3.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", "dependencies": { "@types/d3-selection": "*" } }, "node_modules/@types/d3-dsv": { "version": "3.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==" }, "node_modules/@types/d3-ease": { "version": "3.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" }, "node_modules/@types/d3-fetch": { "version": "3.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", "dependencies": { "@types/d3-dsv": "*" } }, "node_modules/@types/d3-force": { "version": "3.0.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", + "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==" }, "node_modules/@types/d3-format": { "version": "3.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==" }, "node_modules/@types/d3-geo": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", "dependencies": { "@types/geojson": "*" } }, "node_modules/@types/d3-hierarchy": { - "version": "3.1.6", - "license": "MIT" + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==" }, "node_modules/@types/d3-interpolate": { "version": "3.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", "dependencies": { "@types/d3-color": "*" } }, "node_modules/@types/d3-path": { "version": "3.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==" }, "node_modules/@types/d3-polygon": { "version": "3.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==" }, "node_modules/@types/d3-quadtree": { "version": "3.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==" }, "node_modules/@types/d3-random": { "version": "3.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==" }, "node_modules/@types/d3-scale": { "version": "4.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", "dependencies": { "@types/d3-time": "*" } }, "node_modules/@types/d3-scale-chromatic": { "version": "3.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", + "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==" }, "node_modules/@types/d3-selection": { "version": "3.0.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==" }, "node_modules/@types/d3-shape": { "version": "3.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", "dependencies": { "@types/d3-path": "*" } }, "node_modules/@types/d3-time": { "version": "3.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" }, "node_modules/@types/d3-time-format": { "version": "4.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==" }, "node_modules/@types/d3-timer": { "version": "3.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" }, "node_modules/@types/d3-transition": { "version": "3.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", "dependencies": { "@types/d3-selection": "*" } }, "node_modules/@types/d3-zoom": { "version": "3.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "node_modules/@types/eslint": { - "version": "8.56.2", + "version": "8.56.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", + "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3236,8 +3448,9 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -3245,13 +3458,15 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/express": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -3261,8 +3476,9 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3272,8 +3488,9 @@ }, "node_modules/@types/express-ws": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/express-ws/-/express-ws-3.0.4.tgz", + "integrity": "sha512-Yjj18CaivG5KndgcvzttWe8mPFinPCHJC2wvyQqVzA7hqeufM8EtWMj6mpp5omg3s8XALUexhOu8aXAyi/DyJQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/express": "*", "@types/express-serve-static-core": "*", @@ -3282,12 +3499,14 @@ }, "node_modules/@types/geojson": { "version": "7946.0.14", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" }, "node_modules/@types/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, - "license": "MIT", "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -3295,77 +3514,91 @@ }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true }, "node_modules/@types/http-errors": { "version": "2.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true }, "node_modules/@types/http-proxy": { "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.202", - "license": "MIT" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==" }, "node_modules/@types/long": { "version": "4.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/mime": { "version": "1.3.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/minimatch": { "version": "5.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true }, "node_modules/@types/mocha": { "version": "9.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true }, "node_modules/@types/msgpack-lite": { "version": "0.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/msgpack-lite/-/msgpack-lite-0.1.11.tgz", + "integrity": "sha512-cdCZS/gw+jIN22I4SUZUFf1ZZfVv5JM1//Br/MuZcI373sxiy3eSSoiyLu0oz+BPatTbGGGBO5jrcvd0siCdTQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "20.11.19", - "license": "MIT", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/node-fetch": { "version": "2.6.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" @@ -3373,54 +3606,64 @@ }, "node_modules/@types/node-forge": { "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true }, "node_modules/@types/offscreencanvas": { "version": "2019.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" }, "node_modules/@types/parse-json": { "version": "4.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true }, "node_modules/@types/qs": { - "version": "6.9.11", - "dev": true, - "license": "MIT" + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/retry": { "version": "0.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true }, "node_modules/@types/seedrandom": { "version": "2.4.34", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.34.tgz", + "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==" }, "node_modules/@types/semver": { - "version": "7.5.7", - "dev": true, - "license": "MIT" + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true }, "node_modules/@types/send": { "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3428,16 +3671,18 @@ }, "node_modules/@types/serve-index": { "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, - "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -3446,49 +3691,57 @@ }, "node_modules/@types/simple-peer": { "version": "9.11.8", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.8.tgz", + "integrity": "sha512-rvqefdp2rvIA6wiomMgKWd2UZNPe6LM2EV5AuY3CPQJF+8TbdrL5TjYdMf0VAjGczzlkH4l1NjDkihwbj3Xodw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==" }, "node_modules/@types/sizzle": { "version": "2.3.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==" }, "node_modules/@types/sockjs": { "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/uuid": { "version": "9.0.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true }, "node_modules/@types/webpack-env": { "version": "1.18.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.4.tgz", + "integrity": "sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==", + "dev": true }, "node_modules/@types/ws": { "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "optional": true, "dependencies": { "@types/node": "*" @@ -3496,8 +3749,9 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", @@ -3530,8 +3784,9 @@ }, "node_modules/@typescript-eslint/parser": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -3557,8 +3812,9 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" @@ -3573,8 +3829,9 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", @@ -3599,8 +3856,9 @@ }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3611,8 +3869,9 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", @@ -3638,8 +3897,9 @@ }, "node_modules/@typescript-eslint/utils": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -3662,8 +3922,9 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" @@ -3678,37 +3939,42 @@ }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true }, "node_modules/@vue/babel-helper-vue-jsx-merge-props": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "dev": true }, "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.2.1", - "dev": true, - "license": "MIT" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz", + "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==", + "dev": true }, "node_modules/@vue/babel-plugin-jsx": { - "version": "1.2.1", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz", + "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-module-imports": "~7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", - "@vue/babel-helper-vue-transform-on": "1.2.1", - "@vue/babel-plugin-resolve-type": "1.2.1", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "@vue/babel-helper-vue-transform-on": "1.2.2", + "@vue/babel-plugin-resolve-type": "1.2.2", "camelcase": "^6.3.0", "html-tags": "^3.3.1", "svg-tags": "^1.0.0" @@ -3722,25 +3988,51 @@ } } }, + "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@vue/babel-plugin-resolve-type": { - "version": "1.2.1", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz", + "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-module-imports": "~7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/parser": "^7.23.6", + "@babel/parser": "^7.23.9", "@vue/compiler-sfc": "^3.4.15" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, + "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@vue/babel-plugin-transform-vue-jsx": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.2.0", @@ -3755,16 +4047,18 @@ }, "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@vue/babel-preset-app": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", + "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.12.16", "@babel/helper-compilation-targets": "^7.12.16", @@ -3799,8 +4093,9 @@ }, "node_modules/@vue/babel-preset-jsx": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", "dev": true, - "license": "MIT", "dependencies": { "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", @@ -3823,8 +4118,9 @@ }, "node_modules/@vue/babel-sugar-composition-api-inject-h": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-syntax-jsx": "^7.2.0" }, @@ -3834,8 +4130,9 @@ }, "node_modules/@vue/babel-sugar-composition-api-render-instance": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-syntax-jsx": "^7.2.0" }, @@ -3845,8 +4142,9 @@ }, "node_modules/@vue/babel-sugar-functional-vue": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-syntax-jsx": "^7.2.0" }, @@ -3856,8 +4154,9 @@ }, "node_modules/@vue/babel-sugar-inject-h": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-syntax-jsx": "^7.2.0" }, @@ -3867,8 +4166,9 @@ }, "node_modules/@vue/babel-sugar-v-model": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-syntax-jsx": "^7.2.0", "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", @@ -3883,24 +4183,27 @@ }, "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@vue/babel-sugar-v-on": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-syntax-jsx": "^7.2.0", "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", @@ -3912,21 +4215,24 @@ }, "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@vue/cli-overlay": { "version": "5.0.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true }, "node_modules/@vue/cli-plugin-babel": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", + "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.12.16", "@vue/babel-preset-app": "^5.0.8", @@ -3941,8 +4247,9 @@ }, "node_modules/@vue/cli-plugin-eslint": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", + "integrity": "sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==", "dev": true, - "license": "MIT", "dependencies": { "@vue/cli-shared-utils": "^5.0.8", "eslint-webpack-plugin": "^3.1.0", @@ -3957,8 +4264,9 @@ }, "node_modules/@vue/cli-plugin-router": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", "dev": true, - "license": "MIT", "dependencies": { "@vue/cli-shared-utils": "^5.0.8" }, @@ -3968,8 +4276,9 @@ }, "node_modules/@vue/cli-plugin-typescript": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-5.0.8.tgz", + "integrity": "sha512-JKJOwzJshBqsmp4yLBexwVMebOZ4VGJgbnYvmHVxasJOStF2RxwyW28ZF+zIvASGdat4sAUuo/3mAQyVhm7JHg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.12.16", "@types/webpack-env": "^1.15.2", @@ -3999,8 +4308,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-5.0.8.tgz", + "integrity": "sha512-t8eN1ttbSkHg+U7AjCKwpuhpV2OBsP35RjBkdSrcAPjoX3MxVwoWyqGPeYI+jWbPGX3tFxM/uMQwN0U3lmzH7A==", "dev": true, - "license": "MIT", "dependencies": { "@vue/cli-shared-utils": "^5.0.8", "jsdom": "^18.0.1", @@ -4014,24 +4324,27 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/ansi-regex": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4039,8 +4352,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/chokidar": { "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -4059,8 +4373,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/debug": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -4075,8 +4390,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/glob": { "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4094,8 +4410,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4105,16 +4422,18 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/js-yaml": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4124,8 +4443,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/log-symbols": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0" }, @@ -4135,8 +4455,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4146,8 +4467,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/mocha": { "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, - "license": "MIT", "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -4189,13 +4511,15 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/nanoid": { "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -4205,8 +4529,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/readdirp": { "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -4216,16 +4541,18 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/serialize-javascript": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -4236,8 +4563,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -4247,8 +4575,9 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4261,29 +4590,33 @@ }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/wide-align": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2" } }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/workerpool": { "version": "6.1.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true }, "node_modules/@vue/cli-plugin-vuex": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", "dev": true, - "license": "MIT", "peerDependencies": { "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" } }, "node_modules/@vue/cli-service": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.12.16", "@soda/friendly-errors-webpack-plugin": "^1.8.0", @@ -4380,8 +4713,9 @@ }, "node_modules/@vue/cli-shared-utils": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", "dev": true, - "license": "MIT", "dependencies": { "@achrinza/node-ipc": "^9.2.5", "chalk": "^4.1.2", @@ -4398,51 +4732,56 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", + "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", "dependencies": { "@babel/parser": "^7.23.9", - "@vue/shared": "3.4.19", + "@vue/shared": "3.4.21", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", + "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", "dependencies": { - "@vue/compiler-core": "3.4.19", - "@vue/shared": "3.4.19" + "@vue/compiler-core": "3.4.21", + "@vue/shared": "3.4.21" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", + "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", "dependencies": { "@babel/parser": "^7.23.9", - "@vue/compiler-core": "3.4.19", - "@vue/compiler-dom": "3.4.19", - "@vue/compiler-ssr": "3.4.19", - "@vue/shared": "3.4.19", + "@vue/compiler-core": "3.4.21", + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21", "estree-walker": "^2.0.2", - "magic-string": "^0.30.6", - "postcss": "^8.4.33", + "magic-string": "^0.30.7", + "postcss": "^8.4.35", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", + "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", "dependencies": { - "@vue/compiler-dom": "3.4.19", - "@vue/shared": "3.4.19" + "@vue/compiler-dom": "3.4.21", + "@vue/shared": "3.4.21" } }, "node_modules/@vue/component-compiler-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", "dev": true, - "license": "MIT", "dependencies": { "consolidate": "^0.15.1", "hash-sum": "^1.0.2", @@ -4459,13 +4798,15 @@ }, "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true }, "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -4473,13 +4814,15 @@ }, "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/@vue/component-compiler-utils/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -4494,8 +4837,9 @@ }, "node_modules/@vue/component-compiler-utils/node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "license": "MIT", "optional": true, "bin": { "prettier": "bin-prettier.js" @@ -4509,17 +4853,20 @@ }, "node_modules/@vue/component-compiler-utils/node_modules/yallist": { "version": "2.1.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true }, "node_modules/@vue/devtools-api": { "version": "6.6.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", + "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" }, "node_modules/@vue/eslint-config-prettier": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", + "integrity": "sha512-wFQmv45c3ige5EA+ngijq40YpVcIkAy0Lihupnsnd1Dao5CBbPyfCzqtejFLZX1EwH/kCJdpz3t6s+5wd3+KxQ==", "dev": true, - "license": "MIT", "dependencies": { "eslint-config-prettier": "^6.0.0" }, @@ -4531,8 +4878,9 @@ }, "node_modules/@vue/eslint-config-typescript": { "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz", + "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.7.0", @@ -4553,67 +4901,65 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", + "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", "dependencies": { - "@vue/shared": "3.4.19" + "@vue/shared": "3.4.21" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", + "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", "dependencies": { - "@vue/reactivity": "3.4.19", - "@vue/shared": "3.4.19" + "@vue/reactivity": "3.4.21", + "@vue/shared": "3.4.21" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", + "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", "dependencies": { - "@vue/runtime-core": "3.4.19", - "@vue/shared": "3.4.19", + "@vue/runtime-core": "3.4.21", + "@vue/shared": "3.4.21", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", + "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", "dependencies": { - "@vue/compiler-ssr": "3.4.19", - "@vue/shared": "3.4.19" + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21" }, "peerDependencies": { - "vue": "3.4.19" + "vue": "3.4.21" } }, "node_modules/@vue/shared": { - "version": "3.4.19", - "license": "MIT" + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==" }, "node_modules/@vue/test-utils": { - "version": "2.4.4", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.5.tgz", + "integrity": "sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==", "dev": true, - "license": "MIT", "dependencies": { "js-beautify": "^1.14.9", - "vue-component-type-helpers": "^1.8.21" - }, - "peerDependencies": { - "@vue/server-renderer": "^3.0.1", - "vue": "^3.0.1" - }, - "peerDependenciesMeta": { - "@vue/server-renderer": { - "optional": true - } + "vue-component-type-helpers": "^2.0.0" } }, "node_modules/@vue/vue-loader-v15": { "name": "vue-loader", "version": "15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", "dev": true, - "license": "MIT", "dependencies": { "@vue/component-compiler-utils": "^3.1.0", "hash-sum": "^1.0.2", @@ -4639,18 +4985,21 @@ }, "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true }, "node_modules/@vue/web-component-wrapper": { "version": "1.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -4658,23 +5007,27 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "dev": true, - "license": "MIT" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -4683,62 +5036,69 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -4746,22 +5106,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -4770,44 +5132,53 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webgpu/types": { "version": "0.1.38", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.38.tgz", + "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==" }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, "node_modules/@yr/monotone-cubic-spline": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" }, "node_modules/abab": { "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true }, "node_modules/abbrev": { "version": "1.1.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/accepts": { "version": "1.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -4818,7 +5189,8 @@ }, "node_modules/acorn": { "version": "8.11.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -4828,8 +5200,9 @@ }, "node_modules/acorn-globals": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" @@ -4837,8 +5210,9 @@ }, "node_modules/acorn-globals/node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4848,53 +5222,60 @@ }, "node_modules/acorn-globals/node_modules/acorn-walk": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-import-assertions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "engines": { "node": ">=0.4.0" } }, "node_modules/address": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/adm-zip": { - "version": "0.5.10", - "license": "MIT", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz", + "integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==", "engines": { "node": ">=6.0" } }, "node_modules/agent-base": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dependencies": { "debug": "4" }, @@ -4904,7 +5285,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4915,8 +5297,9 @@ }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4930,8 +5313,9 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -4946,8 +5330,9 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -4961,27 +5346,31 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/ansi-colors": { "version": "4.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { "type-fest": "^0.21.3" }, @@ -4994,7 +5383,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { "node": ">=10" }, @@ -5004,25 +5394,28 @@ }, "node_modules/ansi-html-community": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" ], - "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -5035,11 +5428,13 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { "version": "3.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5049,8 +5444,9 @@ } }, "node_modules/apexcharts": { - "version": "3.45.2", - "license": "MIT", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.48.0.tgz", + "integrity": "sha512-Lhpj1Ij6lKlrUke8gf+P+SE6uGUn+Pe1TnCJ+zqrY0YMvbqM3LMb1lY+eybbTczUyk0RmMZomlTa2NgX2EUs4Q==", "dependencies": { "@yr/monotone-cubic-spline": "^1.0.3", "svg.draggable.js": "^2.2.2", @@ -5063,10 +5459,13 @@ }, "node_modules/aproba": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "node_modules/arch": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "funding": [ { "type": "github", @@ -5080,12 +5479,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/are-we-there-yet": { "version": "2.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -5094,27 +5493,44 @@ "node": ">=10" } }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "5.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-back": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -5128,17 +5544,20 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.7", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -5150,43 +5569,29 @@ }, "node_modules/array-keyed-map": { "version": "2.1.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/array-keyed-map/-/array-keyed-map-2.1.3.tgz", + "integrity": "sha512-JIUwuFakO+jHjxyp4YgSiKXSZeC0U+R1jR94bXWBcVlFRBycqXlb+kH9JHxBGcxnVuSqx5bnn0Qz9xtSeKOjiA==" }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -5198,8 +5603,9 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5215,8 +5621,9 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5232,8 +5639,9 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -5253,65 +5661,74 @@ }, "node_modules/asn1": { "version": "0.2.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/asn1.js": { - "version": "5.4.1", - "license": "MIT", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/assert-plus": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "engines": { "node": ">=0.8" } }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/astral-regex": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "3.2.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, "node_modules/asynckit": { "version": "0.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/atob": { "version": "2.1.2", - "license": "(MIT OR Apache-2.0)", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "bin": { "atob": "bin/atob.js" }, @@ -5320,7 +5737,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.17", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "funding": [ { "type": "opencollective", @@ -5335,10 +5754,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -5355,8 +5773,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "license": "MIT", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5365,8 +5787,10 @@ } }, "node_modules/aws-sdk": { - "version": "2.1559.0", - "license": "Apache-2.0", + "version": "2.1583.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1583.0.tgz", + "integrity": "sha512-gpJFO1kWC4qHPFMRgtjp15X48W8UrU1BvhYNUE7vv4O2YFHWbfulDp1hAdv6NN1sFkq/gvK2gdo5+qjj+4wdOQ==", + "hasInstallScript": true, "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -5385,41 +5809,41 @@ }, "node_modules/aws-sdk/node_modules/uuid": { "version": "8.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/aws-sign2": { "version": "0.7.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/babel-eslint": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.0", @@ -5437,16 +5861,18 @@ }, "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=4" } }, "node_modules/babel-loader": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dev": true, - "license": "MIT", "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -5463,8 +5889,9 @@ }, "node_modules/babel-loader/node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -5474,8 +5901,9 @@ }, "node_modules/babel-loader/node_modules/loader-utils": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -5487,19 +5915,21 @@ }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, - "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "peerDependencies": { @@ -5508,30 +5938,33 @@ }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -5539,10 +5972,13 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -5556,39 +5992,45 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/batch": { "version": "0.6.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/big.js": { "version": "5.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "engines": { "node": "*" } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "license": "MIT", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { "version": "4.1.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -5597,7 +6039,8 @@ }, "node_modules/bl/node_modules/buffer": { "version": "5.7.1", - "dev": true, + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -5612,30 +6055,46 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/blob-util": { "version": "2.0.2", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==" }, "node_modules/bluebird": { "version": "3.7.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/bn.js": { "version": "5.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { - "version": "1.20.1", - "license": "MIT", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -5643,7 +6102,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -5654,14 +6113,16 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -5671,11 +6132,13 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/body-parser/node_modules/qs": { "version": "6.11.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, @@ -5688,8 +6151,9 @@ }, "node_modules/bonjour-service": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -5697,19 +6161,22 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, "node_modules/brace-expansion": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { "fill-range": "^7.0.1" }, @@ -5719,21 +6186,25 @@ }, "node_modules/brorand": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-process-hrtime": { "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true }, "node_modules/browser-stdout": { "version": "1.3.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserify-aes": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -5745,7 +6216,8 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -5754,7 +6226,8 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -5764,32 +6237,37 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, "node_modules/browserify-sign": { - "version": "4.2.2", - "license": "ISC", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 4" + "node": ">= 0.12" } }, "node_modules/browserslist": { "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -5804,7 +6282,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", @@ -5820,7 +6297,8 @@ }, "node_modules/buffer": { "version": "4.9.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -5829,49 +6307,57 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "engines": { "node": "*" } }, "node_modules/buffer-from": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/buffer-xor": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/buffer/node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/builtins": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/bytes": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, "node_modules/cachedir": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", "engines": { "node": ">=6" } }, "node_modules/call-bind": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5888,16 +6374,18 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -5905,8 +6393,9 @@ }, "node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5916,15 +6405,17 @@ }, "node_modules/camelcase-css": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "engines": { "node": ">= 6" } }, "node_modules/caniuse-api": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -5933,7 +6424,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001587", + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", "funding": [ { "type": "opencollective", @@ -5947,25 +6440,27 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/caseless": { "version": "0.12.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/chai": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -5981,7 +6476,8 @@ }, "node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5995,8 +6491,9 @@ }, "node_modules/check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -6006,15 +6503,17 @@ }, "node_modules/check-more-types": { "version": "2.24.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "engines": { "node": ">= 0.8.0" } }, "node_modules/cheerio": { "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, - "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -6033,8 +6532,9 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -6049,8 +6549,9 @@ }, "node_modules/cheerio-select/node_modules/css-select": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -6064,8 +6565,9 @@ }, "node_modules/cheerio-select/node_modules/dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -6077,8 +6579,9 @@ }, "node_modules/cheerio-select/node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -6091,8 +6594,9 @@ }, "node_modules/cheerio-select/node_modules/domutils": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -6104,8 +6608,9 @@ }, "node_modules/cheerio/node_modules/dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -6117,8 +6622,9 @@ }, "node_modules/cheerio/node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -6131,8 +6637,9 @@ }, "node_modules/cheerio/node_modules/domutils": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -6144,6 +6651,8 @@ }, "node_modules/cheerio/node_modules/htmlparser2": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -6152,7 +6661,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -6162,8 +6670,9 @@ }, "node_modules/cheerio/node_modules/parse5": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, - "license": "MIT", "dependencies": { "entities": "^4.4.0" }, @@ -6173,8 +6682,9 @@ }, "node_modules/cheerio/node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dev": true, - "license": "MIT", "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -6185,7 +6695,8 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -6207,7 +6718,8 @@ }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -6217,35 +6729,39 @@ }, "node_modules/chownr": { "version": "2.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { "node": ">=10" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cipher-base": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -6253,8 +6769,9 @@ }, "node_modules/clean-css": { "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "~0.6.0" }, @@ -6264,14 +6781,16 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "engines": { "node": ">=6" } }, "node_modules/cli-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -6281,8 +6800,9 @@ }, "node_modules/cli-highlight": { "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, - "license": "ISC", "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", @@ -6301,8 +6821,9 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -6312,7 +6833,8 @@ }, "node_modules/cli-table3": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dependencies": { "string-width": "^4.2.0" }, @@ -6325,7 +6847,8 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -6339,8 +6862,9 @@ }, "node_modules/clipboardy": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "dev": true, - "license": "MIT", "dependencies": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -6352,7 +6876,8 @@ }, "node_modules/cliui": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -6361,16 +6886,18 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -6382,8 +6909,9 @@ }, "node_modules/clone-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, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -6393,14 +6921,16 @@ }, "node_modules/code-point-at": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "engines": { "node": ">=0.10.0" } }, "node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -6410,27 +6940,32 @@ }, "node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-support": { "version": "1.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "bin": { "color-support": "bin.js" } }, "node_modules/colord": { "version": "2.9.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true }, "node_modules/colorette": { "version": "2.0.20", - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/combined-stream": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -6440,8 +6975,9 @@ }, "node_modules/command-line-args": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -6454,8 +6990,9 @@ }, "node_modules/command-line-usage": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^4.0.2", "chalk": "^2.4.2", @@ -6468,8 +7005,9 @@ }, "node_modules/command-line-usage/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -6479,16 +7017,18 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/command-line-usage/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6500,37 +7040,42 @@ }, "node_modules/command-line-usage/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/command-line-usage/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/command-line-usage/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/command-line-usage/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/command-line-usage/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -6540,35 +7085,40 @@ }, "node_modules/command-line-usage/node_modules/typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/commander": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "engines": { "node": ">= 6" } }, "node_modules/common-tags": { "version": "1.8.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "engines": { "node": ">=4.0.0" } }, "node_modules/commondir": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true }, "node_modules/compressible": { "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -6578,8 +7128,9 @@ }, "node_modules/compression": { "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -6595,38 +7146,44 @@ }, "node_modules/compression/node_modules/bytes": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/compression/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, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/config-chain": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -6634,25 +7191,30 @@ }, "node_modules/config-chain/node_modules/ini": { "version": "1.3.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/console-control-strings": { "version": "1.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/consolidate": { "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", "dev": true, - "license": "MIT", "dependencies": { "bluebird": "^3.1.1" }, @@ -6662,7 +7224,8 @@ }, "node_modules/content-disposition": { "version": "0.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { "safe-buffer": "5.2.1" }, @@ -6672,31 +7235,36 @@ }, "node_modules/content-type": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "license": "MIT", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-webpack-plugin": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "^3.2.7", "glob-parent": "^6.0.1", @@ -6718,8 +7286,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -6734,20 +7303,22 @@ } }, "node_modules/core-js": { - "version": "3.36.0", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", + "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.36.0", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", "dev": true, - "license": "MIT", "dependencies": { - "browserslist": "^4.22.3" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -6755,12 +7326,14 @@ } }, "node_modules/core-util-is": { - "version": "1.0.2", - "license": "MIT" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cors": { "version": "2.8.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -6771,8 +7344,9 @@ }, "node_modules/cosmiconfig": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.1.0", @@ -6786,7 +7360,8 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -6794,11 +7369,13 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/create-hash": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -6809,7 +7386,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -6821,11 +7399,13 @@ }, "node_modules/create-require": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cross-spawn": { "version": "7.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6837,7 +7417,8 @@ }, "node_modules/crypto-browserify": { "version": "3.12.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -6857,7 +7438,8 @@ }, "node_modules/css": { "version": "2.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dependencies": { "inherits": "^2.0.3", "source-map": "^0.6.1", @@ -6867,8 +7449,9 @@ }, "node_modules/css-declaration-sorter": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >=14" }, @@ -6878,8 +7461,9 @@ }, "node_modules/css-loader": { "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -6912,8 +7496,9 @@ }, "node_modules/css-minimizer-webpack-plugin": { "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", "dev": true, - "license": "MIT", "dependencies": { "cssnano": "^5.0.6", "jest-worker": "^27.0.2", @@ -6949,8 +7534,9 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -6964,8 +7550,9 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -6975,13 +7562,15 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -6998,15 +7587,17 @@ }, "node_modules/css-parse": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha512-UNIFik2RgSbiTwIW1IsFwXWn6vs+bYdq83LKTSOsx7NJR7WII9dxewkHLltfTLVppoUApHV0118a4RZRI9FLwA==", "dependencies": { "css": "^2.0.0" } }, "node_modules/css-select": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -7020,8 +7611,9 @@ }, "node_modules/css-tree": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, - "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -7032,8 +7624,9 @@ }, "node_modules/css-what": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -7043,7 +7636,8 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "bin": { "cssesc": "bin/cssesc" }, @@ -7053,8 +7647,9 @@ }, "node_modules/cssnano": { "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dev": true, - "license": "MIT", "dependencies": { "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", @@ -7073,8 +7668,9 @@ }, "node_modules/cssnano-preset-default": { "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dev": true, - "license": "MIT", "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", @@ -7115,8 +7711,9 @@ }, "node_modules/cssnano-utils": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -7126,8 +7723,9 @@ }, "node_modules/csso": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, - "license": "MIT", "dependencies": { "css-tree": "^1.1.2" }, @@ -7137,13 +7735,15 @@ }, "node_modules/cssom": { "version": "0.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true }, "node_modules/cssstyle": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, - "license": "MIT", "dependencies": { "cssom": "~0.3.6" }, @@ -7153,17 +7753,20 @@ }, "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true }, "node_modules/csstype": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/cypress": { "version": "10.11.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz", + "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "@cypress/request": "^2.88.10", "@cypress/xvfb": "^1.2.4", @@ -7217,10 +7820,13 @@ }, "node_modules/cypress/node_modules/@types/node": { "version": "14.18.63", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" }, "node_modules/cypress/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -7235,7 +7841,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -7243,7 +7848,8 @@ }, "node_modules/cypress/node_modules/execa": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -7264,7 +7870,8 @@ }, "node_modules/cypress/node_modules/get-stream": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" }, @@ -7277,7 +7884,8 @@ }, "node_modules/cypress/node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -7287,7 +7895,8 @@ }, "node_modules/cypress/node_modules/npm-run-path": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" }, @@ -7295,9 +7904,15 @@ "node": ">=8" } }, + "node_modules/cypress/node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==" + }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { "has-flag": "^4.0.0" }, @@ -7309,8 +7924,9 @@ } }, "node_modules/d3": { - "version": "7.8.5", - "license": "ISC", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -7349,7 +7965,8 @@ }, "node_modules/d3-array": { "version": "3.2.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", "dependencies": { "internmap": "1 - 2" }, @@ -7359,14 +7976,16 @@ }, "node_modules/d3-axis": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", "engines": { "node": ">=12" } }, "node_modules/d3-brush": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -7380,7 +7999,8 @@ }, "node_modules/d3-chord": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", "dependencies": { "d3-path": "1 - 3" }, @@ -7390,14 +8010,16 @@ }, "node_modules/d3-color": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", "engines": { "node": ">=12" } }, "node_modules/d3-contour": { "version": "4.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dependencies": { "d3-array": "^3.2.0" }, @@ -7407,7 +8029,8 @@ }, "node_modules/d3-delaunay": { "version": "6.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", "dependencies": { "delaunator": "5" }, @@ -7417,14 +8040,16 @@ }, "node_modules/d3-dispatch": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", "engines": { "node": ">=12" } }, "node_modules/d3-drag": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -7435,7 +8060,8 @@ }, "node_modules/d3-dsv": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -7458,21 +8084,24 @@ }, "node_modules/d3-dsv/node_modules/commander": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { "node": ">= 10" } }, "node_modules/d3-ease": { "version": "3.0.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", "engines": { "node": ">=12" } }, "node_modules/d3-fetch": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "dependencies": { "d3-dsv": "1 - 3" }, @@ -7482,7 +8111,8 @@ }, "node_modules/d3-force": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -7494,14 +8124,16 @@ }, "node_modules/d3-format": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", "engines": { "node": ">=12" } }, "node_modules/d3-geo": { - "version": "3.1.0", - "license": "ISC", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -7511,14 +8143,16 @@ }, "node_modules/d3-hierarchy": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", "engines": { "node": ">=12" } }, "node_modules/d3-interpolate": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dependencies": { "d3-color": "1 - 3" }, @@ -7528,35 +8162,40 @@ }, "node_modules/d3-path": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", "engines": { "node": ">=12" } }, "node_modules/d3-polygon": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", "engines": { "node": ">=12" } }, "node_modules/d3-quadtree": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", "engines": { "node": ">=12" } }, "node_modules/d3-random": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", "engines": { "node": ">=12" } }, "node_modules/d3-scale": { "version": "4.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -7569,8 +8208,9 @@ } }, "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "license": "ISC", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -7581,14 +8221,16 @@ }, "node_modules/d3-selection": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "engines": { "node": ">=12" } }, "node_modules/d3-shape": { "version": "3.2.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", "dependencies": { "d3-path": "^3.1.0" }, @@ -7598,7 +8240,8 @@ }, "node_modules/d3-time": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", "dependencies": { "d3-array": "2 - 3" }, @@ -7608,7 +8251,8 @@ }, "node_modules/d3-time-format": { "version": "4.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", "dependencies": { "d3-time": "1 - 3" }, @@ -7618,14 +8262,16 @@ }, "node_modules/d3-timer": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", "engines": { "node": ">=12" } }, "node_modules/d3-transition": { "version": "3.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -7642,7 +8288,8 @@ }, "node_modules/d3-zoom": { "version": "3.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -7656,7 +8303,8 @@ }, "node_modules/dashdash": { "version": "1.14.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dependencies": { "assert-plus": "^1.0.0" }, @@ -7666,8 +8314,9 @@ }, "node_modules/data-urls": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, - "license": "MIT", "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", @@ -7679,16 +8328,18 @@ }, "node_modules/data-urls/node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/data-urls/node_modules/whatwg-url": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -7697,18 +8348,72 @@ "node": ">=12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dayjs": { "version": "1.11.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" }, "node_modules/debounce": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -7723,8 +8428,9 @@ }, "node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7734,20 +8440,38 @@ }, "node_modules/decimal.js": { "version": "10.4.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true }, "node_modules/decode-uri-component": { "version": "0.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "peer": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-eql": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -7757,29 +8481,32 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/default-gateway": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" }, @@ -7789,8 +8516,9 @@ }, "node_modules/default-gateway/node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7811,8 +8539,9 @@ }, "node_modules/default-gateway/node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7822,16 +8551,18 @@ }, "node_modules/default-gateway/node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/default-gateway/node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7841,8 +8572,9 @@ }, "node_modules/default-gateway/node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -7852,8 +8584,9 @@ }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -7863,7 +8596,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -7878,15 +8612,17 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -7901,32 +8637,37 @@ }, "node_modules/delaunator": { "version": "5.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", "dependencies": { "robust-predicates": "^3.0.2" } }, "node_modules/delayed-stream": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } }, "node_modules/delegates": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/depd": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { "node": ">= 0.8" } }, "node_modules/des.js": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -7934,39 +8675,45 @@ }, "node_modules/destroy": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/detect-libc": { - "version": "2.0.2", - "license": "Apache-2.0", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } }, "node_modules/detect-node": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true }, "node_modules/didyoumean": { "version": "1.2.2", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -7975,12 +8722,14 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -7990,12 +8739,14 @@ }, "node_modules/dlv": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/dns-packet": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, - "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -8005,8 +8756,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8016,16 +8768,18 @@ }, "node_modules/dom-converter": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, - "license": "MIT", "dependencies": { "utila": "~0.4" } }, "node_modules/dom-serializer": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -8037,26 +8791,30 @@ }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domexception": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "deprecated": "Use your platform's native DOMException instead", "optional": true, "dependencies": { "webidl-conversions": "^4.0.2" @@ -8064,8 +8822,9 @@ }, "node_modules/domhandler": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -8078,8 +8837,9 @@ }, "node_modules/domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -8091,8 +8851,9 @@ }, "node_modules/dot-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -8100,37 +8861,43 @@ }, "node_modules/dotenv": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=10" } }, "node_modules/dotenv-expand": { "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true }, "node_modules/duplexer": { "version": "0.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true }, "node_modules/eastasianwidth": { "version": "0.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/easy-stack": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/ecc-jsbn": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -8138,8 +8905,9 @@ }, "node_modules/editorconfig": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", "dev": true, - "license": "MIT", "dependencies": { "@one-ini/wasm": "0.1.1", "commander": "^10.0.0", @@ -8155,16 +8923,18 @@ }, "node_modules/editorconfig/node_modules/commander": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/editorconfig/node_modules/minimatch": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8177,15 +8947,18 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.672", - "license": "ISC" + "version": "1.4.715", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", + "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" }, "node_modules/elliptic": { - "version": "6.5.4", - "license": "MIT", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -8198,37 +8971,43 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emojis-list": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -8239,15 +9018,17 @@ }, "node_modules/enhanced-resolve/node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/enquirer": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -8258,7 +9039,8 @@ }, "node_modules/entities": { "version": "4.5.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, @@ -8268,12 +9050,14 @@ }, "node_modules/err-code": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" }, "node_modules/errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "license": "MIT", "dependencies": { "prr": "~1.0.1" }, @@ -8283,31 +9067,38 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/error-stack-parser": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, - "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/es-abstract": { - "version": "1.22.4", + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -8315,15 +9106,16 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -8331,17 +9123,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -8350,14 +9142,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/es-define-property": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -8367,24 +9155,39 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.4.1", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.2.tgz", + "integrity": "sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, - "license": "MIT" + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -8392,16 +9195,18 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -8416,30 +9221,35 @@ }, "node_modules/es6-promise": { "version": "4.2.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" }, "node_modules/es6-promisify": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "dependencies": { "es6-promise": "^4.0.3" } }, "node_modules/escalade": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8449,8 +9259,9 @@ }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -8468,15 +9279,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -8523,8 +9335,9 @@ }, "node_modules/eslint-config-prettier": { "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, - "license": "MIT", "dependencies": { "get-stdin": "^6.0.0" }, @@ -8537,6 +9350,8 @@ }, "node_modules/eslint-config-standard": { "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, "funding": [ { @@ -8552,7 +9367,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "engines": { "node": ">=12.0.0" }, @@ -8565,8 +9379,10 @@ }, "node_modules/eslint-config-standard-with-typescript": { "version": "43.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-43.0.1.tgz", + "integrity": "sha512-WfZ986+qzIzX6dcr4yGUyVb/l9N3Z8wPXCc5z/70fljs3UbWhhV+WxrfgsqMToRzuuyX9MqZ974pq2UPhDTOcA==", + "deprecated": "Please use eslint-config-love, instead.", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/parser": "^6.4.0", "eslint-config-standard": "17.1.0" @@ -8582,8 +9398,9 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -8592,16 +9409,18 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -8616,16 +9435,18 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-es": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", "dev": true, - "license": "MIT", "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" @@ -8642,8 +9463,9 @@ }, "node_modules/eslint-plugin-es/node_modules/eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -8656,16 +9478,18 @@ }, "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=4" } }, "node_modules/eslint-plugin-import": { "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -8694,8 +9518,9 @@ }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8703,16 +9528,18 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8722,8 +9549,9 @@ }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8733,16 +9561,18 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-n": { "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", "dev": true, - "license": "MIT", "dependencies": { "builtins": "^5.0.1", "eslint-plugin-es": "^4.1.0", @@ -8765,8 +9595,9 @@ }, "node_modules/eslint-plugin-n/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8774,8 +9605,9 @@ }, "node_modules/eslint-plugin-n/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8785,8 +9617,9 @@ }, "node_modules/eslint-plugin-node": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "license": "MIT", "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", @@ -8804,8 +9637,9 @@ }, "node_modules/eslint-plugin-node/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8813,8 +9647,9 @@ }, "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "license": "MIT", "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" @@ -8831,8 +9666,9 @@ }, "node_modules/eslint-plugin-node/node_modules/eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -8845,16 +9681,18 @@ }, "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=4" } }, "node_modules/eslint-plugin-node/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8864,16 +9702,18 @@ }, "node_modules/eslint-plugin-node/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-prettier": { "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, - "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0" }, @@ -8892,8 +9732,9 @@ }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, - "license": "ISC", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -8902,15 +9743,16 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.21.1", + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.23.0.tgz", + "integrity": "sha512-Bqd/b7hGYGrlV+wP/g77tjyFmp81lh5TMw0be9093X02SyelxRRfCI6/IsGq/J7Um0YwB9s0Ry0wlFyjPdmtUw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", "vue-eslint-parser": "^9.4.2", "xml-name-validator": "^4.0.0" }, @@ -8923,8 +9765,9 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -8938,8 +9781,9 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -8955,16 +9799,18 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -8974,8 +9820,9 @@ }, "node_modules/eslint-webpack-plugin": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint": "^7.29.0 || ^8.4.1", "jest-worker": "^28.0.2", @@ -8997,8 +9844,9 @@ }, "node_modules/eslint-webpack-plugin/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -9012,8 +9860,9 @@ }, "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -9023,8 +9872,9 @@ }, "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -9036,13 +9886,15 @@ }, "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -9059,8 +9911,9 @@ }, "node_modules/eslint-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9073,8 +9926,9 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9082,8 +9936,9 @@ }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9093,8 +9948,9 @@ }, "node_modules/espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -9109,8 +9965,9 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -9121,8 +9978,9 @@ }, "node_modules/esquery": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -9132,8 +9990,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -9143,62 +10002,72 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/event-lite": { "version": "0.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/event-lite/-/event-lite-0.1.3.tgz", + "integrity": "sha512-8qz9nOz5VeD2z96elrEKD2U433+L3DWdUdDkOINLGOJvx1GsMBbMn0aCeu28y8/e85A6mCigBiFlYMnTBEGlSw==" }, "node_modules/event-pubsub": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", "dev": true, - "license": "Unlicense", "engines": { "node": ">=4.0.0" } }, "node_modules/eventemitter2": { "version": "6.4.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" }, "node_modules/eventemitter3": { "version": "4.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, "node_modules/events": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "engines": { "node": ">=0.4.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -9206,8 +10075,9 @@ }, "node_modules/execa": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -9223,8 +10093,9 @@ }, "node_modules/execa/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==", "dev": true, - "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -9238,24 +10109,27 @@ }, "node_modules/execa/node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/execa/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/execa/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -9265,16 +10139,18 @@ }, "node_modules/execa/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/execa/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -9284,7 +10160,8 @@ }, "node_modules/executable": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dependencies": { "pify": "^2.2.0" }, @@ -9292,16 +10169,26 @@ "node": ">=4" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/express": { - "version": "4.18.2", - "license": "MIT", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.1.tgz", + "integrity": "sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -9334,7 +10221,8 @@ }, "node_modules/express-ws": { "version": "5.0.2", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-5.0.2.tgz", + "integrity": "sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ==", "dependencies": { "ws": "^7.4.6" }, @@ -9347,7 +10235,8 @@ }, "node_modules/express-ws/node_modules/ws": { "version": "7.5.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, @@ -9366,18 +10255,21 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/qs": { "version": "6.11.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, @@ -9390,11 +10282,13 @@ }, "node_modules/extend": { "version": "3.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extract-zip": { "version": "2.0.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -9412,7 +10306,8 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" }, @@ -9425,24 +10320,28 @@ }, "node_modules/extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" - ], - "license": "MIT" + ] }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-diff": { "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9456,7 +10355,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -9466,25 +10366,29 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { "version": "1.17.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -9494,14 +10398,16 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dependencies": { "pend": "~1.2.0" } }, "node_modules/figures": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -9514,15 +10420,17 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -9532,7 +10440,8 @@ }, "node_modules/fill-range": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -9542,7 +10451,8 @@ }, "node_modules/finalhandler": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -9558,19 +10468,22 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-cache-dir": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, - "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -9585,8 +10498,9 @@ }, "node_modules/find-replace": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -9596,8 +10510,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -9611,16 +10526,18 @@ }, "node_modules/flat": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -9631,19 +10548,21 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "dev": true, - "license": "ISC" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -9655,14 +10574,16 @@ }, "node_modules/for-each": { "version": "0.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "3.1.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -9676,7 +10597,8 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { "node": ">=14" }, @@ -9686,15 +10608,17 @@ }, "node_modules/forever-agent": { "version": "0.6.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "engines": { "node": "*" } }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.8.3", "@types/json-schema": "^7.0.5", @@ -9731,8 +10655,9 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9740,8 +10665,9 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9751,8 +10677,9 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.4", "ajv": "^6.12.2", @@ -9768,7 +10695,8 @@ }, "node_modules/form-data": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -9780,14 +10708,16 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" } }, "node_modules/fraction.js": { "version": "4.3.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "engines": { "node": "*" }, @@ -9798,14 +10728,22 @@ }, "node_modules/fresh": { "version": "0.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "peer": true + }, "node_modules/fs-extra": { "version": "9.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -9818,7 +10756,8 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { "minipass": "^3.0.0" }, @@ -9828,24 +10767,41 @@ }, "node_modules/fs-monkey": { "version": "1.0.5", - "dev": true, - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, "node_modules/function-bind": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -9861,15 +10817,17 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gauge": { "version": "3.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -9887,34 +10845,39 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-browser-rtc": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", + "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==" }, "node_modules/get-caller-file": { "version": "2.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -9931,16 +10894,18 @@ }, "node_modules/get-stdin": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -9950,8 +10915,9 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -9966,21 +10932,30 @@ }, "node_modules/getos": { "version": "3.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", "dependencies": { "async": "^3.2.0" } }, "node_modules/getpass": { "version": "0.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dependencies": { "assert-plus": "^1.0.0" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "peer": true + }, "node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9998,7 +10973,8 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dependencies": { "is-glob": "^4.0.3" }, @@ -10008,12 +10984,14 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10021,7 +10999,8 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10031,7 +11010,8 @@ }, "node_modules/global-dirs": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dependencies": { "ini": "2.0.0" }, @@ -10044,8 +11024,9 @@ }, "node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -10058,8 +11039,9 @@ }, "node_modules/globalthis": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -10072,8 +11054,9 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -10091,11 +11074,13 @@ }, "node_modules/google-protobuf": { "version": "3.21.2", - "license": "(BSD-3-Clause AND Apache-2.0)" + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", + "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==" }, "node_modules/gopd": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -10105,7 +11090,8 @@ }, "node_modules/gpt3-tokenizer": { "version": "1.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gpt3-tokenizer/-/gpt3-tokenizer-1.1.5.tgz", + "integrity": "sha512-O9iCL8MqGR0Oe9wTh0YftzIbysypNQmS5a5JG3cB3M4LMYjlAVvNnf8LUzVY9MrI7tj+YLY356uHtO2lLX2HpA==", "dependencies": { "array-keyed-map": "^2.1.3" }, @@ -10115,25 +11101,29 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphemer": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/growl": { "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.x" } }, "node_modules/gzip-size": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, - "license": "MIT", "dependencies": { "duplexer": "^0.1.2" }, @@ -10146,27 +11136,31 @@ }, "node_modules/handle-thing": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true }, "node_modules/has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { "es-define-property": "^1.0.0" }, @@ -10175,8 +11169,9 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", - "license": "MIT", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -10186,7 +11181,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -10196,7 +11192,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { "has-symbols": "^1.0.3" }, @@ -10209,15 +11206,16 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/hash-base": { - "version": "3.1.0", - "license": "MIT", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "engines": { "node": ">=4" @@ -10225,20 +11223,23 @@ }, "node_modules/hash-sum": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true }, "node_modules/hash.js": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "node_modules/hasown": { - "version": "2.0.1", - "license": "MIT", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -10248,23 +11249,26 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/highlight.js": { "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/hmac-drbg": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -10273,12 +11277,14 @@ }, "node_modules/hosted-git-info": { "version": "2.8.9", - "license": "ISC" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "node_modules/hpack.js": { "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -10286,42 +11292,11 @@ "wbuf": "^1.1.0" } }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" }, @@ -10330,7 +11305,9 @@ } }, "node_modules/html-entities": { - "version": "2.4.0", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, "funding": [ { @@ -10341,18 +11318,19 @@ "type": "patreon", "url": "https://patreon.com/mdevils" } - ], - "license": "MIT" + ] }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/html-minifier-terser": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, - "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -10371,16 +11349,18 @@ }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/html-tags": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -10390,8 +11370,9 @@ }, "node_modules/html-webpack-plugin": { "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", "dev": true, - "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -10421,14 +11402,17 @@ }, "node_modules/html-webpack-plugin/node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/htmlparser2": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -10437,7 +11421,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -10447,20 +11430,23 @@ }, "node_modules/htmlparser2/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/http-deceiver": { "version": "1.2.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true }, "node_modules/http-errors": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -10474,13 +11460,15 @@ }, "node_modules/http-parser-js": { "version": "0.5.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true }, "node_modules/http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -10492,8 +11480,9 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -10505,8 +11494,9 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -10528,7 +11518,8 @@ }, "node_modules/http-signature": { "version": "1.3.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -10540,7 +11531,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dependencies": { "agent-base": "6", "debug": "4" @@ -10551,14 +11543,16 @@ }, "node_modules/human-signals": { "version": "1.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "engines": { "node": ">=8.12.0" } }, "node_modules/iconv-lite": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -10568,8 +11562,9 @@ }, "node_modules/icss-utils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -10579,29 +11574,34 @@ }, "node_modules/ieee754": { "version": "1.1.13", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "node_modules/ignore": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/ignore-by-default": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true }, "node_modules/immutable": { "version": "4.3.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -10615,22 +11615,25 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -10638,23 +11641,27 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "2.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "engines": { "node": ">=10" } }, "node_modules/int64-buffer": { "version": "0.1.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz", + "integrity": "sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA==" }, "node_modules/internal-slot": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -10666,36 +11673,41 @@ }, "node_modules/internmap": { "version": "2.0.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", "engines": { "node": ">=12" } }, "node_modules/interpret": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/invert-kv": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/ipaddr.js": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { "node": ">= 0.10" } }, "node_modules/is-arguments": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -10709,8 +11721,9 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -10724,12 +11737,14 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -10739,7 +11754,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -10749,8 +11765,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -10764,7 +11781,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -10774,7 +11792,8 @@ }, "node_modules/is-ci": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dependencies": { "ci-info": "^3.2.0" }, @@ -10784,7 +11803,8 @@ }, "node_modules/is-core-module": { "version": "2.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { "hasown": "^2.0.0" }, @@ -10792,10 +11812,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10808,8 +11844,9 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -10822,29 +11859,33 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-file-esm": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", "dev": true, - "license": "MIT", "dependencies": { "read-pkg-up": "^7.0.1" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10857,7 +11898,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -10867,7 +11909,8 @@ }, "node_modules/is-installed-globally": { "version": "0.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -10881,16 +11924,18 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10900,15 +11945,17 @@ }, "node_modules/is-number": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10921,15 +11968,17 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -10939,21 +11988,24 @@ }, "node_modules/is-plain-object": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -10966,11 +12018,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10978,16 +12034,18 @@ }, "node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -11000,8 +12058,9 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -11014,7 +12073,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -11027,11 +12087,13 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" }, @@ -11041,12 +12103,14 @@ }, "node_modules/is-utf8": { "version": "0.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -11056,8 +12120,9 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -11067,17 +12132,20 @@ }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11088,18 +12156,21 @@ }, "node_modules/isomorphic-ws": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", "peerDependencies": { "ws": "*" } }, "node_modules/isstream": { "version": "0.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/jackspeak": { "version": "2.3.6", - "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -11115,13 +12186,15 @@ }, "node_modules/javascript-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true }, "node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11133,8 +12206,9 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11147,22 +12221,25 @@ }, "node_modules/jiti": { "version": "1.21.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/jmespath": { "version": "0.16.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "engines": { "node": ">= 0.6.0" } }, "node_modules/joi": { - "version": "17.12.1", + "version": "17.12.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.2.tgz", + "integrity": "sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -11172,9 +12249,10 @@ } }, "node_modules/js-beautify": { - "version": "1.15.0", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", "dev": true, - "license": "MIT", "dependencies": { "config-chain": "^1.1.13", "editorconfig": "^1.0.4", @@ -11193,16 +12271,18 @@ }, "node_modules/js-beautify/node_modules/abbrev": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/js-beautify/node_modules/glob": { "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -11222,16 +12302,18 @@ }, "node_modules/js-beautify/node_modules/minipass": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/js-beautify/node_modules/nopt": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dev": true, - "license": "ISC", "dependencies": { "abbrev": "^2.0.0" }, @@ -11244,29 +12326,33 @@ }, "node_modules/js-cookie": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/js-message": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.0" } }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -11276,12 +12362,14 @@ }, "node_modules/jsbn": { "version": "0.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "node_modules/jsdom": { "version": "18.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-18.1.1.tgz", + "integrity": "sha512-NmJQbjQ/gpS/1at/ce3nCx89HbXL/f5OcenBe8wU1Eik0ROhyUc3LtmG3567dEHAGXkN8rmILW/qtCOPxPHQJw==", "dev": true, - "license": "MIT", "dependencies": { "abab": "^2.0.5", "acorn": "^8.5.0", @@ -11325,16 +12413,19 @@ }, "node_modules/jsdom-global": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", + "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==", "dev": true, - "license": "MIT", "peerDependencies": { "jsdom": ">=10.0.0" } }, "node_modules/jsdom/node_modules/domexception": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, - "license": "MIT", "dependencies": { "webidl-conversions": "^7.0.0" }, @@ -11344,21 +12435,24 @@ }, "node_modules/jsdom/node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/jsdom/node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -11368,6 +12462,8 @@ }, "node_modules/jshashes": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/jshashes/-/jshashes-1.0.8.tgz", + "integrity": "sha512-btmQZ/w1rj8Lb6nEwvhjM7nBYoj54yaEFo2PWh3RkxZ8qNwuvOxvQYN/JxVuwoMmdIluL+XwYVJ+pEEZoSYybQ==", "bin": { "hashes": "bin/hashes" }, @@ -11377,40 +12473,48 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema": { "version": "0.4.0", - "license": "(AFL-2.1 OR BSD-3-Clause)" + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/json5": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dependencies": { "minimist": "^1.2.0" }, @@ -11420,12 +12524,14 @@ }, "node_modules/jsonc-parser": { "version": "3.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true }, "node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -11435,10 +12541,11 @@ }, "node_modules/jsprim": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -11448,32 +12555,36 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/klona": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/launch-editor": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" @@ -11481,22 +12592,25 @@ }, "node_modules/launch-editor-middleware": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz", + "integrity": "sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==", "dev": true, - "license": "MIT", "dependencies": { "launch-editor": "^2.6.1" } }, "node_modules/lazy-ass": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "engines": { "node": "> 0.8" } }, "node_modules/lcid": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dependencies": { "invert-kv": "^1.0.0" }, @@ -11506,8 +12620,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -11518,18 +12633,21 @@ }, "node_modules/lilconfig": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "engines": { "node": ">=10" } }, "node_modules/lines-and-columns": { "version": "1.2.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/listr2": { "version": "3.14.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -11554,7 +12672,8 @@ }, "node_modules/load-json-file": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -11568,7 +12687,8 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dependencies": { "error-ex": "^1.2.0" }, @@ -11578,7 +12698,8 @@ }, "node_modules/load-json-file/node_modules/strip-bom": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dependencies": { "is-utf8": "^0.2.0" }, @@ -11588,15 +12709,17 @@ }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "1.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -11608,8 +12731,9 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -11622,63 +12746,76 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true }, "node_modules/lodash.defaultsdeep": { "version": "4.6.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true }, "node_modules/lodash.kebabcase": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true }, "node_modules/lodash.mapvalues": { "version": "4.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.once": { "version": "4.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -11692,7 +12829,8 @@ }, "node_modules/log-update": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -11708,7 +12846,8 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -11723,7 +12862,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11735,27 +12875,31 @@ }, "node_modules/long": { "version": "4.0.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "node_modules/loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lower-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/lru-cache": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { "yallist": "^4.0.0" }, @@ -11765,12 +12909,14 @@ }, "node_modules/lunr": { "version": "2.3.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true }, "node_modules/magic-string": { - "version": "0.30.7", - "license": "MIT", + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -11780,7 +12926,8 @@ }, "node_modules/make-dir": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dependencies": { "semver": "^6.0.0" }, @@ -11793,19 +12940,22 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/make-error": { "version": "1.3.6", - "license": "ISC" + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/marked": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, - "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -11815,7 +12965,8 @@ }, "node_modules/md5.js": { "version": "1.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -11824,20 +12975,23 @@ }, "node_modules/mdn-data": { "version": "2.0.14", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/memfs": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, - "license": "Unlicense", "dependencies": { "fs-monkey": "^1.0.4" }, @@ -11847,78 +13001,53 @@ }, "node_modules/memory-fs": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", "dev": true, - "license": "MIT", "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" } }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/merge-descriptors": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/merge-source-map": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "^0.6.1" } }, "node_modules/merge-stream": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -11929,7 +13058,8 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -11940,11 +13070,13 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/mime": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, @@ -11954,14 +13086,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -11971,15 +13105,29 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mini-css-extract-plugin": { - "version": "2.8.0", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", "dev": true, - "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -11997,8 +13145,9 @@ }, "node_modules/mini-css-extract-plugin/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -12012,8 +13161,9 @@ }, "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -12023,13 +13173,15 @@ }, "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -12046,23 +13198,27 @@ }, "node_modules/mini-css-extract-plugin/node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { "version": "9.0.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12075,14 +13231,16 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "3.3.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { "yallist": "^4.0.0" }, @@ -12092,7 +13250,8 @@ }, "node_modules/minizlib": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -12103,7 +13262,8 @@ }, "node_modules/mkdirp": { "version": "0.5.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { "minimist": "^1.2.6" }, @@ -12111,10 +13271,17 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "peer": true + }, "node_modules/mocha": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, - "license": "MIT", "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -12155,16 +13322,18 @@ }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mocha/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12172,6 +13341,8 @@ }, "node_modules/mocha/node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -12179,7 +13350,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -12198,8 +13368,9 @@ }, "node_modules/mocha/node_modules/debug": { "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -12214,13 +13385,15 @@ }, "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12238,8 +13411,9 @@ }, "node_modules/mocha/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -12249,8 +13423,9 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12260,8 +13435,9 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12271,21 +13447,24 @@ }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/mocha/node_modules/serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12298,8 +13477,9 @@ }, "node_modules/mochapack": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mochapack/-/mochapack-2.1.4.tgz", + "integrity": "sha512-qoZYT8ibht6z35e936P6Y/3nynFX843Jm+2l/pNWB3Sue63IHBfqZeAnF6Ypez85kUll7HtapMogfO2hGb2N2Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime-corejs2": "^7.0.0", "chalk": "^2.4.2", @@ -12329,16 +13509,18 @@ }, "node_modules/mochapack/node_modules/ansi-regex": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mochapack/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -12348,8 +13530,9 @@ }, "node_modules/mochapack/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12357,16 +13540,18 @@ }, "node_modules/mochapack/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mochapack/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -12378,8 +13563,9 @@ }, "node_modules/mochapack/node_modules/cliui": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -12388,42 +13574,48 @@ }, "node_modules/mochapack/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/mochapack/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/mochapack/node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/mochapack/node_modules/emoji-regex": { "version": "7.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "node_modules/mochapack/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/mochapack/node_modules/find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -12433,8 +13625,9 @@ }, "node_modules/mochapack/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -12444,8 +13637,9 @@ }, "node_modules/mochapack/node_modules/globby": { "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, - "license": "MIT", "dependencies": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -12462,24 +13656,27 @@ }, "node_modules/mochapack/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mochapack/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mochapack/node_modules/locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -12490,8 +13687,9 @@ }, "node_modules/mochapack/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12501,8 +13699,9 @@ }, "node_modules/mochapack/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -12515,8 +13714,9 @@ }, "node_modules/mochapack/node_modules/p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -12526,16 +13726,18 @@ }, "node_modules/mochapack/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mochapack/node_modules/string-width": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -12547,8 +13749,9 @@ }, "node_modules/mochapack/node_modules/strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -12558,8 +13761,9 @@ }, "node_modules/mochapack/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -12569,8 +13773,9 @@ }, "node_modules/mochapack/node_modules/wrap-ansi": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -12582,13 +13787,15 @@ }, "node_modules/mochapack/node_modules/y18n": { "version": "4.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/mochapack/node_modules/yargs": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.0.0.tgz", + "integrity": "sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^5.0.0", "decamelize": "^1.2.0", @@ -12605,8 +13812,9 @@ }, "node_modules/mochapack/node_modules/yargs-parser": { "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -12614,6 +13822,8 @@ }, "node_modules/mock-aws-s3": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/mock-aws-s3/-/mock-aws-s3-4.0.2.tgz", + "integrity": "sha512-J6g3MMCuKHeuqVEOgvQfRGIfVmg6KKrED48Bux/L9rTY3NPK9TFRh/9bCf5AuzjJm9PIlwhDEO99tD8+smnTyQ==", "dependencies": { "bluebird": "^3.5.1", "fs-extra": "^7.0.1", @@ -12625,7 +13835,8 @@ }, "node_modules/mock-aws-s3/node_modules/fs-extra": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -12637,38 +13848,44 @@ }, "node_modules/mock-aws-s3/node_modules/jsonfile": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/mock-aws-s3/node_modules/universalify": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/module-alias": { "version": "2.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true }, "node_modules/mrmime": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/msgpack-lite": { "version": "0.1.26", - "license": "MIT", + "resolved": "https://registry.npmjs.org/msgpack-lite/-/msgpack-lite-0.1.26.tgz", + "integrity": "sha512-SZ2IxeqZ1oRFGo0xFGbvBJWMp3yLIY9rlIJyxy8CGrwZn1f0ZK4r6jV/AM1r0FZMDUkWkglOk/eeKIL9g77Nxw==", "dependencies": { "event-lite": "^0.1.1", "ieee754": "^1.1.8", @@ -12681,12 +13898,14 @@ }, "node_modules/msgpack-lite/node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/multicast-dns": { "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, - "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -12697,7 +13916,8 @@ }, "node_modules/mz": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -12705,17 +13925,20 @@ } }, "node_modules/nan": { - "version": "2.18.0", - "license": "MIT" + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==" }, "node_modules/nanoclone": { "version": "0.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" }, "node_modules/nanoid": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12723,40 +13946,52 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "peer": true + }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node_modules/nice-try": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/no-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "node_modules/nock": { - "version": "13.5.1", - "license": "MIT", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", + "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", "dependencies": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", @@ -12766,13 +14001,27 @@ "node": ">= 10.13" } }, + "node_modules/node-abi": { + "version": "3.56.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", + "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==", + "peer": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-addon-api": { "version": "1.7.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" }, "node_modules/node-cmake": { "version": "2.3.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/node-cmake/-/node-cmake-2.3.2.tgz", + "integrity": "sha512-t3m0q/tB8b7eg1yAUZCx/UdC8bTPf9gNzQPWl+62fsLYE2pEeoU71auIYtgGos0G36jopbo+FCLini4NMzpFhg==", "dependencies": { "nan": "*", "which": "^1.2.14", @@ -12784,21 +14033,24 @@ }, "node_modules/node-cmake/node_modules/ansi-regex": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "engines": { "node": ">=0.10.0" } }, "node_modules/node-cmake/node_modules/camelcase": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", "engines": { "node": ">=0.10.0" } }, "node_modules/node-cmake/node_modules/cliui": { "version": "3.2.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -12807,14 +14059,16 @@ }, "node_modules/node-cmake/node_modules/decamelize": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "engines": { "node": ">=0.10.0" } }, "node_modules/node-cmake/node_modules/find-up": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -12825,11 +14079,13 @@ }, "node_modules/node-cmake/node_modules/get-caller-file": { "version": "1.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "node_modules/node-cmake/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -12839,7 +14095,8 @@ }, "node_modules/node-cmake/node_modules/path-exists": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dependencies": { "pinkie-promise": "^2.0.0" }, @@ -12849,7 +14106,8 @@ }, "node_modules/node-cmake/node_modules/path-type": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -12861,7 +14119,8 @@ }, "node_modules/node-cmake/node_modules/read-pkg": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -12873,7 +14132,8 @@ }, "node_modules/node-cmake/node_modules/read-pkg-up": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -12884,11 +14144,13 @@ }, "node_modules/node-cmake/node_modules/require-main-filename": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" }, "node_modules/node-cmake/node_modules/string-width": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -12900,7 +14162,8 @@ }, "node_modules/node-cmake/node_modules/strip-ansi": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -12910,7 +14173,8 @@ }, "node_modules/node-cmake/node_modules/which": { "version": "1.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { "isexe": "^2.0.0" }, @@ -12920,11 +14184,13 @@ }, "node_modules/node-cmake/node_modules/which-module": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" }, "node_modules/node-cmake/node_modules/wrap-ansi": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -12935,11 +14201,13 @@ }, "node_modules/node-cmake/node_modules/y18n": { "version": "3.2.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" }, "node_modules/node-cmake/node_modules/yargs": { "version": "7.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dependencies": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -12958,15 +14226,50 @@ }, "node_modules/node-cmake/node_modules/yargs-parser": { "version": "5.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dependencies": { "camelcase": "^3.0.0", "object.assign": "^4.1.0" } }, + "node_modules/node-datachannel": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/node-datachannel/-/node-datachannel-0.5.5.tgz", + "integrity": "sha512-B0MS/iK0qjCiNY5Go4055zuRCOuiFkOrhNOZuj2PAnaJN7YlnKxKidOLhLXf/lAcsJQXgj8BR31zsqJKKA16jA==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "node-domexception": "^2.0.1", + "prebuild-install": "^7.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/node-domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-2.0.1.tgz", + "integrity": "sha512-M85rnSC7WQ7wnfQTARPT4LrK7nwCHLdDFOCcItZMhTQjyCebJH8GciKqYJNgaOFZs9nFmTmd/VMyi3OW5jA47w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "peer": true, + "engines": { + "node": ">=16" + } + }, "node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -12984,15 +14287,18 @@ }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -13000,20 +14306,23 @@ }, "node_modules/node-forge": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-releases": { "version": "2.0.14", - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/nodemon": { - "version": "3.0.3", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", "dev": true, - "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", @@ -13039,8 +14348,9 @@ }, "node_modules/nodemon/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13048,16 +14358,18 @@ }, "node_modules/nodemon/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/nodemon/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13067,8 +14379,9 @@ }, "node_modules/nodemon/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -13078,13 +14391,15 @@ }, "node_modules/nodent-runtime": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.2.1.tgz", + "integrity": "sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==", "dev": true, - "hasInstallScript": true, - "license": "MIT" + "hasInstallScript": true }, "node_modules/nopt": { "version": "5.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { "abbrev": "1" }, @@ -13097,7 +14412,8 @@ }, "node_modules/normalize-package-data": { "version": "2.5.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -13107,29 +14423,33 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/normalize-path": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13139,8 +14459,9 @@ }, "node_modules/npm-run-path": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -13150,15 +14471,17 @@ }, "node_modules/npm-run-path/node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/npmlog": { "version": "5.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -13168,8 +14491,9 @@ }, "node_modules/nth-check": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -13179,47 +14503,54 @@ }, "node_modules/number-is-nan": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/nwsapi": { "version": "2.2.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-hash": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "engines": { "node": ">= 6" } }, "node_modules/object-inspect": { "version": "1.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -13234,13 +14565,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13250,25 +14583,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13279,12 +14615,14 @@ }, "node_modules/obuf": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true }, "node_modules/on-finished": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -13294,22 +14632,25 @@ }, "node_modules/on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -13322,8 +14663,9 @@ }, "node_modules/open": { "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, - "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -13338,16 +14680,18 @@ }, "node_modules/opener": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/optionator": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -13362,8 +14706,9 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -13384,7 +14729,8 @@ }, "node_modules/os-locale": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dependencies": { "lcid": "^1.0.0" }, @@ -13394,20 +14740,23 @@ }, "node_modules/ospath": { "version": "1.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==" }, "node_modules/p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -13420,8 +14769,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -13434,7 +14784,8 @@ }, "node_modules/p-map": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -13447,8 +14798,9 @@ }, "node_modules/p-retry": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -13459,16 +14811,18 @@ }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/param-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -13476,8 +14830,9 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -13486,20 +14841,26 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "license": "ISC", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -13515,33 +14876,38 @@ }, "node_modules/parse5": { "version": "5.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, - "license": "MIT", "dependencies": { "parse5": "^6.0.1" } }, "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/parseurl": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { "node": ">= 0.8" } }, "node_modules/pascal-case": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -13549,37 +14915,43 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { "version": "1.10.1", - "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -13593,41 +14965,47 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.2.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "engines": { "node": "14 || >=16.14" } }, "node_modules/path-scurry/node_modules/minipass": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/path-to-regexp": { "version": "0.1.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -13641,19 +15019,23 @@ }, "node_modules/pend": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/performance-now": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/picocolors": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -13663,14 +15045,16 @@ }, "node_modules/pify": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "engines": { "node": ">=0.10.0" } }, "node_modules/pinia": { "version": "2.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", "dependencies": { "@vue/devtools-api": "^6.5.0", "vue-demi": ">=0.14.5" @@ -13694,14 +15078,16 @@ }, "node_modules/pinkie": { "version": "2.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dependencies": { "pinkie": "^2.0.0" }, @@ -13711,15 +15097,17 @@ }, "node_modules/pirates": { "version": "4.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -13729,8 +15117,9 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -13741,8 +15130,9 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -13752,8 +15142,9 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -13766,8 +15157,9 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -13777,8 +15169,9 @@ }, "node_modules/portfinder": { "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dev": true, - "license": "MIT", "dependencies": { "async": "^2.6.4", "debug": "^3.2.7", @@ -13790,22 +15183,34 @@ }, "node_modules/portfinder/node_modules/async": { "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.35", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -13820,11 +15225,10 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -13832,8 +15236,9 @@ }, "node_modules/postcss-calc": { "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" @@ -13844,8 +15249,9 @@ }, "node_modules/postcss-colormin": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", @@ -13861,8 +15267,9 @@ }, "node_modules/postcss-convert-values": { "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" @@ -13876,8 +15283,9 @@ }, "node_modules/postcss-discard-comments": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13887,8 +15295,9 @@ }, "node_modules/postcss-discard-duplicates": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13898,8 +15307,9 @@ }, "node_modules/postcss-discard-empty": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13909,8 +15319,9 @@ }, "node_modules/postcss-discard-overridden": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -13920,7 +15331,8 @@ }, "node_modules/postcss-import": { "version": "15.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -13935,7 +15347,8 @@ }, "node_modules/postcss-js": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -13952,6 +15365,8 @@ }, "node_modules/postcss-load-config": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "funding": [ { "type": "opencollective", @@ -13962,7 +15377,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" @@ -13984,8 +15398,9 @@ } }, "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.0", - "license": "MIT", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "engines": { "node": ">=14" }, @@ -13994,16 +15409,21 @@ } }, "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.3.4", - "license": "ISC", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } }, "node_modules/postcss-loader": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, - "license": "MIT", "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -14023,8 +15443,9 @@ }, "node_modules/postcss-loader/node_modules/cosmiconfig": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -14038,8 +15459,9 @@ }, "node_modules/postcss-merge-longhand": { "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" @@ -14053,8 +15475,9 @@ }, "node_modules/postcss-merge-rules": { "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", @@ -14070,8 +15493,9 @@ }, "node_modules/postcss-minify-font-values": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14084,8 +15508,9 @@ }, "node_modules/postcss-minify-gradients": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, - "license": "MIT", "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", @@ -14100,8 +15525,9 @@ }, "node_modules/postcss-minify-params": { "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", @@ -14116,8 +15542,9 @@ }, "node_modules/postcss-minify-selectors": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -14130,8 +15557,9 @@ }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -14141,8 +15569,9 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -14157,8 +15586,9 @@ }, "node_modules/postcss-modules-scope": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", "dev": true, - "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -14171,8 +15601,9 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -14185,7 +15616,8 @@ }, "node_modules/postcss-nested": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dependencies": { "postcss-selector-parser": "^6.0.11" }, @@ -14202,8 +15634,9 @@ }, "node_modules/postcss-normalize-charset": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -14213,8 +15646,9 @@ }, "node_modules/postcss-normalize-display-values": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14227,8 +15661,9 @@ }, "node_modules/postcss-normalize-positions": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14241,8 +15676,9 @@ }, "node_modules/postcss-normalize-repeat-style": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14255,8 +15691,9 @@ }, "node_modules/postcss-normalize-string": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14269,8 +15706,9 @@ }, "node_modules/postcss-normalize-timing-functions": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14283,8 +15721,9 @@ }, "node_modules/postcss-normalize-unicode": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" @@ -14298,8 +15737,9 @@ }, "node_modules/postcss-normalize-url": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, - "license": "MIT", "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" @@ -14313,8 +15753,9 @@ }, "node_modules/postcss-normalize-whitespace": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14327,8 +15768,9 @@ }, "node_modules/postcss-ordered-values": { "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, - "license": "MIT", "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" @@ -14342,8 +15784,9 @@ }, "node_modules/postcss-reduce-initial": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" @@ -14357,8 +15800,9 @@ }, "node_modules/postcss-reduce-transforms": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -14370,8 +15814,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "license": "MIT", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -14382,8 +15827,9 @@ }, "node_modules/postcss-svgo": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" @@ -14397,8 +15843,9 @@ }, "node_modules/postcss-unique-selectors": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -14411,17 +15858,19 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postcss/node_modules/nanoid": { "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -14429,18 +15878,46 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "peer": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, - "license": "MIT", "peer": true, "bin": { "prettier": "bin/prettier.cjs" @@ -14454,8 +15931,9 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -14465,7 +15943,8 @@ }, "node_modules/pretty-bytes": { "version": "5.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "engines": { "node": ">=6" }, @@ -14475,8 +15954,9 @@ }, "node_modules/pretty-error": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -14484,20 +15964,22 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/progress": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "engines": { "node": ">=0.4.0" } }, "node_modules/progress-webpack-plugin": { "version": "1.0.16", + "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^2.1.0", "figures": "^2.0.0", @@ -14512,24 +15994,27 @@ }, "node_modules/progress-webpack-plugin/node_modules/ansi-escapes": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/progress-webpack-plugin/node_modules/ansi-regex": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/progress-webpack-plugin/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -14539,8 +16024,9 @@ }, "node_modules/progress-webpack-plugin/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -14552,8 +16038,9 @@ }, "node_modules/progress-webpack-plugin/node_modules/cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^2.0.0" }, @@ -14563,29 +16050,33 @@ }, "node_modules/progress-webpack-plugin/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/progress-webpack-plugin/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/progress-webpack-plugin/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/progress-webpack-plugin/node_modules/figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -14595,24 +16086,27 @@ }, "node_modules/progress-webpack-plugin/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/progress-webpack-plugin/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/progress-webpack-plugin/node_modules/log-update": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^3.0.0", "cli-cursor": "^2.0.0", @@ -14624,16 +16118,18 @@ }, "node_modules/progress-webpack-plugin/node_modules/mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/progress-webpack-plugin/node_modules/onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -14643,8 +16139,9 @@ }, "node_modules/progress-webpack-plugin/node_modules/restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -14655,8 +16152,9 @@ }, "node_modules/progress-webpack-plugin/node_modules/string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -14667,8 +16165,9 @@ }, "node_modules/progress-webpack-plugin/node_modules/strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -14678,8 +16177,9 @@ }, "node_modules/progress-webpack-plugin/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -14689,8 +16189,9 @@ }, "node_modules/progress-webpack-plugin/node_modules/wrap-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0" @@ -14701,23 +16202,27 @@ }, "node_modules/propagate": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "engines": { "node": ">= 8" } }, "node_modules/property-expr": { "version": "2.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" }, "node_modules/proto-list": { "version": "1.2.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true }, "node_modules/proxy-addr": { "version": "2.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -14727,31 +16232,37 @@ } }, "node_modules/proxy-from-env": { - "version": "1.0.0", - "license": "MIT" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/prr": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true }, "node_modules/pseudomap": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true }, "node_modules/psl": { "version": "1.9.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pstree.remy": { "version": "1.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true }, "node_modules/public-encrypt": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -14763,11 +16274,13 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/pump": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -14775,14 +16288,16 @@ }, "node_modules/punycode": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, "node_modules/qs": { "version": "6.10.4", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", "dependencies": { "side-channel": "^1.0.4" }, @@ -14795,16 +16310,22 @@ }, "node_modules/querystring": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "engines": { "node": ">=0.4.x" } }, "node_modules/querystringify": { "version": "2.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -14818,23 +16339,25 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/rand-seed": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/rand-seed/-/rand-seed-1.0.2.tgz", + "integrity": "sha512-Nu4jxelXx2hKyZJQvkRcUyc1n1ZDQk/VUYmY3hxYfXYGrMfCFqsJ9O6r5jtpt8KjqbllCB8qnIB86Oqy4s5gdw==" }, "node_modules/randombytes": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -14842,14 +16365,16 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "2.5.1", - "license": "MIT", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -14862,25 +16387,58 @@ }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "peer": true + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/read-cache": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dependencies": { "pify": "^2.3.0" } }, "node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -14893,8 +16451,9 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -14909,8 +16468,9 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -14921,8 +16481,9 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -14932,8 +16493,9 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -14946,8 +16508,9 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -14957,35 +16520,58 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, "node_modules/readdirp": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -14995,21 +16581,24 @@ }, "node_modules/reduce-flatten": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/regenerate": { "version": "1.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true }, "node_modules/regenerate-unicode-properties": { "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, - "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -15019,20 +16608,23 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -15048,8 +16640,9 @@ }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -15059,8 +16652,9 @@ }, "node_modules/regexpu-core": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -15075,8 +16669,9 @@ }, "node_modules/regjsparser": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -15086,6 +16681,8 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -15093,16 +16690,18 @@ }, "node_modules/relateurl": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/renderkid": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, - "license": "MIT", "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -15113,38 +16712,44 @@ }, "node_modules/request-progress": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dependencies": { "throttleit": "^1.0.0" } }, "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requires-port": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { "version": "1.22.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -15159,19 +16764,23 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-url": { "version": "0.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/restore-cursor": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -15182,15 +16791,17 @@ }, "node_modules/retry": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -15198,11 +16809,13 @@ }, "node_modules/rfdc": { "version": "1.3.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" }, "node_modules/rimraf": { "version": "3.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" }, @@ -15215,7 +16828,8 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -15223,10 +16837,13 @@ }, "node_modules/robust-predicates": { "version": "3.0.2", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -15241,29 +16858,31 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rw": { "version": "1.3.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/rxjs": { "version": "7.8.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.1.0", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -15276,6 +16895,8 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -15289,13 +16910,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-regex-test": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -15310,16 +16931,19 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { "version": "1.2.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" }, "node_modules/saxes": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, - "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -15329,8 +16953,9 @@ }, "node_modules/schema-utils": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -15346,17 +16971,20 @@ }, "node_modules/seedrandom": { "version": "3.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, "node_modules/select-hose": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true }, "node_modules/selfsigned": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -15367,7 +16995,8 @@ }, "node_modules/semver": { "version": "7.6.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -15380,7 +17009,8 @@ }, "node_modules/send": { "version": "0.18.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -15402,31 +17032,36 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -15442,24 +17077,27 @@ }, "node_modules/serve-index/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, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -15472,30 +17110,35 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/serve-static": { "version": "1.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -15508,31 +17151,35 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.2.1", - "license": "MIT", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, - "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -15540,11 +17187,13 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -15555,8 +17204,9 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -15566,7 +17216,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -15576,23 +17227,26 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shiki": { "version": "0.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", + "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", "dev": true, - "license": "MIT", "dependencies": { "jsonc-parser": "^3.0.0", "vscode-oniguruma": "^1.6.1", @@ -15600,10 +17254,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "license": "MIT", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -15617,10 +17272,58 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, "node_modules/simple-peer": { "version": "9.11.1", + "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz", + "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", "funding": [ { "type": "github", @@ -15635,7 +17338,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "buffer": "^6.0.3", "debug": "^4.3.2", @@ -15648,6 +17350,8 @@ }, "node_modules/simple-peer/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -15662,7 +17366,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -15670,6 +17373,8 @@ }, "node_modules/simple-peer/node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -15683,13 +17388,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] + }, + "node_modules/simple-peer/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/simple-update-notifier": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -15699,8 +17417,9 @@ }, "node_modules/sirv": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, - "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -15712,15 +17431,17 @@ }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -15732,8 +17453,9 @@ }, "node_modules/sockjs": { "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, - "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -15742,29 +17464,34 @@ }, "node_modules/sockjs/node_modules/uuid": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", - "license": "BSD-3-Clause", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-resolve": { "version": "0.5.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -15775,8 +17502,9 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -15784,11 +17512,14 @@ }, "node_modules/source-map-url": { "version": "0.4.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" }, "node_modules/spdx-correct": { "version": "3.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -15796,11 +17527,13 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -15808,12 +17541,14 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.17", - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" }, "node_modules/spdy": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -15827,8 +17562,9 @@ }, "node_modules/spdy-transport": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -15838,13 +17574,29 @@ "wbuf": "^1.7.3" } }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/sshpk": { "version": "1.18.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -15867,8 +17619,9 @@ }, "node_modules/ssri": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -15878,44 +17631,65 @@ }, "node_modules/stable": { "version": "0.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true }, "node_modules/stackframe": { "version": "1.3.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true }, "node_modules/statuses": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } }, "node_modules/stream-browserify": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" } }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-format": { "version": "2.0.0", - "dev": true, - "license": "WTFPL OR MIT" + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true }, "node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15928,7 +17702,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15939,13 +17714,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15955,26 +17732,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15982,7 +17764,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15993,7 +17776,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16003,39 +17787,44 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-eof": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -16045,8 +17834,9 @@ }, "node_modules/stylehacks": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" @@ -16060,7 +17850,8 @@ }, "node_modules/stylus": { "version": "0.54.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", "dependencies": { "css-parse": "~2.0.0", "debug": "~3.1.0", @@ -16080,7 +17871,8 @@ }, "node_modules/stylus-loader": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", "dependencies": { "loader-utils": "^1.0.2", "lodash.clonedeep": "^4.5.0", @@ -16092,14 +17884,16 @@ }, "node_modules/stylus/node_modules/debug": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dependencies": { "ms": "2.0.0" } }, "node_modules/stylus/node_modules/mkdirp": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" }, @@ -16109,29 +17903,34 @@ }, "node_modules/stylus/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/stylus/node_modules/sax": { "version": "1.2.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/stylus/node_modules/semver": { "version": "6.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/stylus/node_modules/source-map": { "version": "0.7.4", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "engines": { "node": ">= 8" } }, "node_modules/sucrase": { "version": "3.35.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -16151,14 +17950,16 @@ }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { "node": ">= 6" } }, "node_modules/sucrase/node_modules/glob": { "version": "10.3.10", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -16178,14 +17979,16 @@ }, "node_modules/sucrase/node_modules/minipass": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -16195,7 +17998,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { "node": ">= 0.4" }, @@ -16205,11 +18009,14 @@ }, "node_modules/svg-tags": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "node_modules/svg.draggable.js": { "version": "2.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", "dependencies": { "svg.js": "^2.0.1" }, @@ -16219,7 +18026,8 @@ }, "node_modules/svg.easing.js": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", "dependencies": { "svg.js": ">=2.3.x" }, @@ -16229,7 +18037,8 @@ }, "node_modules/svg.filter.js": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", "dependencies": { "svg.js": "^2.2.5" }, @@ -16239,11 +18048,13 @@ }, "node_modules/svg.js": { "version": "2.7.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" }, "node_modules/svg.pathmorphing.js": { "version": "0.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", "dependencies": { "svg.js": "^2.4.0" }, @@ -16253,7 +18064,8 @@ }, "node_modules/svg.resize.js": { "version": "1.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", "dependencies": { "svg.js": "^2.6.5", "svg.select.js": "^2.1.2" @@ -16264,7 +18076,8 @@ }, "node_modules/svg.resize.js/node_modules/svg.select.js": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", "dependencies": { "svg.js": "^2.2.5" }, @@ -16274,7 +18087,8 @@ }, "node_modules/svg.select.js": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", "dependencies": { "svg.js": "^2.6.5" }, @@ -16284,8 +18098,9 @@ }, "node_modules/svgo": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, - "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -16304,21 +18119,24 @@ }, "node_modules/svgo/node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/symbol-tree": { "version": "3.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "node_modules/table-layout": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^4.0.1", "deep-extend": "~0.6.0", @@ -16331,23 +18149,26 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/table-layout/node_modules/typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tailwindcss": { "version": "3.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -16382,15 +18203,17 @@ }, "node_modules/tapable": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar": { - "version": "6.2.0", - "license": "ISC", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -16403,16 +18226,66 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "peer": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "peer": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" }, @@ -16421,9 +18294,10 @@ } }, "node_modules/terser": { - "version": "5.27.1", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", + "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -16439,8 +18313,9 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -16472,8 +18347,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -16489,24 +18365,28 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/thenify": { "version": "3.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dependencies": { "any-promise": "^1.0.0" } }, "node_modules/thenify-all": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -16516,8 +18396,9 @@ }, "node_modules/thread-loader": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", "dev": true, - "license": "MIT", "dependencies": { "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.1.0", @@ -16538,8 +18419,9 @@ }, "node_modules/thread-loader/node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -16549,8 +18431,9 @@ }, "node_modules/thread-loader/node_modules/loader-utils": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -16562,8 +18445,9 @@ }, "node_modules/thread-loader/node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -16579,48 +18463,52 @@ }, "node_modules/throttleit": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/through": { "version": "2.3.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/thunky": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true }, "node_modules/tippy.js": { "version": "6.3.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", + "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", "dependencies": { "@popperjs/core": "^2.9.0" } }, "node_modules/tmp": { - "version": "0.2.1", - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/to-fast-properties": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { "is-number": "^7.0.0" }, @@ -16630,27 +18518,31 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } }, "node_modules/toposort": { "version": "2.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" }, "node_modules/totalist": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/touch": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, - "license": "ISC", "dependencies": { "nopt": "~1.0.10" }, @@ -16660,18 +18552,23 @@ }, "node_modules/touch/node_modules/nopt": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, - "license": "MIT", "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, "node_modules/tough-cookie": { "version": "4.1.3", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -16684,15 +18581,17 @@ }, "node_modules/tough-cookie/node_modules/universalify": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -16701,9 +18600,10 @@ } }, "node_modules/ts-api-utils": { - "version": "1.2.1", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" }, @@ -16713,8 +18613,9 @@ }, "node_modules/ts-command-line-args": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", "dev": true, - "license": "ISC", "dependencies": { "chalk": "^4.1.0", "command-line-args": "^5.1.1", @@ -16727,12 +18628,14 @@ }, "node_modules/ts-interface-checker": { "version": "0.1.13", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/ts-loader": { "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -16750,15 +18653,17 @@ }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/ts-node": { "version": "10.9.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -16799,26 +18704,30 @@ }, "node_modules/ts-node-register": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ts-node-register/-/ts-node-register-1.0.0.tgz", + "integrity": "sha512-0i5qFowh0t1phylWB0Y0l6+K2bv1He0ncYhM+jLSzOWGYM37qjDQJQV5yER63+97q7VFETC5mkPXZH+4JgZlng==", "dependencies": { "ts-node": ">=0.9.0" } }, "node_modules/ts-node/node_modules/arg": { "version": "4.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "engines": { "node": ">=0.3.1" } }, "node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -16828,11 +18737,13 @@ }, "node_modules/tslib": { "version": "2.6.2", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -16842,12 +18753,14 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -16857,16 +18770,18 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -16876,7 +18791,8 @@ }, "node_modules/type-is": { "version": "1.6.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -16886,11 +18802,12 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" }, @@ -16899,14 +18816,16 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -16916,15 +18835,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -16934,13 +18855,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16948,8 +18876,9 @@ }, "node_modules/typedoc": { "version": "0.22.18", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", + "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "glob": "^8.0.3", "lunr": "^2.3.9", @@ -16969,8 +18898,9 @@ }, "node_modules/typedoc-theme-oxide": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/typedoc-theme-oxide/-/typedoc-theme-oxide-0.1.6.tgz", + "integrity": "sha512-D5/TngJyNjnWVHpq5FzVr9REW/u78vWdOg1JC8s9uZxFWHY4pf0h9l1njry6Y/HVe51CdH40mHCO4QcOBBSUWA==", "dev": true, - "license": "MIT", "dependencies": { "cheerio": "^1.0.0-rc.11" }, @@ -16980,8 +18910,9 @@ }, "node_modules/typedoc/node_modules/glob": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16998,8 +18929,9 @@ }, "node_modules/typedoc/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17009,7 +18941,8 @@ }, "node_modules/typescript": { "version": "4.7.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17020,16 +18953,18 @@ }, "node_modules/typical": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -17042,29 +18977,34 @@ }, "node_modules/undefsafe": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "node_modules/underscore": { "version": "1.12.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" }, "node_modules/undici-types": { "version": "5.26.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -17075,43 +19015,50 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/universalify": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, "node_modules/untildify": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "engines": { "node": ">=8" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "funding": [ { "type": "opencollective", @@ -17126,7 +19073,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -17140,19 +19086,23 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/urix": { "version": "0.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" }, "node_modules/url": { "version": "0.10.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -17160,7 +19110,8 @@ }, "node_modules/url-parse": { "version": "1.5.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -17168,11 +19119,13 @@ }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, "node_modules/util": { "version": "0.12.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -17183,38 +19136,44 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utila": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -17222,14 +19181,16 @@ }, "node_modules/vary": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, "node_modules/vee-validate": { - "version": "4.12.5", - "license": "MIT", + "version": "4.12.6", + "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-4.12.6.tgz", + "integrity": "sha512-EKM3YHy8t1miPh30d5X6xOrfG/Ctq0nbN4eMpCK7ezvI6T98/S66vswP+ihL4QqAK/k5KqreWOxof09+JG7N/A==", "dependencies": { "@vue/devtools-api": "^6.5.1", "type-fest": "^4.8.3" @@ -17239,8 +19200,9 @@ } }, "node_modules/vee-validate/node_modules/type-fest": { - "version": "4.10.2", - "license": "(MIT OR CC0-1.0)", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.13.1.tgz", + "integrity": "sha512-ASMgM+Vf2cLwDMt1KXSkMUDSYCxtckDJs8zsaVF/mYteIsiARKCVtyXtcK38mIKbLTctZP8v6GMqdNaeI3fo7g==", "engines": { "node": ">=16" }, @@ -17250,35 +19212,44 @@ }, "node_modules/verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, "node_modules/vscode-oniguruma": { "version": "1.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true }, "node_modules/vscode-textmate": { "version": "5.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true }, "node_modules/vue": { - "version": "3.4.19", - "license": "MIT", + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", + "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==", "dependencies": { - "@vue/compiler-dom": "3.4.19", - "@vue/compiler-sfc": "3.4.19", - "@vue/runtime-dom": "3.4.19", - "@vue/server-renderer": "3.4.19", - "@vue/shared": "3.4.19" + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-sfc": "3.4.21", + "@vue/runtime-dom": "3.4.21", + "@vue/server-renderer": "3.4.21", + "@vue/shared": "3.4.21" }, "peerDependencies": { "typescript": "*" @@ -17291,18 +19262,21 @@ }, "node_modules/vue-cli-plugin-tailwind": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vue-cli-plugin-tailwind/-/vue-cli-plugin-tailwind-3.0.0.tgz", + "integrity": "sha512-bUWjfwGtJCeBU7pL4lD86RC+HsJAmAlYqr8e65NGC3q/ZBzC9KQs1Iy/vTyfDTnB7ZJm3huB+1a/m+17fdMZ8A==", + "dev": true }, "node_modules/vue-component-type-helpers": { - "version": "1.8.27", - "dev": true, - "license": "MIT" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.7.tgz", + "integrity": "sha512-7e12Evdll7JcTIocojgnCgwocX4WzIYStGClBQ+QuWPinZo/vQolv2EMq4a3lg16TKfwWafLimG77bxb56UauA==", + "dev": true }, "node_modules/vue-demi": { "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", "hasInstallScript": true, - "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -17325,8 +19299,9 @@ }, "node_modules/vue-eslint-parser": { "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4", "eslint-scope": "^7.1.1", @@ -17348,15 +19323,17 @@ }, "node_modules/vue-hot-reload-api": { "version": "2.3.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true }, "node_modules/vue-i18n": { - "version": "9.9.1", - "license": "MIT", + "version": "9.10.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.10.2.tgz", + "integrity": "sha512-ECJ8RIFd+3c1d3m1pctQ6ywG5Yj8Efy1oYoAKQ9neRdkLbuKLVeW4gaY5HPkD/9ssf1pOnUrmIFjx2/gkGxmEw==", "dependencies": { - "@intlify/core-base": "9.9.1", - "@intlify/shared": "9.9.1", + "@intlify/core-base": "9.10.2", + "@intlify/shared": "9.10.2", "@vue/devtools-api": "^6.5.0" }, "engines": { @@ -17371,8 +19348,9 @@ }, "node_modules/vue-loader": { "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "hash-sum": "^2.0.0", @@ -17393,8 +19371,9 @@ "node_modules/vue-loader-v16": { "name": "vue-loader", "version": "16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "hash-sum": "^2.0.0", @@ -17406,8 +19385,9 @@ }, "node_modules/vue-loader-v16/node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -17417,8 +19397,9 @@ }, "node_modules/vue-loader-v16/node_modules/loader-utils": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -17429,10 +19410,11 @@ } }, "node_modules/vue-router": { - "version": "4.2.5", - "license": "MIT", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.0.tgz", + "integrity": "sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==", "dependencies": { - "@vue/devtools-api": "^6.5.0" + "@vue/devtools-api": "^6.5.1" }, "funding": { "url": "https://github.com/sponsors/posva" @@ -17443,8 +19425,9 @@ }, "node_modules/vue-style-loader": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", "dev": true, - "license": "MIT", "dependencies": { "hash-sum": "^1.0.2", "loader-utils": "^1.0.2" @@ -17452,17 +19435,20 @@ }, "node_modules/vue-style-loader/node_modules/hash-sum": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true }, "node_modules/vue-template-es2015-compiler": { "version": "1.9.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true }, "node_modules/vue3-apexcharts": { "version": "1.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vue3-apexcharts/-/vue3-apexcharts-1.5.2.tgz", + "integrity": "sha512-rGbgUJDjtsyjfRF0uzwDjzt8+M7ICSRAbm1N9KCDiczW8BSpbEZuaEsJDJYnJuLFIIVXIGilYzIcjNBf6NbeYA==", "peerDependencies": { "apexcharts": "> 3.0.0", "vue": "> 3.0.0" @@ -17470,16 +19456,19 @@ }, "node_modules/w3c-hr-time": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, - "license": "MIT", "dependencies": { "browser-process-hrtime": "^1.0.0" } }, "node_modules/w3c-xmlserializer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", "dev": true, - "license": "MIT", "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -17488,9 +19477,10 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, - "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -17501,45 +19491,49 @@ }, "node_modules/wbuf": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, - "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { "version": "4.0.2", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "optional": true }, "node_modules/webpack": { - "version": "5.90.2", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -17547,7 +19541,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -17568,8 +19562,9 @@ }, "node_modules/webpack-bundle-analyzer": { "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", "dev": true, - "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", @@ -17594,16 +19589,18 @@ }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -17622,8 +19619,10 @@ }, "node_modules/webpack-chain": { "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "license": "MPL-2.0", "dependencies": { "deepmerge": "^1.5.2", "javascript-stringify": "^2.0.1" @@ -17634,16 +19633,18 @@ }, "node_modules/webpack-chain/node_modules/deepmerge": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, - "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -17664,8 +19665,9 @@ }, "node_modules/webpack-dev-middleware/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -17679,8 +19681,9 @@ }, "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -17690,13 +19693,15 @@ }, "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -17712,9 +19717,10 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.15.1", + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "dev": true, - "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -17744,7 +19750,7 @@ "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", + "webpack-dev-middleware": "^5.3.4", "ws": "^8.13.0" }, "bin": { @@ -17771,8 +19777,9 @@ }, "node_modules/webpack-dev-server/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -17786,8 +19793,9 @@ }, "node_modules/webpack-dev-server/node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -17797,21 +19805,24 @@ }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -17828,8 +19839,9 @@ }, "node_modules/webpack-merge": { "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, - "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -17841,21 +19853,24 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack-virtual-modules": { "version": "0.4.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -17866,24 +19881,27 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/webpack/node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -17899,16 +19917,18 @@ }, "node_modules/webpack/node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/websocket-driver": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -17920,16 +19940,18 @@ }, "node_modules/websocket-extensions": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } }, "node_modules/whatwg-encoding": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -17939,21 +19961,24 @@ }, "node_modules/whatwg-fetch": { "version": "3.6.20", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true }, "node_modules/whatwg-mimetype": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/whatwg-url": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -17964,18 +19989,22 @@ }, "node_modules/whatwg-url/node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/when": { - "version": "3.6.4" + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha512-d1VUP9F96w664lKINMGeElWdhhb5sC+thXM+ydZGU3ZnaE09Wv6FaS+mpM9570kcDs/xMfcXJBTLsMdHEFYY9Q==" }, "node_modules/which": { "version": "2.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, @@ -17988,8 +20017,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -18003,18 +20033,20 @@ }, "node_modules/which-module": { "version": "2.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.14", - "license": "MIT", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -18025,20 +20057,23 @@ }, "node_modules/wide-align": { "version": "1.1.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/wildcard": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true }, "node_modules/wordwrapjs": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, - "license": "MIT", "dependencies": { "reduce-flatten": "^2.0.0", "typical": "^5.2.0" @@ -18049,20 +20084,23 @@ }, "node_modules/wordwrapjs/node_modules/typical": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/workerpool": { "version": "6.2.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -18078,7 +20116,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -18093,11 +20132,13 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.16.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -18116,15 +20157,17 @@ }, "node_modules/xml-name-validator": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12" } }, "node_modules/xml2js": { "version": "0.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -18135,38 +20178,44 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "engines": { "node": ">=4.0" } }, "node_modules/xmlchars": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", - "license": "ISC", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/yargs": { "version": "16.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -18182,15 +20231,17 @@ }, "node_modules/yargs-parser": { "version": "20.2.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -18203,15 +20254,17 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yauzl": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -18219,15 +20272,17 @@ }, "node_modules/yn": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -18237,9 +20292,10 @@ }, "node_modules/yorkie": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "execa": "^0.8.0", "is-ci": "^1.0.10", @@ -18252,13 +20308,15 @@ }, "node_modules/yorkie/node_modules/ci-info": { "version": "1.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true }, "node_modules/yorkie/node_modules/cross-spawn": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, - "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -18267,8 +20325,9 @@ }, "node_modules/yorkie/node_modules/execa": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -18284,16 +20343,18 @@ }, "node_modules/yorkie/node_modules/get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/yorkie/node_modules/is-ci": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, - "license": "MIT", "dependencies": { "ci-info": "^1.5.0" }, @@ -18303,8 +20364,9 @@ }, "node_modules/yorkie/node_modules/lru-cache": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -18312,16 +20374,18 @@ }, "node_modules/yorkie/node_modules/normalize-path": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/yorkie/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -18331,16 +20395,18 @@ }, "node_modules/yorkie/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/yorkie/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -18350,12 +20416,14 @@ }, "node_modules/yorkie/node_modules/yallist": { "version": "2.1.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true }, "node_modules/yup": { "version": "0.32.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", + "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", "dependencies": { "@babel/runtime": "^7.15.4", "@types/lodash": "^4.14.175", From 61591986cc74d0618c4299be020196e0daccdb0e Mon Sep 17 00:00:00 2001 From: tharvik Date: Thu, 21 Mar 2024 09:13:36 +0100 Subject: [PATCH 09/37] web-client: rm wrtc unneeded specifics --- web-client/vue.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/web-client/vue.config.js b/web-client/vue.config.js index 01892e21b..ad609e767 100644 --- a/web-client/vue.config.js +++ b/web-client/vue.config.js @@ -1,7 +1,6 @@ module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/disco/' : '/', configureWebpack: { - module: { noParse: /wrtc/ }, resolve: { fallback: { crypto: require.resolve('crypto-browserify'), From 2a584c4f74a4f9084926aab43c0e3ca06d0ad31d Mon Sep 17 00:00:00 2001 From: tharvik Date: Fri, 15 Mar 2024 14:12:50 +0100 Subject: [PATCH 10/37] discojs-core: inline Weights --- discojs/discojs-core/src/types.ts | 4 ---- discojs/discojs-core/src/weights/weights_container.ts | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/discojs/discojs-core/src/types.ts b/discojs/discojs-core/src/types.ts index 84fc9ff68..c36a45ad8 100644 --- a/discojs/discojs-core/src/types.ts +++ b/discojs/discojs-core/src/types.ts @@ -1,4 +1,3 @@ -import type tf from '@tensorflow/tfjs' import type { Map } from 'immutable' import type { WeightsContainer } from '.' @@ -7,9 +6,6 @@ import type { NodeID } from './client' // Filesystem reference export type Path = string -// Weights of a model -export type Weights = tf.Tensor[] - export type MetadataKey = string export type MetadataValue = string diff --git a/discojs/discojs-core/src/weights/weights_container.ts b/discojs/discojs-core/src/weights/weights_container.ts index 2cf8af864..ff5b4e12f 100644 --- a/discojs/discojs-core/src/weights/weights_container.ts +++ b/discojs/discojs-core/src/weights/weights_container.ts @@ -1,7 +1,7 @@ import { List } from 'immutable' import tf from '@tensorflow/tfjs' -import type { Weights } from '..' +type Weights = tf.Tensor[] export type TensorLike = tf.Tensor | ArrayLike From 12ab70dfd7691b79bfec1b9c0507521c60c988f5 Mon Sep 17 00:00:00 2001 From: tharvik Date: Mon, 18 Mar 2024 16:28:15 +0100 Subject: [PATCH 11/37] discojs-core: remove test dep on discojs-node Closes: #634 --- .github/workflows/lint-test-build.yml | 16 +++++------- .../tests}/validator.spec.ts | 25 +++++++++++++------ 2 files changed, 23 insertions(+), 18 deletions(-) rename {discojs/discojs-core/src/validation => server/tests}/validator.spec.ts (78%) diff --git a/.github/workflows/lint-test-build.yml b/.github/workflows/lint-test-build.yml index 926473dcf..a7355dc1d 100644 --- a/.github/workflows/lint-test-build.yml +++ b/.github/workflows/lint-test-build.yml @@ -19,7 +19,6 @@ jobs: - run: ./datasets/populate lint-lib-core: - needs: [build-lib-core, build-lib-node] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -28,7 +27,6 @@ jobs: node-version-file: .nvmrc cache: npm - run: npm ci - - run: npm --workspace=./discojs/discojs-{core,node} run build - run: npm --workspace=./discojs/discojs-core run lint lint-lib-node: @@ -211,8 +209,7 @@ jobs: working-directory: docs/examples test-lib-core: - needs: - [build-lib-core, build-lib-node, build-server-docker, download-datasets] + needs: [build-lib-core, download-datasets] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -228,11 +225,10 @@ jobs: node-version-file: .nvmrc cache: npm - run: npm ci - - run: npm --workspace=./discojs/discojs-{core,node} run build - - run: ./with_server npm --workspace=./discojs/discojs-core test + - run: npm --workspace=./discojs/discojs-core test test-lib-node: - needs: [build-lib-core, build-server-docker, download-datasets] + needs: [build-lib-core, download-datasets] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -249,10 +245,10 @@ jobs: cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build - - run: ./with_server npm --workspace=./discojs/discojs-node test + - run: npm --workspace=./discojs/discojs-node test test-lib-web: - needs: [build-lib-core, build-server-docker, download-datasets] + needs: [build-lib-core] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -269,7 +265,7 @@ jobs: cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-core run build - - run: ./with_server npm --workspace=./discojs/discojs-web test + - run: npm --workspace=./discojs/discojs-web test test-server: needs: [build-lib-core, build-lib-node, download-datasets] diff --git a/discojs/discojs-core/src/validation/validator.spec.ts b/server/tests/validator.spec.ts similarity index 78% rename from discojs/discojs-core/src/validation/validator.spec.ts rename to server/tests/validator.spec.ts index 63520a88e..49635e7b7 100644 --- a/discojs/discojs-core/src/validation/validator.spec.ts +++ b/server/tests/validator.spec.ts @@ -1,9 +1,11 @@ import { assert } from 'chai' import fs from 'fs' +import type { Server } from 'node:http' -import type { Task, data } from '../..' -import { Validator, ConsoleLogger, EmptyMemory, client as clients, aggregator, defaultTasks } from '../..' +import type { Task, data } from '@epfml/discojs-core' +import { Validator, ConsoleLogger, EmptyMemory, client as clients, aggregator, defaultTasks } from '@epfml/discojs-core' import { NodeImageLoader, NodeTabularLoader } from '@epfml/discojs-node' +import { startServer } from '../src/index.js' const simplefaceMock: Task = { id: 'simple_face', @@ -22,18 +24,25 @@ const simplefaceMock: Task = { } } -describe('validator', () => { +describe('validator', function () { + this.timeout(10_000) + + let server: Server + let url: URL + beforeEach(async () => { [server, url] = await startServer() }) + afterEach(() => { server?.close() }) + it('simple_face validator', async () => { - const dir = '../../datasets/simple_face/' + const dir = '../datasets/simple_face/' const files: string[][] = ['child/', 'adult/'] .map((subdir: string) => fs.readdirSync(dir + subdir) .map((file: string) => dir + subdir + file)) - const labels = files.flatMap((files, index) => Array(files.length).fill(index)) + const labels = files.flatMap((files, index) => Array(files.length).fill(`${index}`)) const data = (await new NodeImageLoader(simplefaceMock) .loadAll(files.flat(), { labels })).train const meanAggregator = new aggregator.MeanAggregator() - const client = new clients.Local(new URL('http://localhost:8080'), simplefaceMock, meanAggregator) + const client = new clients.Local(url, simplefaceMock, meanAggregator) meanAggregator.setModel(await client.getLatestModel()) const validator = new Validator( simplefaceMock, @@ -60,14 +69,14 @@ describe('validator', () => { it('titanic validator', async () => { const titanicTask = defaultTasks.titanic.getTask() - const files = ['../../datasets/titanic_train.csv'] + const files = ['../datasets/titanic_train.csv'] const data: data.Data = (await new NodeTabularLoader(titanicTask, ',').loadAll(files, { features: titanicTask.trainingInformation.inputColumns, labels: titanicTask.trainingInformation.outputColumns, shuffle: false })).train const meanAggregator = new aggregator.MeanAggregator() - const client = new clients.Local(new URL('http://localhost:8080'), titanicTask, meanAggregator) + const client = new clients.Local(url, titanicTask, meanAggregator) meanAggregator.setModel(await client.getLatestModel()) const validator = new Validator(titanicTask, new ConsoleLogger(), new EmptyMemory(), undefined, client) await validator.assess(data) From df4c7dee7bf0b91d7d9dcb47a6fe836c1ee04977 Mon Sep 17 00:00:00 2001 From: tharvik Date: Tue, 19 Mar 2024 13:35:25 +0100 Subject: [PATCH 12/37] discojs-core/trainer_builder: drop aggregator --- discojs/discojs-core/src/training/disco.ts | 4 +--- discojs/discojs-core/src/training/trainer/trainer_builder.ts | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/discojs/discojs-core/src/training/disco.ts b/discojs/discojs-core/src/training/disco.ts index 227582258..cb358add3 100644 --- a/discojs/discojs-core/src/training/disco.ts +++ b/discojs/discojs-core/src/training/disco.ts @@ -34,7 +34,6 @@ export class Disco { public readonly logger: Logger public readonly memory: Memory private readonly client: clients.Client - private readonly aggregator: Aggregator private readonly trainer: Promise constructor ( @@ -95,12 +94,11 @@ export class Disco { this.task = task this.client = options.client - this.aggregator = options.aggregator this.memory = options.memory this.logger = options.logger const trainerBuilder = new TrainerBuilder(this.memory, this.task, options.informant) - this.trainer = trainerBuilder.build(this.aggregator, this.client, options.scheme !== TrainingSchemes.LOCAL) + this.trainer = trainerBuilder.build(this.client, options.scheme !== TrainingSchemes.LOCAL) } /** diff --git a/discojs/discojs-core/src/training/trainer/trainer_builder.ts b/discojs/discojs-core/src/training/trainer/trainer_builder.ts index 2d7719349..40cdd6399 100644 --- a/discojs/discojs-core/src/training/trainer/trainer_builder.ts +++ b/discojs/discojs-core/src/training/trainer/trainer_builder.ts @@ -1,6 +1,5 @@ import type { client as clients, Model, Task, TrainingInformant, ModelInfo, Memory } from '../..' import { ModelType } from '../..' -import type { Aggregator } from '../../aggregator' import { DistributedTrainer } from './distributed_trainer' import { LocalTrainer } from './local_trainer' @@ -23,7 +22,7 @@ export class TrainerBuilder { * @param distributed whether to build a distributed or local trainer * @returns */ - async build (aggregator: Aggregator, client: clients.Client, distributed: boolean = false): Promise { + async build (client: clients.Client, distributed = false): Promise { const model = await this.getModel(client) if (distributed) { return new DistributedTrainer( From 18e90b4319edbfc43b46a2fb97850727915149bb Mon Sep 17 00:00:00 2001 From: tharvik Date: Tue, 19 Mar 2024 19:48:03 +0100 Subject: [PATCH 13/37] web-client: readd cypress --- .github/workflows/lint-test-build.yml | 15 +++++++++--- package-lock.json | 27 +++++++++++++++++++++ web-client/.env.e2e | 1 + web-client/.gitignore | 20 --------------- web-client/cypress.config.ts | 9 +------ web-client/cypress/.gitignore | 3 +++ web-client/cypress/e2e/tasks.cy.ts | 35 ++++++++++----------------- web-client/cypress/e2e/tasks.ts | 8 ++++++ web-client/cypress/e2e/training.cy.ts | 3 ++- web-client/package.json | 8 ++++-- web-client/vue.config.js | 4 +-- 11 files changed, 74 insertions(+), 59 deletions(-) create mode 100644 web-client/.env.e2e create mode 100644 web-client/cypress/.gitignore create mode 100644 web-client/cypress/e2e/tasks.ts diff --git a/.github/workflows/lint-test-build.yml b/.github/workflows/lint-test-build.yml index a7355dc1d..191fd0dd6 100644 --- a/.github/workflows/lint-test-build.yml +++ b/.github/workflows/lint-test-build.yml @@ -305,14 +305,21 @@ jobs: cache: npm - run: npm ci - run: npm --workspace=./discojs/discojs-{core,web} run build + - run: npm --workspace=./web-client run test:unit - uses: cypress-io/github-action@v6 with: - browser: chromium - start: npm start + working-directory: ./web-client install: false - wait-on: http://localhost:8081/ + component: true + env: + VUE_APP_SERVER_URL: http://server + - uses: cypress-io/github-action@v6 + with: working-directory: ./web-client - config: baseUrl=http://localhost:8081/#/ + install: false + start: npm start + env: + VUE_APP_SERVER_URL: http://server test-cli: needs: [build-lib-core, build-lib-node, build-server, download-datasets] diff --git a/package-lock.json b/package-lock.json index 576727a68..bf2ac28a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4245,6 +4245,20 @@ "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" } }, + "node_modules/@vue/cli-plugin-e2e-cypress": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-5.0.8.tgz", + "integrity": "sha512-BasFHQSqDAmFvueaqk/d+s1hJnW0OtWEIgmHZRXg8hYkZJF4pu7kz66DmEAZl6DypfyoSxqwN7WHILYDuKAaEw==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^5.0.8", + "eslint-plugin-cypress": "^2.11.2" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", + "cypress": "*" + } + }, "node_modules/@vue/cli-plugin-eslint": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", @@ -9442,6 +9456,18 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-cypress": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", + "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", + "dev": true, + "dependencies": { + "globals": "^13.20.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" + } + }, "node_modules/eslint-plugin-es": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", @@ -20506,6 +20532,7 @@ "devDependencies": { "@types/msgpack-lite": "0.1", "@vue/cli-plugin-babel": "5", + "@vue/cli-plugin-e2e-cypress": "5", "@vue/cli-plugin-eslint": "5", "@vue/cli-plugin-router": "5", "@vue/cli-plugin-typescript": "5", diff --git a/web-client/.env.e2e b/web-client/.env.e2e new file mode 100644 index 000000000..26317729b --- /dev/null +++ b/web-client/.env.e2e @@ -0,0 +1 @@ +VUE_APP_SERVER_URL=http://server diff --git a/web-client/.gitignore b/web-client/.gitignore index 403adbc1e..781b3b25c 100644 --- a/web-client/.gitignore +++ b/web-client/.gitignore @@ -1,23 +1,3 @@ -.DS_Store -node_modules -/dist - - # local env files .env.local .env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/web-client/cypress.config.ts b/web-client/cypress.config.ts index 77b6b7932..e60c0d3f6 100644 --- a/web-client/cypress.config.ts +++ b/web-client/cypress.config.ts @@ -1,14 +1,7 @@ import { defineConfig } from 'cypress' export default defineConfig({ - e2e: { - // TODO: env var - baseUrl: 'http://localhost:8081/#/', - setupNodeEvents (on, config) { - // implement node event listeners here - } - }, - + e2e: { baseUrl: 'http://localhost:8081/' }, component: { devServer: { framework: 'vue-cli', diff --git a/web-client/cypress/.gitignore b/web-client/cypress/.gitignore new file mode 100644 index 000000000..33a533c35 --- /dev/null +++ b/web-client/cypress/.gitignore @@ -0,0 +1,3 @@ +# generated +/screenshots/ +/videos/ diff --git a/web-client/cypress/e2e/tasks.cy.ts b/web-client/cypress/e2e/tasks.cy.ts index 8702d216f..8d065d036 100644 --- a/web-client/cypress/e2e/tasks.cy.ts +++ b/web-client/cypress/e2e/tasks.cy.ts @@ -1,39 +1,30 @@ /* eslint-disable no-undef */ -import { defaultTasks } from '@epfml/discojs-core' -// most basic disco tasks -export const TASK_LIST = [ - defaultTasks.titanic.getTask(), - defaultTasks.mnist.getTask(), - defaultTasks.cifar10.getTask() -] +import TASK_LIST from './tasks' describe('tasks page', () => { it('displays tasks', () => { - cy.intercept('tasks', TASK_LIST).as('tasks') - cy.visit('list') - cy.wait('@tasks').then((interception) => { - assert.lengthOf(interception.response.body, TASK_LIST.length) - }) + cy.intercept({ hostname: 'server', pathname: 'tasks' }, TASK_LIST).as('tasks') + + cy.visit('/#/list') cy.get('div[id="tasks"]').children().should('have.length', TASK_LIST.length) }) + it('redirects to training', () => { - cy.intercept('tasks', TASK_LIST).as('tasks') - cy.visit('list') - cy.wait('@tasks') + cy.intercept({ hostname: 'server', pathname: 'tasks' }, TASK_LIST).as('tasks') + + cy.visit('/#/list') TASK_LIST.forEach((task) => { cy.get(`div[id="${task.id}"]`).find('button').click() - cy.url().should('eq', Cypress.config().baseUrl + task.id) + cy.url().should('eq', `${Cypress.config().baseUrl}#/${task.id}`) cy.get('button').contains('previous', { matchCase: false }).click() - cy.url().should('eq', Cypress.config().baseUrl + 'list') }) }) + it('displays error message', () => { - cy.intercept('tasks', (req) => { - req.reply({ statusCode: 404 }) - }).as('tasks') - cy.visit('list') - cy.wait('@tasks') + cy.intercept({ hostname: 'server', pathname: 'tasks' }, { statusCode: 404 }).as('tasks') + + cy.visit('/#/list') cy.get('button').contains('reload page', { matchCase: false }) }) }) diff --git a/web-client/cypress/e2e/tasks.ts b/web-client/cypress/e2e/tasks.ts new file mode 100644 index 000000000..730f8b13d --- /dev/null +++ b/web-client/cypress/e2e/tasks.ts @@ -0,0 +1,8 @@ +import { defaultTasks } from '@epfml/discojs-core' + +// most basic disco tasks +export default [ + defaultTasks.titanic.getTask(), + defaultTasks.mnist.getTask(), + defaultTasks.cifar10.getTask() +] diff --git a/web-client/cypress/e2e/training.cy.ts b/web-client/cypress/e2e/training.cy.ts index 5ab4d4638..f0ac0beb6 100644 --- a/web-client/cypress/e2e/training.cy.ts +++ b/web-client/cypress/e2e/training.cy.ts @@ -1,5 +1,6 @@ /* eslint-disable no-undef */ -import { TASK_LIST } from './tasks.cy' + +import TASK_LIST from './tasks' describe('training page', () => { it('is navigable', () => { diff --git a/web-client/package.json b/web-client/package.json index 45a036775..8d08814e5 100644 --- a/web-client/package.json +++ b/web-client/package.json @@ -2,10 +2,13 @@ "name": "@epfml/disco-web-client", "private": true, "scripts": { - "start": "vue-cli-service serve --port 8081", + "start": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint", - "test": "vue-cli-service test:unit tests" + "test": "npm run test:unit && npm run test:component && npm run test:e2e", + "test:unit": "vue-cli-service test:unit tests", + "test:component": "cypress run --component", + "test:e2e": "vue-cli-service test:e2e --headless --mode e2e" }, "dependencies": { "@epfml/discojs": "*", @@ -43,6 +46,7 @@ "devDependencies": { "@types/msgpack-lite": "0.1", "@vue/cli-plugin-babel": "5", + "@vue/cli-plugin-e2e-cypress": "5", "@vue/cli-plugin-eslint": "5", "@vue/cli-plugin-router": "5", "@vue/cli-plugin-typescript": "5", diff --git a/web-client/vue.config.js b/web-client/vue.config.js index ad609e767..731b88f22 100644 --- a/web-client/vue.config.js +++ b/web-client/vue.config.js @@ -1,5 +1,4 @@ module.exports = { - publicPath: process.env.NODE_ENV === 'production' ? '/disco/' : '/', configureWebpack: { resolve: { fallback: { @@ -14,5 +13,6 @@ module.exports = { args[0].title = 'Disco' return args }) - } + }, + devServer: { port: 8081 } } From 276ba1f8d2f07f6e82de8740ae6a3d527bcb3ea2 Mon Sep 17 00:00:00 2001 From: tharvik Date: Wed, 20 Mar 2024 12:37:24 +0100 Subject: [PATCH 14/37] discojs-core/task: ensure type guards completeness --- cli/src/cli.ts | 5 +- .../discojs-core/src/default_tasks/cifar10.ts | 2 +- .../discojs-core/src/default_tasks/geotags.ts | 2 +- .../src/default_tasks/lus_covid.ts | 2 +- .../discojs-core/src/default_tasks/mnist.ts | 2 +- .../src/default_tasks/simple_face.ts | 2 +- .../src/default_tasks/skin_mnist.ts | 2 +- .../discojs-core/src/default_tasks/titanic.ts | 2 +- .../src/default_tasks/wikitext.ts | 4 +- discojs/discojs-core/src/index.ts | 2 +- discojs/discojs-core/src/task/data_example.ts | 25 +- discojs/discojs-core/src/task/digest.ts | 11 +- .../src/task/display_information.ts | 78 +++--- discojs/discojs-core/src/task/index.ts | 2 +- discojs/discojs-core/src/task/label_type.ts | 33 +++ discojs/discojs-core/src/task/summary.ts | 23 +- discojs/discojs-core/src/task/task.ts | 43 ++-- .../discojs-core/src/task/task_provider.ts | 9 - .../src/task/training_information.ts | 225 +++++++++--------- discojs/discojs-core/src/training/disco.ts | 22 +- discojs/discojs-core/src/training/index.ts | 1 - .../src/training/training_schemes.ts | 5 - docs/examples/README.md | 2 +- docs/examples/custom_task.ts | 2 +- docs/examples/training.ts | 4 +- server/src/tasks.ts | 18 +- server/tests/e2e/federated.spec.ts | 10 +- web-client/src/clients.ts | 12 +- .../src/components/training/ModelCaching.vue | 4 +- .../src/components/training/Trainer.vue | 24 +- 30 files changed, 282 insertions(+), 296 deletions(-) delete mode 100644 discojs/discojs-core/src/training/training_schemes.ts diff --git a/cli/src/cli.ts b/cli/src/cli.ts index 5ffc5c22f..421aeb435 100644 --- a/cli/src/cli.ts +++ b/cli/src/cli.ts @@ -1,7 +1,7 @@ import { Range } from 'immutable' import type { TrainerLog, data, Task } from '@epfml/discojs-core' -import { Disco, TrainingSchemes, aggregator as aggregators, client as clients } from '@epfml/discojs-core' +import { Disco, aggregator as aggregators, client as clients } from '@epfml/discojs-core' import { startServer } from '@epfml/disco-server' import { saveLog } from './utils' @@ -12,8 +12,7 @@ async function runUser (task: Task, url: URL, data: data.DataSplit): Promise + const { columnName, columnData }: Partial> = raw if ( typeof columnName !== 'string' || @@ -20,13 +17,9 @@ export function isDataExample (raw: unknown): raw is DataExample { return false } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _: DataExample = { columnName, columnData } + const repack = { columnName, columnData } + const _correct: DataExample = repack + const _total: Record = repack return true } - -export interface DataExample { - columnName: string - columnData: string | number -} diff --git a/discojs/discojs-core/src/task/digest.ts b/discojs/discojs-core/src/task/digest.ts index 4591b55da..c6174cd3a 100644 --- a/discojs/discojs-core/src/task/digest.ts +++ b/discojs/discojs-core/src/task/digest.ts @@ -4,14 +4,11 @@ export interface Digest { } export function isDigest (raw: unknown): raw is Digest { - if (typeof raw !== 'object') { - return false - } - if (raw === null) { + if (typeof raw !== 'object' || raw === null) { return false } - const { algorithm, value } = raw as Record + const { algorithm, value }: Partial> = raw if (!( typeof algorithm === 'string' && @@ -20,5 +17,9 @@ export function isDigest (raw: unknown): raw is Digest { return false } + const repack = { algorithm, value } + const _correct: Digest = repack + const _total: Record = repack + return true } diff --git a/discojs/discojs-core/src/task/display_information.ts b/discojs/discojs-core/src/task/display_information.ts index acde985dd..a008702eb 100644 --- a/discojs/discojs-core/src/task/display_information.ts +++ b/discojs/discojs-core/src/task/display_information.ts @@ -1,38 +1,42 @@ import { type Summary, isSummary } from './summary' import { type DataExample, isDataExample } from './data_example' -import { type LabelType } from './label_type' +import { isLabelType, type LabelType } from './label_type' + +export interface DisplayInformation { + taskTitle?: string + summary?: Summary + tradeoffs?: string + dataFormatInformation?: string + // TODO merge dataExample + dataExampleText?: string + model?: string + // TODO no need for undefined + dataExample?: DataExample[] + // TODO no need for undefined + headers?: string[] + dataExampleImage?: string + limitations?: string + labelDisplay?: LabelType +} export function isDisplayInformation (raw: unknown): raw is DisplayInformation { - if (typeof raw !== 'object') { - return false - } - if (raw === null) { + if (typeof raw !== 'object' || raw === null) { return false } - type Fields = - 'dataExample' | - 'dataExampleImage' | - 'dataExampleText' | - 'dataFormatInformation' | - 'headers' | - 'limitations' | - 'model' | - 'summary' | - 'taskTitle' | - 'tradeoffs' const { dataExample, dataExampleImage, dataExampleText, dataFormatInformation, headers, + labelDisplay, limitations, model, summary, taskTitle, tradeoffs - } = raw as Record + }: Partial> = raw if ( typeof taskTitle !== 'string' || @@ -41,6 +45,7 @@ export function isDisplayInformation (raw: unknown): raw is DisplayInformation { (tradeoffs !== undefined && typeof tradeoffs !== 'string') || (model !== undefined && typeof model !== 'string') || (dataExampleImage !== undefined && typeof dataExampleImage !== 'string') || + (labelDisplay !== undefined && !isLabelType(labelDisplay)) || (limitations !== undefined && typeof limitations !== 'string') ) { return false @@ -65,36 +70,21 @@ export function isDisplayInformation (raw: unknown): raw is DisplayInformation { return false } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _: DisplayInformation = { - taskTitle, - summary, - tradeoffs, - dataFormatInformation, - dataExampleText, - model, + const repack = { dataExample, - headers, dataExampleImage, - limitations + dataExampleText, + dataFormatInformation, + headers, + labelDisplay, + limitations, + model, + summary, + taskTitle, + tradeoffs, } + const _correct: DisplayInformation = repack + const _total: Record = repack return true } - -export interface DisplayInformation { - taskTitle?: string - summary?: Summary - tradeoffs?: string - dataFormatInformation?: string - // TODO merge dataExample - dataExampleText?: string - model?: string - // TODO no need for undefined - dataExample?: DataExample[] - // TODO no need for undefined - headers?: string[] - dataExampleImage?: string - limitations?: string - labelDisplay?: LabelType -} diff --git a/discojs/discojs-core/src/task/index.ts b/discojs/discojs-core/src/task/index.ts index 2ec545aa2..d36ef0bf2 100644 --- a/discojs/discojs-core/src/task/index.ts +++ b/discojs/discojs-core/src/task/index.ts @@ -1,5 +1,5 @@ export { isTask, type Task, isTaskID, type TaskID } from './task' -export { type TaskProvider, isTaskProvider } from './task_provider' +export { type TaskProvider } from './task_provider' export { isDigest, type Digest } from './digest' export { isDisplayInformation, type DisplayInformation } from './display_information' export type { TrainingInformation } from './training_information' diff --git a/discojs/discojs-core/src/task/label_type.ts b/discojs/discojs-core/src/task/label_type.ts index bf5ba93d2..db31ff247 100644 --- a/discojs/discojs-core/src/task/label_type.ts +++ b/discojs/discojs-core/src/task/label_type.ts @@ -6,3 +6,36 @@ export interface LabelType { export enum LabelTypeEnum { TEXT, POLYGON_MAP } + +function isLabelTypeEnum(raw: unknown): raw is LabelTypeEnum { + switch (raw) { + case LabelTypeEnum.TEXT: break + case LabelTypeEnum.POLYGON_MAP: break + default: return false + } + + const _: LabelTypeEnum = raw + + return true +} + +export function isLabelType(raw: unknown): raw is LabelType { + if (typeof raw !== 'object' || raw === null) { + return false + } + + const { labelType, mapBaseUrl }: Partial> = raw + + if ( + !isLabelTypeEnum(labelType) || + (mapBaseUrl !== undefined && typeof mapBaseUrl !== 'string') + ) { + return false + } + + const repack = { labelType, mapBaseUrl } + const _correct: LabelType = repack + const _total: Record = repack + + return true +} diff --git a/discojs/discojs-core/src/task/summary.ts b/discojs/discojs-core/src/task/summary.ts index f9e676320..77568bf7a 100644 --- a/discojs/discojs-core/src/task/summary.ts +++ b/discojs/discojs-core/src/task/summary.ts @@ -1,25 +1,22 @@ -export function isSummary (raw: unknown): raw is Summary { - if (typeof raw !== 'object') { - return false - } +export interface Summary { + preview: string + overview: string +} - if (raw === null) { +export function isSummary (raw: unknown): raw is Summary { + if (typeof raw !== 'object' || raw === null) { return false } - const { preview, overview } = raw as Record<'preview' | 'overview', unknown> + const { preview, overview }: Partial> = raw if (!(typeof preview === 'string' && typeof overview === 'string')) { return false } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _: Summary = { preview, overview } + const repack = { preview, overview } + const _correct: Summary = repack + const _total: Record = repack return true } - -export interface Summary { - preview: string - overview: string -} diff --git a/discojs/discojs-core/src/task/task.ts b/discojs/discojs-core/src/task/task.ts index 1bd3e5498..5de14ba09 100644 --- a/discojs/discojs-core/src/task/task.ts +++ b/discojs/discojs-core/src/task/task.ts @@ -4,43 +4,36 @@ import { isDigest, type Digest } from './digest' export type TaskID = string +export interface Task { + id: TaskID + digest?: Digest + displayInformation: DisplayInformation + trainingInformation: TrainingInformation +} + export function isTaskID (obj: unknown): obj is TaskID { return typeof obj === 'string' } export function isTask (raw: unknown): raw is Task { - if (typeof raw !== 'object') { - return false - } - if (raw === null) { + if (typeof raw !== 'object' || raw === null) { return false } - const { id, digest, displayInformation, trainingInformation } = raw as - Record<'id' | 'digest' | 'displayInformation' | 'trainingInformation', unknown | undefined> + const { id, digest, displayInformation, trainingInformation }: + Partial> = raw - if (!isTaskID(id)) { - return false - } - if (digest !== undefined && !isDigest(digest)) { - return false - } - if (!isDisplayInformation(displayInformation)) { - return false - } - if (!isTrainingInformation(trainingInformation)) { + if (!isTaskID(id) || + (digest !== undefined && !isDigest(digest)) || + !isDisplayInformation(displayInformation) || + !isTrainingInformation(trainingInformation) + ) { return false } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _: Task = { id, displayInformation, trainingInformation } + const repack = { id, digest, displayInformation, trainingInformation } + const _correct: Task = repack + const _total: Record = repack return true } - -export interface Task { - id: TaskID - digest?: Digest - displayInformation: DisplayInformation - trainingInformation: TrainingInformation -} diff --git a/discojs/discojs-core/src/task/task_provider.ts b/discojs/discojs-core/src/task/task_provider.ts index 4aeb0725e..ccb0377a4 100644 --- a/discojs/discojs-core/src/task/task_provider.ts +++ b/discojs/discojs-core/src/task/task_provider.ts @@ -5,12 +5,3 @@ export interface TaskProvider { // Create the corresponding model ready for training (compiled) getModel: () => Promise } - -export function isTaskProvider (obj: any): obj is TaskProvider { - if ('getModel' in obj && typeof obj.getModel === 'function' && - 'getTask' in obj && typeof obj.getTask === 'function') { - return true - } else { - return false - } -} diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index bd2e13956..73ed2239b 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -1,116 +1,6 @@ import { type AggregatorChoice } from '../aggregator/get' import { type Preprocessing } from '../dataset/data/preprocessing' -export function isTrainingInformation (raw: unknown): raw is TrainingInformation { - if (typeof raw !== 'object') { - return false - } - if (raw === null) { - return false - } - - type Fields = - 'dataType' | - 'scheme' | - 'epochs' | - 'roundDuration' | - 'validationSplit' | - 'batchSize' | - 'modelID' | - 'preprocessingFunctions' | - 'inputColumns' | - 'outputColumns' | - 'IMAGE_H' | - 'IMAGE_W' | - 'decentralizedSecure' | - 'maxShareValue' | - 'minimumReadyPeers' | - 'LABEL_LIST' | - 'noiseScale' | - 'clippingRadius' | - 'aggregator' - - const { - dataType, - scheme, - epochs, - // roundDuration, - validationSplit, - batchSize, - modelID, - preprocessingFunctions, - inputColumns, - outputColumns, - IMAGE_H, - IMAGE_W, - roundDuration, - decentralizedSecure, - maxShareValue, - minimumReadyPeers, - LABEL_LIST, - noiseScale, - clippingRadius, - aggregator - } = raw as Record - - if ( - typeof dataType !== 'string' || - typeof modelID !== 'string' || - typeof epochs !== 'number' || - typeof batchSize !== 'number' || - typeof roundDuration !== 'number' || - typeof validationSplit !== 'number' || - (noiseScale !== undefined && typeof noiseScale !== 'number') || - (clippingRadius !== undefined && typeof clippingRadius !== 'number') || - (decentralizedSecure !== undefined && typeof decentralizedSecure !== 'boolean') || - (maxShareValue !== undefined && typeof maxShareValue !== 'number') || - (minimumReadyPeers !== undefined && typeof minimumReadyPeers !== 'number') || - (aggregator !== undefined && typeof aggregator !== 'number') - ) { - return false - } - - // interdepences on data type - if (dataType === 'image') { - if (typeof IMAGE_H !== 'number' || typeof IMAGE_W !== 'number') { - return false - } - } else if (dataType in ['text', 'tabular']) { - if (!(Array.isArray(inputColumns) && inputColumns.every((e) => typeof e === 'string'))) { - return false - } - if (!(Array.isArray(outputColumns) && outputColumns.every((e) => typeof e === 'string'))) { - return false - } - } - - // interdepences on scheme - switch (scheme) { - case 'decentralized': - break - case 'federated': - break - case 'local': - break - } - - if ( - LABEL_LIST !== undefined && !( - Array.isArray(LABEL_LIST) && LABEL_LIST.every((e) => typeof e === 'string') - ) - ) { - return false - } - - if ( - preprocessingFunctions !== undefined && !(Array.isArray(preprocessingFunctions)) - ) { - return false - } - - return true -} - export interface TrainingInformation { // modelID: unique ID for the model modelID: string @@ -139,7 +29,7 @@ export interface TrainingInformation { // define ['dogs', 'cats']. LABEL_LIST?: string[] // scheme: Distributed training scheme, i.e. Federated and Decentralized - scheme: string + scheme: 'decentralized' | 'federated' | 'local' // noiseScale: Differential Privacy (DP): Affects the variance of the Gaussian noise added to the models / model updates. // Number or undefined. If undefined, then no noise will be added. noiseScale?: number @@ -167,3 +57,116 @@ export interface TrainingInformation { // default is 'average', other options include for instance 'bandit' aggregator?: AggregatorChoice } + +function isStringArray(raw: unknown): raw is string[] { + if (!Array.isArray(raw) || raw.some((e) => typeof e !== 'string')) { + return false + } + + const _: string[] = raw + return true +} + +export function isTrainingInformation (raw: unknown): raw is TrainingInformation { + if (typeof raw !== 'object' || raw === null) { + return false + } + + const { + IMAGE_H, + IMAGE_W, + LABEL_LIST, + aggregator, + batchSize, + byzantineRobustAggregator, + clippingRadius, + dataType, + decentralizedSecure, + epochs, + inputColumns, + maxShareValue, + minimumReadyPeers, + modelID, + noiseScale, + outputColumns, + preprocessingFunctions, + roundDuration, + scheme, + tauPercentile, + validationSplit, + }: Partial> = raw + + if ( + typeof dataType !== 'string' || + typeof modelID !== 'string' || + typeof epochs !== 'number' || + typeof batchSize !== 'number' || + typeof roundDuration !== 'number' || + typeof validationSplit !== 'number' || + (aggregator !== undefined && typeof aggregator !== 'number') || + (clippingRadius !== undefined && typeof clippingRadius !== 'number') || + (decentralizedSecure !== undefined && typeof decentralizedSecure !== 'boolean') || + (byzantineRobustAggregator !== undefined && typeof byzantineRobustAggregator !== 'boolean') || + (maxShareValue !== undefined && typeof maxShareValue !== 'number') || + (minimumReadyPeers !== undefined && typeof minimumReadyPeers !== 'number') || + (noiseScale !== undefined && typeof noiseScale !== 'number') || + (tauPercentile !== undefined && typeof tauPercentile !== 'number') || + (IMAGE_H !== undefined && typeof IMAGE_H !== 'number') || + (IMAGE_W !== undefined && typeof IMAGE_W !== 'number') || + (LABEL_LIST !== undefined && !isStringArray(LABEL_LIST)) || + (inputColumns !== undefined && !isStringArray(inputColumns)) || + (outputColumns !== undefined && !isStringArray(outputColumns)) || + (preprocessingFunctions !== undefined && !Array.isArray(preprocessingFunctions)) + ) { + return false + } + + // interdepences on data type + if (dataType === 'image') { + if (typeof IMAGE_H !== 'number' || typeof IMAGE_W !== 'number') { + return false + } + } else if (dataType in ['text', 'tabular']) { + if (!(Array.isArray(inputColumns) && inputColumns.every((e) => typeof e === 'string'))) { + return false + } + if (!(Array.isArray(outputColumns) && outputColumns.every((e) => typeof e === 'string'))) { + return false + } + } + + switch (scheme) { + case 'decentralized': break + case 'federated': break + case 'local': break + default: return false + } + + const repack = { + IMAGE_W, + IMAGE_H, + LABEL_LIST, + aggregator, + batchSize, + byzantineRobustAggregator, + clippingRadius, + dataType, + decentralizedSecure, + epochs, + inputColumns, + maxShareValue, + minimumReadyPeers, + modelID, + noiseScale, + outputColumns, + preprocessingFunctions, + roundDuration, + scheme, + tauPercentile, + validationSplit, + } + const _correct: TrainingInformation = repack + const _total: Record = repack + + return true +} diff --git a/discojs/discojs-core/src/training/disco.ts b/discojs/discojs-core/src/training/disco.ts index cb358add3..c31eb3c65 100644 --- a/discojs/discojs-core/src/training/disco.ts +++ b/discojs/discojs-core/src/training/disco.ts @@ -4,9 +4,9 @@ import { type Logger, type Task, type TrainingInformant, informant as informants, - TrainingSchemes, type Memory, EmptyMemory, - ConsoleLogger + ConsoleLogger, + type TrainingInformation } from '..' import { type Trainer } from './trainer/trainer' import { TrainerBuilder } from './trainer/trainer_builder' @@ -18,7 +18,7 @@ export interface DiscoOptions { client?: clients.Client aggregator?: Aggregator url?: string | URL - scheme?: TrainingSchemes + scheme?: TrainingInformation['scheme'] informant?: TrainingInformant logger?: Logger memory?: Memory @@ -41,7 +41,7 @@ export class Disco { options: DiscoOptions ) { if (options.scheme === undefined) { - options.scheme = TrainingSchemes[task.trainingInformation.scheme as keyof typeof TrainingSchemes] + options.scheme = task.trainingInformation.scheme } if (options.aggregator === undefined) { options.aggregator = new MeanAggregator() @@ -55,26 +55,26 @@ export class Disco { options.url = new URL(options.url) } switch (options.scheme) { - case TrainingSchemes.FEDERATED: + case 'federated': options.client = new clients.federated.FederatedClient(options.url, task, options.aggregator) break - case TrainingSchemes.DECENTRALIZED: + case 'decentralized': options.client = new clients.decentralized.DecentralizedClient(options.url, task, options.aggregator) break - default: + case 'local': options.client = new clients.Local(options.url, task, options.aggregator) break } } if (options.informant === undefined) { switch (options.scheme) { - case TrainingSchemes.FEDERATED: + case 'federated': options.informant = new informants.FederatedInformant(task) break - case TrainingSchemes.DECENTRALIZED: + case 'decentralized': options.informant = new informants.DecentralizedInformant(task) break - default: + case 'local': options.informant = new informants.LocalInformant(task) break } @@ -98,7 +98,7 @@ export class Disco { this.logger = options.logger const trainerBuilder = new TrainerBuilder(this.memory, this.task, options.informant) - this.trainer = trainerBuilder.build(this.client, options.scheme !== TrainingSchemes.LOCAL) + this.trainer = trainerBuilder.build(this.client, options.scheme !== 'local') } /** diff --git a/discojs/discojs-core/src/training/index.ts b/discojs/discojs-core/src/training/index.ts index 5e6485079..3dac39f48 100644 --- a/discojs/discojs-core/src/training/index.ts +++ b/discojs/discojs-core/src/training/index.ts @@ -1,2 +1 @@ export { Disco } from './disco' -export { TrainingSchemes } from './training_schemes' diff --git a/discojs/discojs-core/src/training/training_schemes.ts b/discojs/discojs-core/src/training/training_schemes.ts deleted file mode 100644 index 905957e15..000000000 --- a/discojs/discojs-core/src/training/training_schemes.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum TrainingSchemes { - LOCAL = 'local', - DECENTRALIZED = 'decentralized', - FEDERATED = 'federated' -} diff --git a/docs/examples/README.md b/docs/examples/README.md index 4e51f1e8c..211065fd5 100644 --- a/docs/examples/README.md +++ b/docs/examples/README.md @@ -21,7 +21,7 @@ npm run train # compiles TypeScript and runs training.ts As you can see in `training.ts` a client is represented by a `Disco` object: ```js -const disco = new Disco(task, { url, scheme: TrainingSchemes.FEDERATED }); +const disco = new Disco(task, { url, scheme: "federated" }); await disco.fit(dataset); // Start training on the dataset await disco.close(); ``` diff --git a/docs/examples/custom_task.ts b/docs/examples/custom_task.ts index 48abf0b10..070ab3261 100644 --- a/docs/examples/custom_task.ts +++ b/docs/examples/custom_task.ts @@ -25,7 +25,7 @@ const customTask: TaskProvider = { outputColumns: [ 'Output' ], - scheme: 'Federated', + scheme: 'federated', noiseScale: undefined, clippingRadius: undefined } diff --git a/docs/examples/training.ts b/docs/examples/training.ts index a415a3ef6..ca2f77d66 100644 --- a/docs/examples/training.ts +++ b/docs/examples/training.ts @@ -1,7 +1,7 @@ import fs from 'node:fs/promises' import type { data, Task } from '@epfml/discojs-core' -import { Disco, fetchTasks, TrainingSchemes, defaultTasks } from '@epfml/discojs-core' +import { Disco, fetchTasks, defaultTasks } from '@epfml/discojs-core' import { NodeImageLoader, NodeTabularLoader } from '@epfml/discojs-node' import { startServer } from '@epfml/disco-server' @@ -11,7 +11,7 @@ import { startServer } from '@epfml/disco-server' */ async function runUser (url: URL, task: Task, dataset: data.DataSplit): Promise { // Create Disco object associated with the server url, the training scheme - const disco = new Disco(task, { url, scheme: TrainingSchemes.FEDERATED }) + const disco = new Disco(task, { url, scheme: 'federated' }) await disco.fit(dataset) // Start training on the dataset // Stop training and disconnect from the remote server diff --git a/server/src/tasks.ts b/server/src/tasks.ts index eeb009de3..8434bdce5 100644 --- a/server/src/tasks.ts +++ b/server/src/tasks.ts @@ -4,8 +4,8 @@ import fs from 'node:fs/promises' import tf from '@tensorflow/tfjs' import '@tensorflow/tfjs-node' -import type { Task, Path, Digest, TaskProvider } from '@epfml/discojs-core' -import { Model, isTaskProvider, defaultTasks, models, serialization } from '@epfml/discojs-core' +import { Task, Path, Digest, TaskProvider, isTask } from '@epfml/discojs-core' +import { Model, defaultTasks, models, serialization } from '@epfml/discojs-core' // default tasks and added ones // register 'taskAndModel' event to get tasks @@ -32,7 +32,7 @@ export class TasksAndModels { // Returns already saved model in priority, then the model from the task definition private async loadModelFromTask (task: Task | TaskProvider): Promise { - const discoTask = isTaskProvider(task) ? task.getTask() : task + const discoTask = isTask(task) ? task : task.getTask() let model: Model | undefined const modelPath = `./models/${discoTask.id}/` @@ -43,10 +43,10 @@ export class TasksAndModels { // unable to read file, continuing } - if (isTaskProvider(task)) { - model = await task.getModel() + if (isTask(task)) { + throw new Error('saved model not found and no way to get it') } else { - throw new Error('model not provided in task definition') + model = await task.getModel() } await fs.mkdir(modelPath, { recursive: true }) @@ -95,10 +95,10 @@ export class TasksAndModels { async addTaskAndModel (task: Task | TaskProvider, model?: Model | URL): Promise { let discoTask: Task - if (isTaskProvider(task)) { - discoTask = task.getTask() - } else { + if (isTask(task)) { discoTask = task + } else { + discoTask = task.getTask() } let tfModel: Model diff --git a/server/tests/e2e/federated.spec.ts b/server/tests/e2e/federated.spec.ts index bb6287e2a..c06045068 100644 --- a/server/tests/e2e/federated.spec.ts +++ b/server/tests/e2e/federated.spec.ts @@ -6,15 +6,13 @@ import { assert, expect } from 'chai' import type { WeightsContainer } from '@epfml/discojs-core' import { - Disco, TrainingSchemes, client as clients, data, + Disco, client as clients, data, aggregator as aggregators, informant, defaultTasks } from '@epfml/discojs-core' import { NodeImageLoader, NodeTabularLoader, NodeTextLoader } from '@epfml/discojs-node' import { startServer } from '../../src' -const SCHEME = TrainingSchemes.FEDERATED - describe('end-to-end federated', function () { this.timeout(100_000) @@ -34,7 +32,7 @@ describe('end-to-end federated', function () { const aggregator = new aggregators.MeanAggregator() const client = new clients.federated.FederatedClient(url, cifar10Task, aggregator) - const disco = new Disco(cifar10Task, { scheme: SCHEME, client }) + const disco = new Disco(cifar10Task, { scheme: 'federated', client }) await disco.fit(data) await disco.close() @@ -62,7 +60,7 @@ describe('end-to-end federated', function () { const aggregator = new aggregators.MeanAggregator() const client = new clients.federated.FederatedClient(url, titanicTask, aggregator) const trainingInformant = new informant.FederatedInformant(titanicTask, 10) - const disco = new Disco(titanicTask, { scheme: SCHEME, client, aggregator, informant: trainingInformant }) + const disco = new Disco(titanicTask, { scheme: 'federated', client, aggregator, informant: trainingInformant }) await disco.fit(data) await disco.close() @@ -92,7 +90,7 @@ describe('end-to-end federated', function () { const aggregator = new aggregators.MeanAggregator() const client = new clients.federated.FederatedClient(url, task, aggregator) const trainingInformant = new informant.FederatedInformant(task, 10) - const disco = new Disco(task, { scheme: SCHEME, client, aggregator, informant: trainingInformant }) + const disco = new Disco(task, { scheme: 'federated', client, aggregator, informant: trainingInformant }) await disco.fit(dataSplit) await disco.close() diff --git a/web-client/src/clients.ts b/web-client/src/clients.ts index 6e890cc78..b175429ba 100644 --- a/web-client/src/clients.ts +++ b/web-client/src/clients.ts @@ -1,18 +1,16 @@ -import { client as clients, aggregator as aggregators, Task, TrainingSchemes } from '@epfml/discojs-core' +import { client as clients, aggregator as aggregators, Task } from '@epfml/discojs-core' import { CONFIG } from './config' -export function getClient (trainingScheme: TrainingSchemes, task: Task): clients.Client { +export function getClient (trainingScheme: Required, task: Task): clients.Client { const aggregator = aggregators.getAggregator(task) switch (trainingScheme) { - case TrainingSchemes.DECENTRALIZED: + case 'decentralized': return new clients.decentralized.DecentralizedClient(CONFIG.serverUrl, task, aggregator) - case TrainingSchemes.FEDERATED: + case 'federated': return new clients.federated.FederatedClient(CONFIG.serverUrl, task, aggregator) - case TrainingSchemes.LOCAL: + case 'local': return new clients.Local(CONFIG.serverUrl, task, aggregator) - default: - throw new Error('unknown training scheme') } } diff --git a/web-client/src/components/training/ModelCaching.vue b/web-client/src/components/training/ModelCaching.vue index 7b7b03e16..12858b0b2 100644 --- a/web-client/src/components/training/ModelCaching.vue +++ b/web-client/src/components/training/ModelCaching.vue @@ -134,7 +134,7 @@ diff --git a/web-client/src/locales/content/default.json b/web-client/src/locales/content/default.json deleted file mode 100644 index 6424ff57e..000000000 --- a/web-client/src/locales/content/default.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "home": { - "title": { - "name": "Disco", - "start": "Distributed ", - "middle": "Collaborative ", - "end": "AI" - }, - "buildCard": [ - { - "header": { - "text": "Build AI with collaborators but", - "underlined": "without sharing any data" - }, - "items": [ - "Exchange models not data", - "Keep data at its source", - "choose either decentralised or federated training" - ] - } - ], - "taskCard": [ - { - "header": { - "text": "Create your", - "underlined": "own task" - }, - "items": [ - "Choose a model", - "Describe the task", - "Specify the desired training and evaluation parameters " - ] - } - ], - "startBuildingButtonText": "Start building", - "createTaskButtonText": "Create task" - }, - "information": { - "informationTitle": "Further Information", - "informationCard": [ - { - "title": "Goal:", - "text": "Disco enables collaborative and privacy-preserving training of machine learning models. Disco is an easy-to-use mobile app & web software, running directly in your browser." - }, - { - "title": "Key Question:", - "text": "Can we keep control over our own data, while still benefitting from joint collaborative training with other participants? - or - Can we train an ML model which is equally good as if all data were in one place, but while respecting privacy? Federated and decentralized learning make this possible." - }, - { - "title": "Federated learning:", - "text": "The key insight is to share weight updates instead of data - each user trains on their own device and periodically shares weight updates with a central server, while keeping data local at all times. The server will agreggate all these weights between participants, and send them back." - }, - { - "title": "Decentralized learning:", - "text": "Building upon the same principles as in federated learning, decentralized learning achieved allows collaboration and data privacy without the need for a central coordinator. Updates are shared purely via peer2peer communication. Disco puts users in control of the entire collaborative training process, without a central point of failure." - } - ], - "featuresTitle" : "Why use Disco?", - "featuresCard": [ - { - "title": "Supports arbitrary deep learning architectures", - "text": "Disco supports arbitrary deep learning tasks and model architectures, running on your device via TensorFlow.js" - }, - { - "title" :"Data and model privacy", - "text":"Data privacy by design - no data ever leaves any device. Models updates can be protected by encryption (secure multiparty computation), and by differential privacy" - }, - { - "title" :"Runs anywhere", - "text":"Disco runs in the browser, from any device equipped with a modern browser. For developers, we also offer a standalone node.js version, not needing any browser." - } - ], - "howToUseTitle": "How to use Disco?", - "howToUseCard": [ - { - "title": "Step 1: Select a task", - "text": "- choose different tasks and data sets for training, ranging from tabular data to images, and from binary classification to class-wise prediction (or define your own task)." - }, - { - "title": "Step 2: Select data for the training process", - "text": "- choose the files that are used for the training process on your local devices. Those files will not be uploaded anywhere." - }, - { - "title": "Step 3: Neural network training", - "text": "- select between training alone and training collaboratively. Local training will fine tune the model with your local data and the resulting model will only be available to your device. Training collaboratively will allow communication between local devices during training so the local model updatess are aggregated into an improved shared model. After completing training, you can find training statistics on the model accuracy in the dashboard. For training collaboratively, details on the communication rounds will also appear on the board." - }, - { - "title": "Step 4: Save the model", - "text": "- click on the button to save the model for later." - }, - { - "title": "Step 5: Reuse the model", - "text": "- come back any time to reuse your local model and resume training or test it against other data." - } - ], - "federatedTitle": "Federated Learning", - "decentralisedTitle": "Decentralized Learning" - }, - "training": { - "trainingFrame": { - "dataExample": "Data Example", - "localTrainingButton": "Train Locally", - "collaborativeTrainingButton": "Train Collaboratively", - "decentralizedTrainingButton": "Train Decentralized", - "federatedTrainingButton": "Train Federated", - "stopTrainingButton": "Stop Training", - "saveModel": { - "header": "Save the model", - "description": "If you are satisfied with the performance of the model, don't forget to save the model by clicking on the button below. The next time you will load the application, you will be able to use your saved model.", - "button": "Save my model" - }, - "testModel": { - "header": "Test the model", - "description": "If you are satisfied with the performance of the model, don't forget to save the model by clicking on the button below. The next time you will load the application, you will be able to use your saved model.", - "button": "Test my model" - } - }, - "trainingInformationFrame": { - "accuracyCharts": { - "validationAccuracyHeader": "Validation Accuracy of the Model", - "validationAccuracyText": "% of validation accuracy", - "trainingAccuracyHeader": "Training Accuracy of the Model", - "trainingAccuracyText": "% of training accuracy" - }, - "trainingInformations": { - "trainingConsoleHeader": "Peer Training Console", - "distributed": { - "averaging": "# of Averaging", - "waitingTime": "Waiting Time", - "weightRequests": "# Weight Requests", - "peopleHelped": "# of People Helped" - }, - "federated": { - "round": "Current Round", - "numberParticipants": "Current # of participants", - "averageParticipants": "Average # of Participants" - } - } - } - } - } diff --git a/web-client/src/locales/english.ts b/web-client/src/locales/english.ts new file mode 100644 index 000000000..ed0e062b7 --- /dev/null +++ b/web-client/src/locales/english.ts @@ -0,0 +1,141 @@ +export default { + home: { + title: { + name: 'Disco', + start: 'Distributed ', + middle: 'Collaborative ', + end: 'AI' + }, + buildCard: [ + { + header: { + text: 'Build AI with collaborators but', + underlined: 'without sharing any data' + }, + items: [ + "Exchange models not data", + 'Keep data at its source', + "choose either decentralised or federated training" + ] + } + ], + taskCard: [ + { + header: { + text: 'Create your', + underlined: 'own task' + }, + items: [ + 'Choose a model', + 'Describe the task', + 'Specify the desired training and evaluation parameters ' + ] + } + ], + startBuildingButtonText: 'Start building', + createTaskButtonText: 'Create task' + }, + information: { + informationTitle: 'Further Information', + informationCard: [ + { + title: 'Goal:', + text: 'Disco enables collaborative and privacy-preserving training of machine learning models. Disco is an easy-to-use mobile app & web software, running directly in your browser.' + }, + { + title: 'Key Question:', + text: 'Can we keep control over our own data, while still benefitting from joint collaborative training with other participants? - or - Can we train an ML model which is equally good as if all data were in one place, but while respecting privacy? Federated and decentralized learning make this possible.' + }, + { + title: 'Federated learning:', + text: 'The key insight is to share weight updates instead of data - each user trains on their own device and periodically shares weight updates with a central server, while keeping data local at all times. The server will agreggate all these weights between participants, and send them back.' + }, + { + title: 'Decentralized learning:', + text: 'Building upon the same principles as in federated learning, decentralized learning achieved allows collaboration and data privacy without the need for a central coordinator. Updates are shared purely via peer2peer communication. Disco puts users in control of the entire collaborative training process, without a central point of failure.' + } + ], + featuresTitle: 'Why use Disco?', + featuresCard: [ + { + title: 'Supports arbitrary deep learning architectures', + text: 'Disco supports arbitrary deep learning tasks and model architectures, running on your device via TensorFlow.js' + }, + { + title: 'Data and model privacy', + text: 'Data privacy by design - no data ever leaves any device. Models updates can be protected by encryption (secure multiparty computation), and by differential privacy' + }, + { + title: 'Runs anywhere', + text: 'Disco runs in the browser, from any device equipped with a modern browser. For developers, we also offer a standalone node.js version, not needing any browser.' + } + ], + howToUseTitle: 'How to use Disco?', + howToUseCard: [ + { + title: 'Step 1: Select a task', + text: '- choose different tasks and data sets for training, ranging from tabular data to images, and from binary classification to class-wise prediction (or define your own task).' + }, + { + title: 'Step 2: Select data for the training process', + text: '- choose the files that are used for the training process on your local devices. Those files will not be uploaded anywhere.' + }, + { + title: 'Step 3: Neural network training', + text: '- select between training alone and training collaboratively. Local training will fine tune the model with your local data and the resulting model will only be available to your device. Training collaboratively will allow communication between local devices during training so the local model updatess are aggregated into an improved shared model. After completing training, you can find training statistics on the model accuracy in the dashboard. For training collaboratively, details on the communication rounds will also appear on the board.' + }, + { + title: 'Step 4: Save the model', + text: '- click on the button to save the model for later.' + }, + { + title: 'Step 5: Reuse the model', + text: '- come back any time to reuse your local model and resume training or test it against other data.' + } + ], + federatedTitle: 'Federated Learning', + decentralisedTitle: 'Decentralized Learning' + }, + training: { + trainingFrame: { + dataExample: 'Data Example', + localTrainingButton: 'Train Locally', + collaborativeTrainingButton: 'Train Collaboratively', + decentralizedTrainingButton: 'Train Decentralized', + federatedTrainingButton: 'Train Federated', + stopTrainingButton: 'Stop Training', + saveModel: { + header: 'Save the model', + description: "If you are satisfied with the performance of the model, don't forget to save the model by clicking on the button below. The next time you will load the application, you will be able to use your saved model.", + button: 'Save my model' + }, + testModel: { + header: 'Test the model', + description: "If you are satisfied with the performance of the model, don't forget to save the model by clicking on the button below. The next time you will load the application, you will be able to use your saved model.", + button: 'Test my model' + } + }, + trainingInformationFrame: { + accuracyCharts: { + validationAccuracyHeader: 'Validation Accuracy of the Model', + validationAccuracyText: '% of validation accuracy', + trainingAccuracyHeader: 'Training Accuracy of the Model', + trainingAccuracyText: '% of training accuracy' + }, + trainingInformations: { + trainingConsoleHeader: 'Peer Training Console', + distributed: { + averaging: '# of Averaging', + waitingTime: 'Waiting Time', + weightRequests: '# Weight Requests', + peopleHelped: '# of People Helped' + }, + federated: { + round: 'Current Round', + numberParticipants: 'Current # of participants', + averageParticipants: 'Average # of Participants' + } + } + } + } +} diff --git a/web-client/src/locales/i18n.ts b/web-client/src/locales/i18n.ts index 72effb934..f759dce3c 100644 --- a/web-client/src/locales/i18n.ts +++ b/web-client/src/locales/i18n.ts @@ -1,25 +1,10 @@ -// load plaform strings import { createI18n } from 'vue-i18n' -import { List } from 'immutable' -import config from './locales.config.js' - -interface Locale { - name: string - file: string -} - -const getJSON = (name: string) => require(`./content/${name}`) -const locales = Object.fromEntries( - List(config.locales as Locale[]) - .map((locale) => [locale.name, getJSON(locale.file)])) -locales[config.default.name] = getJSON(config.default.file) +import english from './english' export function createCustomI18n () { return createI18n({ - locale: config.locale, // set locale - fallbackLocale: config.default.name, // common variables - messages: locales, - silentFallbackWarn: true, // To suppress the first warning(Not found key...) - silentTranslationWarn: true // need both silet warn surpressing flags. + locale: 'en', + fallbackLocale: 'en', + messages: { en: english } }) } diff --git a/web-client/src/locales/locales.config.js b/web-client/src/locales/locales.config.js deleted file mode 100644 index 31ac5047d..000000000 --- a/web-client/src/locales/locales.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - locales: [ - { - name: 'english', - file: 'default.json' - } - ], - default: { - name: 'default', - file: 'default.json' - }, - locale: 'english' -} diff --git a/web-client/src/main.ts b/web-client/src/main.ts index 9f7008eb5..0af5b6a6f 100644 --- a/web-client/src/main.ts +++ b/web-client/src/main.ts @@ -33,11 +33,10 @@ app.config.errorHandler = (err, instance, info) => { } const pinia = createPinia() -const i18n = createCustomI18n() app .use(pinia) .use(VueApexCharts) - .use(i18n) + .use(createCustomI18n()) .use(Toaster, { duration: 5000 }) .use(router) .mount('#app') From 2c75b04fecf0912b7ca364012350adbcd1a4debe Mon Sep 17 00:00:00 2001 From: tharvik Date: Fri, 15 Mar 2024 14:43:32 +0100 Subject: [PATCH 16/37] *: upgrade to ES2022 modules Closes: #632 --- Dockerfile | 2 +- cli/package.json | 1 + cli/src/args.ts | 1 + cli/src/cli.ts | 6 +-- cli/src/index.ts | 1 - cli/tsconfig.json | 18 +------- discojs/discojs-core/.mocharc.json | 1 + discojs/discojs-core/package.json | 1 + discojs/discojs-core/src/aggregator/base.ts | 4 +- discojs/discojs-core/src/aggregator/get.ts | 3 +- discojs/discojs-core/src/aggregator/index.ts | 14 +++---- .../discojs-core/src/aggregator/mean.spec.ts | 6 +-- discojs/discojs-core/src/aggregator/mean.ts | 6 +-- discojs/discojs-core/src/aggregator/robust.ts | 4 +- .../src/aggregator/secure.spec.ts | 2 +- discojs/discojs-core/src/aggregator/secure.ts | 17 ++++---- discojs/discojs-core/src/async_informant.ts | 2 +- discojs/discojs-core/src/client/base.ts | 10 ++--- .../src/client/decentralized/base.ts | 14 +++---- .../src/client/decentralized/index.ts | 4 +- .../src/client/decentralized/messages.ts | 8 ++-- .../src/client/decentralized/peer.spec.ts | 6 +-- .../src/client/decentralized/peer.ts | 24 +++++++---- .../client/decentralized/peer_pool.spec.ts | 10 ++--- .../src/client/decentralized/peer_pool.ts | 15 ++++--- .../src/client/event_connection.ts | 12 +++--- .../discojs-core/src/client/federated/base.ts | 12 +++--- .../src/client/federated/index.ts | 4 +- .../src/client/federated/messages.ts | 6 +-- discojs/discojs-core/src/client/index.ts | 16 +++---- discojs/discojs-core/src/client/local.ts | 2 +- discojs/discojs-core/src/client/messages.ts | 6 +-- discojs/discojs-core/src/dataset/data/data.ts | 7 ++-- .../src/dataset/data/data_split.ts | 2 +- .../src/dataset/data/image_data.spec.ts | 6 +-- .../src/dataset/data/image_data.ts | 9 ++-- .../discojs-core/src/dataset/data/index.ts | 12 +++--- .../src/dataset/data/preprocessing/base.ts | 8 ++-- .../data/preprocessing/image_preprocessing.ts | 6 +-- .../src/dataset/data/preprocessing/index.ts | 8 ++-- .../preprocessing/tabular_preprocessing.ts | 4 +- .../data/preprocessing/text_preprocessing.ts | 6 +-- .../src/dataset/data/tabular_data.spec.ts | 6 +-- .../src/dataset/data/tabular_data.ts | 9 ++-- .../src/dataset/data/text_data.ts | 9 ++-- .../src/dataset/data_loader/data_loader.ts | 2 +- .../src/dataset/data_loader/image_loader.ts | 12 +++--- .../src/dataset/data_loader/index.ts | 10 ++--- .../src/dataset/data_loader/tabular_loader.ts | 11 ++--- .../src/dataset/data_loader/text_loader.ts | 8 ++-- .../src/dataset/dataset_builder.ts | 7 ++-- discojs/discojs-core/src/dataset/index.ts | 11 ++--- .../discojs-core/src/default_tasks/cifar10.ts | 6 +-- .../discojs-core/src/default_tasks/geotags.ts | 8 ++-- .../discojs-core/src/default_tasks/index.ts | 16 +++---- .../src/default_tasks/lus_covid.ts | 6 +-- .../discojs-core/src/default_tasks/mnist.ts | 6 +-- .../src/default_tasks/simple_face.ts | 6 +-- .../src/default_tasks/skin_mnist.ts | 6 +-- .../discojs-core/src/default_tasks/titanic.ts | 6 +-- .../src/default_tasks/wikitext.ts | 4 +- discojs/discojs-core/src/index.ts | 36 ++++++++-------- discojs/discojs-core/src/informant/index.ts | 6 +-- .../src/informant/training_informant/base.ts | 5 ++- .../training_informant/decentralized.ts | 2 +- .../informant/training_informant/federated.ts | 2 +- .../src/informant/training_informant/index.ts | 8 ++-- .../src/informant/training_informant/local.ts | 5 ++- .../src/logging/console_logger.ts | 2 +- discojs/discojs-core/src/logging/index.ts | 6 +-- .../src/logging/trainer_logger.ts | 4 +- discojs/discojs-core/src/memory/base.ts | 4 +- discojs/discojs-core/src/memory/empty.ts | 6 +-- discojs/discojs-core/src/memory/index.ts | 6 +-- .../discojs-core/src/models/gpt/evaluate.ts | 2 +- discojs/discojs-core/src/models/gpt/index.ts | 14 +++---- discojs/discojs-core/src/models/gpt/model.ts | 42 +++++++++---------- .../discojs-core/src/models/gpt/optimizers.ts | 4 +- discojs/discojs-core/src/models/gpt/train.ts | 12 +++--- discojs/discojs-core/src/models/index.ts | 6 +-- discojs/discojs-core/src/models/model.ts | 7 ++-- discojs/discojs-core/src/models/tfjs.ts | 12 +++--- discojs/discojs-core/src/privacy.ts | 4 +- .../discojs-core/src/serialization/index.ts | 4 +- .../src/serialization/model.spec.ts | 6 +-- .../discojs-core/src/serialization/model.ts | 4 +- .../src/serialization/weights.spec.ts | 2 +- .../discojs-core/src/serialization/weights.ts | 4 +- .../src/task/display_information.ts | 6 +-- discojs/discojs-core/src/task/index.ts | 14 +++---- discojs/discojs-core/src/task/task.ts | 6 +-- discojs/discojs-core/src/task/task_handler.ts | 8 ++-- .../discojs-core/src/task/task_provider.ts | 2 +- .../src/task/training_information.ts | 4 +- discojs/discojs-core/src/training/disco.ts | 22 ++++------ discojs/discojs-core/src/training/index.ts | 2 +- .../training/trainer/distributed_trainer.ts | 6 +-- .../src/training/trainer/local_trainer.ts | 2 +- .../training/trainer/round_tracker.spec.ts | 2 +- .../src/training/trainer/trainer.ts | 10 ++--- .../src/training/trainer/trainer_builder.ts | 10 ++--- discojs/discojs-core/src/types.ts | 4 +- discojs/discojs-core/src/validation/index.ts | 2 +- .../discojs-core/src/validation/validator.ts | 6 +-- .../src/weights/aggregation.spec.ts | 2 +- .../discojs-core/src/weights/aggregation.ts | 6 +-- discojs/discojs-core/src/weights/index.ts | 4 +- .../src/weights/weights_container.ts | 2 +- discojs/discojs-core/tsconfig.json | 4 +- discojs/discojs-node/.mocharc.json | 1 + discojs/discojs-node/package.json | 1 + .../src/data/image_loader.spec.ts | 4 +- discojs/discojs-node/src/data/index.ts | 6 +-- .../src/data/tabular_loader.spec.ts | 4 +- discojs/discojs-node/src/index.ts | 2 +- discojs/discojs-node/tsconfig.json | 6 +-- discojs/discojs-web/.mocharc.json | 1 + discojs/discojs-web/package.json | 1 + discojs/discojs-web/src/data/image_loader.ts | 2 +- discojs/discojs-web/src/data/index.ts | 6 +-- .../discojs-web/src/data/tabular_loader.ts | 2 +- discojs/discojs-web/src/data/text_loader.ts | 2 +- discojs/discojs-web/src/index.ts | 4 +- discojs/discojs-web/src/memory/index.ts | 2 +- discojs/discojs-web/tsconfig.json | 4 +- discojs/tsconfig.base.json | 20 --------- docs/examples/package.json | 1 + docs/examples/tsconfig.json | 13 ++---- eslint.config.js | 18 ++++++++ isomorphic-wrtc/browser.js | 26 +----------- isomorphic-wrtc/node.js | 5 +-- isomorphic-wrtc/package.json | 1 + server/.mocharc.json | 1 + server/package.json | 1 + server/src/config.ts | 2 +- server/src/get_server.ts | 6 +-- server/src/index.ts | 4 +- server/src/router/decentralized/index.ts | 2 +- server/src/router/decentralized/server.ts | 2 +- server/src/router/federated/index.ts | 2 +- server/src/router/federated/server.ts | 2 +- server/src/router/index.ts | 2 +- server/src/router/router.ts | 10 ++--- server/src/router/server.ts | 2 +- server/src/router/tasks.ts | 4 +- server/src/run_server.ts | 2 +- server/src/utils.ts | 2 +- server/tests/client/decentralized.spec.ts | 2 +- server/tests/client/federated.spec.ts | 2 +- server/tests/e2e/decentralized.spec.ts | 2 +- server/tests/e2e/federated.spec.ts | 2 +- server/tsconfig.json | 16 +------ tsconfig.base.json | 15 +++++++ tsconfig.eslint.json | 15 +------ 154 files changed, 496 insertions(+), 528 deletions(-) delete mode 100644 cli/src/index.ts delete mode 100644 discojs/tsconfig.base.json create mode 100644 eslint.config.js create mode 100644 tsconfig.base.json diff --git a/Dockerfile b/Dockerfile index acdf05df8..6192fb4bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ COPY server/package.json server/ RUN npm ci COPY isomorphic-wrtc/ isomorphic-wrtc/ -COPY discojs/tsconfig.base.json discojs/ +COPY tsconfig.base.json . COPY discojs/discojs-core/ discojs/discojs-core/ COPY discojs/discojs-node/ discojs/discojs-node/ RUN npm run build --workspace=@epfml/discojs-core --workspace=@epfml/discojs-node diff --git a/cli/package.json b/cli/package.json index 2a05a9eee..d8f3f9079 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,7 @@ { "name": "@epfml/disco-cli", "private": true, + "type": "module", "main": "dist/cli.js", "scripts": { "watch": "nodemon --ext ts --ignore dist --watch ../discojs/discojs-node/dist --watch ../server/dist --watch . --exec npm run", diff --git a/cli/src/args.ts b/cli/src/args.ts index d49f4bff7..990143e31 100644 --- a/cli/src/args.ts +++ b/cli/src/args.ts @@ -1,5 +1,6 @@ import { parse } from 'ts-command-line-args' import { Map } from 'immutable' + import type { Task } from '@epfml/discojs-core' import { defaultTasks } from '@epfml/discojs-core' diff --git a/cli/src/cli.ts b/cli/src/cli.ts index 421aeb435..78dca15ed 100644 --- a/cli/src/cli.ts +++ b/cli/src/cli.ts @@ -4,9 +4,9 @@ import type { TrainerLog, data, Task } from '@epfml/discojs-core' import { Disco, aggregator as aggregators, client as clients } from '@epfml/discojs-core' import { startServer } from '@epfml/disco-server' -import { saveLog } from './utils' -import { getTaskData } from './data' -import { args } from './args' +import { saveLog } from './utils.js' +import { getTaskData } from './data.js' +import { args } from './args.js' async function runUser (task: Task, url: URL, data: data.DataSplit): Promise { const client = new clients.federated.FederatedClient(url, task, new aggregators.MeanAggregator()) diff --git a/cli/src/index.ts b/cli/src/index.ts deleted file mode 100644 index 9c56149ef..000000000 --- a/cli/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './utils' diff --git a/cli/tsconfig.json b/cli/tsconfig.json index cc7ecbe29..02b0fb5c5 100644 --- a/cli/tsconfig.json +++ b/cli/tsconfig.json @@ -1,19 +1,5 @@ { - "compilerOptions": { - "target": "ES5", - "lib": ["ES5"], - - "strict": true, - - "esModuleInterop": true, - "skipLibCheck": true, - "moduleResolution": "node", - "downlevelIteration": true, // needed by diff --git a/discojs/discojs-core/src/aggregator/mean.spec.ts b/discojs/discojs-core/src/aggregator/mean.spec.ts index 31905b233..7906afe36 100644 --- a/discojs/discojs-core/src/aggregator/mean.spec.ts +++ b/discojs/discojs-core/src/aggregator/mean.spec.ts @@ -1,9 +1,9 @@ import { assert, expect } from 'chai' import type { Map } from 'immutable' -import type { client, Model } from '..' -import { aggregator, defaultTasks } from '..' -import { AggregationStep } from './base' +import type { client, Model } from '../index.js' +import { aggregator, defaultTasks } from '../index.js' +import { AggregationStep } from './base.js' const model = defaultTasks.titanic.getModel() const id = 'a' diff --git a/discojs/discojs-core/src/aggregator/mean.ts b/discojs/discojs-core/src/aggregator/mean.ts index 797759259..13b04272c 100644 --- a/discojs/discojs-core/src/aggregator/mean.ts +++ b/discojs/discojs-core/src/aggregator/mean.ts @@ -1,8 +1,8 @@ import type { Map } from 'immutable' -import { AggregationStep, Base as Aggregator } from './base' -import type { Model, WeightsContainer, client } from '..' -import { aggregation } from '..' +import { AggregationStep, Base as Aggregator } from './base.js' +import type { Model, WeightsContainer, client } from '../index.js' +import { aggregation } from '../index.js' /** * Mean aggregator whose aggregation step consists in computing the mean of the received weights. diff --git a/discojs/discojs-core/src/aggregator/robust.ts b/discojs/discojs-core/src/aggregator/robust.ts index a68e6f436..1a5aab72d 100644 --- a/discojs/discojs-core/src/aggregator/robust.ts +++ b/discojs/discojs-core/src/aggregator/robust.ts @@ -1,5 +1,5 @@ -import { Base as Aggregator } from './base' -import type { client, Model, WeightsContainer } from '..' +import { Base as Aggregator } from './base.js' +import type { client, Model, WeightsContainer } from '../index.js' import type { Map } from 'immutable' diff --git a/discojs/discojs-core/src/aggregator/secure.spec.ts b/discojs/discojs-core/src/aggregator/secure.spec.ts index 0437b3794..3d3ae66c1 100644 --- a/discojs/discojs-core/src/aggregator/secure.spec.ts +++ b/discojs/discojs-core/src/aggregator/secure.spec.ts @@ -1,7 +1,7 @@ import { List, Set, Range } from 'immutable' import { assert } from 'chai' -import { aggregator as aggregators, aggregation, WeightsContainer } from '@epfml/discojs-core' +import { aggregator as aggregators, aggregation, WeightsContainer } from '../index.js' describe('secret shares test', function () { const epsilon = 1e-4 diff --git a/discojs/discojs-core/src/aggregator/secure.ts b/discojs/discojs-core/src/aggregator/secure.ts index 7eb286a52..4632cba43 100644 --- a/discojs/discojs-core/src/aggregator/secure.ts +++ b/discojs/discojs-core/src/aggregator/secure.ts @@ -1,10 +1,9 @@ -import * as crypto from 'crypto' import { Map, List, Range } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { AggregationStep, Base as Aggregator } from './base' -import type { Model, WeightsContainer, client } from '..' -import { aggregation } from '..' +import { AggregationStep, Base as Aggregator } from './base.js' +import type { Model, WeightsContainer, client } from '../index.js' +import { aggregation } from '../index.js' /** * Aggregator implementing secure multi-party computation for decentralized learning. @@ -14,8 +13,6 @@ import { aggregation } from '..' * Finally, nodes are able to average the received partial sums to establish the aggregation result. */ export class SecureAggregator extends Aggregator { - public static readonly MAX_SEED: number = 2 ** 47 - constructor ( model?: Model, private readonly maxShareValue = 100 @@ -93,7 +90,11 @@ export class SecureAggregator extends Aggregator { * a uniform distribution between (-maxShareValue, maxShareValue). */ public generateRandomShare (secret: WeightsContainer): WeightsContainer { - const seed = crypto.randomInt(SecureAggregator.MAX_SEED) + const MAX_SEED_BITS = 47 + + const random = crypto.getRandomValues(new BigInt64Array(1))[0] + const seed = Number(BigInt.asUintN(MAX_SEED_BITS, random)) + return secret.map((t) => tf.randomUniform(t.shape, -this.maxShareValue, this.maxShareValue, 'float32', seed)) } diff --git a/discojs/discojs-core/src/async_informant.ts b/discojs/discojs-core/src/async_informant.ts index 530fc7d60..f5feeee4c 100644 --- a/discojs/discojs-core/src/async_informant.ts +++ b/discojs/discojs-core/src/async_informant.ts @@ -1,4 +1,4 @@ -import type { AggregatorBase } from './aggregator' +import type { AggregatorBase } from './aggregator/index.js' export class AsyncInformant { private _round = 0 diff --git a/discojs/discojs-core/src/client/base.ts b/discojs/discojs-core/src/client/base.ts index 89dd6854d..459c2e728 100644 --- a/discojs/discojs-core/src/client/base.ts +++ b/discojs/discojs-core/src/client/base.ts @@ -1,11 +1,11 @@ import axios from 'axios' import type { Set } from 'immutable' -import type { Model, Task, TrainingInformant, WeightsContainer } from '..' -import { serialization } from '..' -import type { NodeID } from './types' -import type { EventConnection } from './event_connection' -import type { Aggregator } from '../aggregator' +import type { Model, Task, TrainingInformant, WeightsContainer } from '../index.js' +import { serialization } from '../index.js' +import type { NodeID } from './types.js' +import type { EventConnection } from './event_connection.js' +import type { Aggregator } from '../aggregator/index.js' /** * Main, abstract, class representing a Disco client in a network, which handles diff --git a/discojs/discojs-core/src/client/decentralized/base.ts b/discojs/discojs-core/src/client/decentralized/base.ts index b5dee6712..2fbed69ef 100644 --- a/discojs/discojs-core/src/client/decentralized/base.ts +++ b/discojs/discojs-core/src/client/decentralized/base.ts @@ -1,12 +1,12 @@ import { Map, Set } from 'immutable' -import { type TrainingInformant, type WeightsContainer, serialization } from '../..' -import { Client, type NodeID } from '..' -import { type, type ClientConnected } from '../messages' -import { timeout } from '../utils' -import { type EventConnection, WebSocketServer, waitMessage, type PeerConnection, waitMessageWithTimeout } from '../event_connection' -import { PeerPool } from './peer_pool' -import * as messages from './messages' +import { type TrainingInformant, type WeightsContainer, serialization } from '../../index.js' +import { Client, type NodeID } from '../index.js' +import { type, type ClientConnected } from '../messages.js' +import { timeout } from '../utils.js' +import { type EventConnection, WebSocketServer, waitMessage, type PeerConnection, waitMessageWithTimeout } from '../event_connection.js' +import { PeerPool } from './peer_pool.js' +import * as messages from './messages.js' /** * Represents a decentralized client in a network of peers. Peers coordinate each other with the diff --git a/discojs/discojs-core/src/client/decentralized/index.ts b/discojs/discojs-core/src/client/decentralized/index.ts index e5172c636..28595d303 100644 --- a/discojs/discojs-core/src/client/decentralized/index.ts +++ b/discojs/discojs-core/src/client/decentralized/index.ts @@ -1,2 +1,2 @@ -export { Base as DecentralizedClient } from './base' -export * as messages from './messages' +export { Base as DecentralizedClient } from './base.js' +export * as messages from './messages.js' diff --git a/discojs/discojs-core/src/client/decentralized/messages.ts b/discojs/discojs-core/src/client/decentralized/messages.ts index d9f844796..93ffafb68 100644 --- a/discojs/discojs-core/src/client/decentralized/messages.ts +++ b/discojs/discojs-core/src/client/decentralized/messages.ts @@ -1,7 +1,7 @@ -import { weights } from '../../serialization' -import { type SignalData } from './peer' -import { isNodeID, type NodeID } from '../types' -import { type, type ClientConnected, type AssignNodeID, hasMessageType } from '../messages' +import { weights } from '../../serialization/index.js' +import { type SignalData } from './peer.js' +import { isNodeID, type NodeID } from '../types.js' +import { type, type ClientConnected, type AssignNodeID, hasMessageType } from '../messages.js' /// Phase 0 communication (between server and peers) diff --git a/discojs/discojs-core/src/client/decentralized/peer.spec.ts b/discojs/discojs-core/src/client/decentralized/peer.spec.ts index 3788b12e7..68659423e 100644 --- a/discojs/discojs-core/src/client/decentralized/peer.spec.ts +++ b/discojs/discojs-core/src/client/decentralized/peer.spec.ts @@ -1,15 +1,15 @@ import { assert } from 'chai' import { List, Range, Set } from 'immutable' -import { Peer } from './peer' +import { Peer } from './peer.js' describe('peer', function () { let peer1: Peer let peer2: Peer beforeEach(async () => { - peer1 = new Peer('1') - peer2 = new Peer('2', true) + peer1 = await Peer.init('1') + peer2 = await Peer.init('2', true) const peers = Set.of(peer1, peer2) peer1.on('signal', (signal) => { peer2.signal(signal) }) diff --git a/discojs/discojs-core/src/client/decentralized/peer.ts b/discojs/discojs-core/src/client/decentralized/peer.ts index c58c78024..4b338cbe1 100644 --- a/discojs/discojs-core/src/client/decentralized/peer.ts +++ b/discojs/discojs-core/src/client/decentralized/peer.ts @@ -1,9 +1,8 @@ -import { type NodeID } from '../types' - import { List, Map, Range, Seq } from 'immutable' -import wrtc from 'isomorphic-wrtc' import SimplePeer from 'simple-peer' +import type { NodeID } from '../types.js' + type MessageID = number type ChunkID = number @@ -19,7 +18,9 @@ const TICK = 10 // we can't use the definition in DOM as we're platform independent export type SignalData = | { type: 'answer' | 'offer' | 'pranswer' | 'rollback', sdp?: string } - | { type: 'transceiverRequest' | 'renegotiate' | 'candidate' } + | { type: 'transceiverRequest', transceiverRequest: { kind: string } } + | { type: 'renegotiate', renegotiate: true } + | { type: 'candidate', candidate: RTCIceCandidate } interface Events { 'close': () => void @@ -42,8 +43,6 @@ interface Events { // // see feross/simple-peer#393 for more info export class Peer { - public readonly id: NodeID - private readonly peer: SimplePeer.Instance private bufferSize?: number private sendCounter: MessageID = 0 @@ -54,9 +53,16 @@ export class Peer { chunks: Map }>() - constructor (id: NodeID, initiator: boolean = false) { - this.id = id - this.peer = new SimplePeer({ wrtc, initiator }) + private constructor ( + public readonly id: NodeID, + private readonly peer: SimplePeer.Instance + ) {} + + static async init (id: NodeID, initiator: boolean = false): Promise { + return new Peer( + id, + new SimplePeer({ wrtc: (await import('isomorphic-wrtc')).default, initiator }) + ) } send (msg: Buffer): void { diff --git a/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts b/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts index 6e383570c..23313672c 100644 --- a/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts +++ b/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts @@ -1,11 +1,11 @@ import { assert } from 'chai' import { Map, Range } from 'immutable' -import { type messages } from '.' -import { type } from '../messages' -import { type PeerConnection, type EventConnection } from '../event_connection' +import type { messages } from './index.js' +import { type } from '../messages.js' +import type { PeerConnection, EventConnection } from '../event_connection.js' -import { PeerPool } from './peer_pool' -import { type NodeID } from '../types' +import { PeerPool } from './peer_pool.js' +import type { NodeID } from '../types.js' describe('peer pool', function () { this.timeout(10_000) diff --git a/discojs/discojs-core/src/client/decentralized/peer_pool.ts b/discojs/discojs-core/src/client/decentralized/peer_pool.ts index 1c207a4ee..154dbc201 100644 --- a/discojs/discojs-core/src/client/decentralized/peer_pool.ts +++ b/discojs/discojs-core/src/client/decentralized/peer_pool.ts @@ -1,8 +1,8 @@ import { Map, type Set } from 'immutable' -import { Peer, type SignalData } from './peer' -import { type NodeID } from '../types' -import { PeerConnection, type EventConnection } from '../event_connection' +import { Peer, type SignalData } from './peer.js' +import { type NodeID } from '../types.js' +import { PeerConnection, type EventConnection } from '../event_connection.js' // TODO cleanup old peers @@ -43,9 +43,12 @@ export class PeerPool { console.info(`[${this.id}] is connecting peers:`, peersToConnect.toJS()) - const newPeers = Map(peersToConnect - .filter((id) => !this.peers.has(id)) - .map((id) => [id, new Peer(id, id < this.id)])) + const newPeers = Map(await Promise.all( + peersToConnect + .filter((id) => !this.peers.has(id)) + .map(async (id) => [id, await Peer.init(id, id < this.id)] as [string, Peer]) + .toArray() + )) console.info(`[${this.id}] asked to connect new peers:`, newPeers.keySeq().toJS()) const newPeersConnections = newPeers.map((peer, id) => new PeerConnection(this.id, peer, signallingServer)) diff --git a/discojs/discojs-core/src/client/event_connection.ts b/discojs/discojs-core/src/client/event_connection.ts index fedb50c85..177358f99 100644 --- a/discojs/discojs-core/src/client/event_connection.ts +++ b/discojs/discojs-core/src/client/event_connection.ts @@ -1,12 +1,12 @@ import isomorphic from 'isomorphic-ws' -import type { Peer, SignalData } from './decentralized/peer' -import { type NodeID } from './types' +import type { Peer, SignalData } from './decentralized/peer.js' +import { type NodeID } from './types.js' import msgpack from 'msgpack-lite' -import * as decentralizedMessages from './decentralized/messages' -import { type, type NarrowMessage, type Message } from './messages' -import { timeout } from './utils' +import * as decentralizedMessages from './decentralized/messages.js' +import { type, type NarrowMessage, type Message } from './messages.js' +import { timeout } from './utils.js' -import { EventEmitter } from '../utils/event_emitter' +import { EventEmitter } from '../utils/event_emitter.js' export interface EventConnection { on: (type: K, handler: (event: NarrowMessage) => void) => void diff --git a/discojs/discojs-core/src/client/federated/base.ts b/discojs/discojs-core/src/client/federated/base.ts index f6eb76872..83c9d6f5f 100644 --- a/discojs/discojs-core/src/client/federated/base.ts +++ b/discojs/discojs-core/src/client/federated/base.ts @@ -1,11 +1,11 @@ import { Map } from 'immutable' -import { serialization, type informant, type MetadataKey, type MetadataValue, type WeightsContainer, type TrainingInformant } from '../..' -import { type NodeID } from '../types' -import { Base as Client } from '../base' -import { type, type ClientConnected } from '../messages' -import { type EventConnection, waitMessageWithTimeout, WebSocketServer } from '../event_connection' -import * as messages from './messages' +import { serialization, type informant, type MetadataKey, type MetadataValue, type WeightsContainer, type TrainingInformant } from '../../index.js' +import { type NodeID } from '../types.js' +import { Base as Client } from '../base.js' +import { type, type ClientConnected } from '../messages.js' +import { type EventConnection, waitMessageWithTimeout, WebSocketServer } from '../event_connection.js' +import * as messages from './messages.js' /** * Client class that communicates with a centralized, federated server, when training diff --git a/discojs/discojs-core/src/client/federated/index.ts b/discojs/discojs-core/src/client/federated/index.ts index c45d13a07..6b2d1e5a8 100644 --- a/discojs/discojs-core/src/client/federated/index.ts +++ b/discojs/discojs-core/src/client/federated/index.ts @@ -1,2 +1,2 @@ -export { Base as FederatedClient } from './base' -export * as messages from './messages' +export { Base as FederatedClient } from './base.js' +export * as messages from './messages.js' diff --git a/discojs/discojs-core/src/client/federated/messages.ts b/discojs/discojs-core/src/client/federated/messages.ts index 9cc2b579b..71efc471c 100644 --- a/discojs/discojs-core/src/client/federated/messages.ts +++ b/discojs/discojs-core/src/client/federated/messages.ts @@ -1,7 +1,7 @@ -import { type client, type MetadataKey, type MetadataValue } from '../..' -import { type weights } from '../../serialization' +import { type client, type MetadataKey, type MetadataValue } from '../../index.js' +import { type weights } from '../../serialization/index.js' -import { type, hasMessageType, type AssignNodeID, type ClientConnected } from '../messages' +import { type, hasMessageType, type AssignNodeID, type ClientConnected } from '../messages.js' export type MessageFederated = ClientConnected | diff --git a/discojs/discojs-core/src/client/index.ts b/discojs/discojs-core/src/client/index.ts index c3b4f8940..c657140b7 100644 --- a/discojs/discojs-core/src/client/index.ts +++ b/discojs/discojs-core/src/client/index.ts @@ -1,11 +1,11 @@ -export { Base as Client } from './base' +export { Base as Client } from './base.js' -export * from './types' +export * from './types.js' -export * as aggregator from '../aggregator' -export * as decentralized from './decentralized' -export * as federated from './federated' -export * as messages from './messages' -export * as utils from './utils' +export * as aggregator from '../aggregator/index.js' +export * as decentralized from './decentralized/index.js' +export * as federated from './federated/index.js' +export * as messages from './messages.js' +export * as utils from './utils.js' -export { Local } from './local' +export { Local } from './local.js' diff --git a/discojs/discojs-core/src/client/local.ts b/discojs/discojs-core/src/client/local.ts index f36f9bde6..e3c9ab0f8 100644 --- a/discojs/discojs-core/src/client/local.ts +++ b/discojs/discojs-core/src/client/local.ts @@ -1,3 +1,3 @@ -import { Base } from './base' +import { Base } from './base.js' export class Local extends Base {} diff --git a/discojs/discojs-core/src/client/messages.ts b/discojs/discojs-core/src/client/messages.ts index a12652fbe..b75b0dc60 100644 --- a/discojs/discojs-core/src/client/messages.ts +++ b/discojs/discojs-core/src/client/messages.ts @@ -1,6 +1,6 @@ -import type * as decentralized from './decentralized/messages' -import type * as federated from './federated/messages' -import { type NodeID } from './types' +import type * as decentralized from './decentralized/messages.js' +import type * as federated from './federated/messages.js' +import { type NodeID } from './types.js' export enum type { ClientConnected, diff --git a/discojs/discojs-core/src/dataset/data/data.ts b/discojs/discojs-core/src/dataset/data/data.ts index 049b5a7f8..2aa766582 100644 --- a/discojs/discojs-core/src/dataset/data/data.ts +++ b/discojs/discojs-core/src/dataset/data/data.ts @@ -1,9 +1,10 @@ import type tf from '@tensorflow/tfjs' import type { List } from 'immutable' -import type { Task } from '../..' -import type { Dataset } from '../dataset' -import type { PreprocessingFunction } from './preprocessing/base' +import type { Task } from '../../index.js' +import type { Dataset } from '../index.js' + +import type { PreprocessingFunction } from './preprocessing/base.js' /** * Abstract class representing an immutable Disco dataset, including a TF.js dataset, diff --git a/discojs/discojs-core/src/dataset/data/data_split.ts b/discojs/discojs-core/src/dataset/data/data_split.ts index 215b894c2..5cf56bff8 100644 --- a/discojs/discojs-core/src/dataset/data/data_split.ts +++ b/discojs/discojs-core/src/dataset/data/data_split.ts @@ -1,4 +1,4 @@ -import { type Data } from './data' +import type { Data } from './data.js' /** * Train-validation split of Disco data. diff --git a/discojs/discojs-core/src/dataset/data/image_data.spec.ts b/discojs/discojs-core/src/dataset/data/image_data.spec.ts index 6cd073275..db4fe0392 100644 --- a/discojs/discojs-core/src/dataset/data/image_data.spec.ts +++ b/discojs/discojs-core/src/dataset/data/image_data.spec.ts @@ -1,8 +1,8 @@ import { assert, expect } from 'chai' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { ImageData } from './image_data' -import type { Task } from '../..' +import { ImageData } from './image_data.js' +import type { Task } from '../../index.js' describe('image data checks', () => { const simplefaceMock: Task = { diff --git a/discojs/discojs-core/src/dataset/data/image_data.ts b/discojs/discojs-core/src/dataset/data/image_data.ts index 83a61117e..5545a085d 100644 --- a/discojs/discojs-core/src/dataset/data/image_data.ts +++ b/discojs/discojs-core/src/dataset/data/image_data.ts @@ -1,9 +1,10 @@ import type tf from '@tensorflow/tfjs' -import type { Task } from '../..' -import type { Dataset } from '../dataset' -import { Data } from './data' -import { ImagePreprocessing, IMAGE_PREPROCESSING } from './preprocessing' +import type { Task } from '../../index.js' +import type { Dataset } from '../dataset.js' + +import { Data } from './data.js' +import { ImagePreprocessing, IMAGE_PREPROCESSING } from './preprocessing/index.js' /** * Disco data made of image samples (.jpg, .png, etc.). diff --git a/discojs/discojs-core/src/dataset/data/index.ts b/discojs/discojs-core/src/dataset/data/index.ts index d09031780..2f5f5fb75 100644 --- a/discojs/discojs-core/src/dataset/data/index.ts +++ b/discojs/discojs-core/src/dataset/data/index.ts @@ -1,9 +1,9 @@ -export type { DataSplit } from './data_split' -export { Data } from './data' -export { ImageData } from './image_data' -export { TabularData } from './tabular_data' -export { TextData } from './text_data' +export type { DataSplit } from './data_split.js' +export { Data } from './data.js' +export { ImageData } from './image_data.js' +export { TabularData } from './tabular_data.js' +export { TextData } from './text_data.js' export { ImagePreprocessing, TabularPreprocessing, TextPreprocessing, IMAGE_PREPROCESSING, TABULAR_PREPROCESSING, TEXT_PREPROCESSING -} from './preprocessing' +} from './preprocessing/index.js' diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/base.ts b/discojs/discojs-core/src/dataset/data/preprocessing/base.ts index 9507dfe6b..dbd18a096 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/base.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/base.ts @@ -1,9 +1,9 @@ import type tf from '@tensorflow/tfjs' -import type { Task } from '../../..' -import type { ImagePreprocessing } from './image_preprocessing' -import type { TabularPreprocessing } from './tabular_preprocessing' -import type { TextPreprocessing } from './text_preprocessing' +import type { Task } from '../../../index.js' +import type { ImagePreprocessing } from './image_preprocessing.js' +import type { TabularPreprocessing } from './tabular_preprocessing.js' +import type { TextPreprocessing } from './text_preprocessing.js' /** * All available preprocessing type enums. diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts index 2220a9d69..4b1bd13a0 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts @@ -1,8 +1,8 @@ import { List } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Task } from '../../..' -import type { PreprocessingFunction } from './base' +import type { Task } from '../../../index.js' +import type { PreprocessingFunction } from './base.js' /** * Available image preprocessing types. diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/index.ts b/discojs/discojs-core/src/dataset/data/preprocessing/index.ts index 87d0a2c72..3e805f897 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/index.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/index.ts @@ -1,4 +1,4 @@ -export type { Preprocessing, PreprocessingFunction } from './base' -export { AVAILABLE_PREPROCESSING as IMAGE_PREPROCESSING, ImagePreprocessing } from './image_preprocessing' -export { AVAILABLE_PREPROCESSING as TABULAR_PREPROCESSING, TabularPreprocessing } from './tabular_preprocessing' -export { AVAILABLE_PREPROCESSING as TEXT_PREPROCESSING, TextPreprocessing } from './text_preprocessing' +export type { Preprocessing, PreprocessingFunction } from './base.js' +export { AVAILABLE_PREPROCESSING as IMAGE_PREPROCESSING, ImagePreprocessing } from './image_preprocessing.js' +export { AVAILABLE_PREPROCESSING as TABULAR_PREPROCESSING, TabularPreprocessing } from './tabular_preprocessing.js' +export { AVAILABLE_PREPROCESSING as TEXT_PREPROCESSING, TextPreprocessing } from './text_preprocessing.js' diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts index 4450b41c2..a3de0201b 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts @@ -1,8 +1,8 @@ import type tf from '@tensorflow/tfjs' import { List } from 'immutable' -import type { Task } from '../../..' -import type { PreprocessingFunction } from './base' +import type { Task } from '../../../index.js' +import type { PreprocessingFunction } from './base.js' /** * Available tabular preprocessing types. diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index e372bde4d..239b718bd 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -1,8 +1,8 @@ import { List } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Task } from '../../..' -import type { PreprocessingFunction } from './base' +import type { Task } from '../../../index.js' +import type { PreprocessingFunction } from './base.js' /** * Available text preprocessing types. diff --git a/discojs/discojs-core/src/dataset/data/tabular_data.spec.ts b/discojs/discojs-core/src/dataset/data/tabular_data.spec.ts index 3a87ea8b3..a0d727570 100644 --- a/discojs/discojs-core/src/dataset/data/tabular_data.spec.ts +++ b/discojs/discojs-core/src/dataset/data/tabular_data.spec.ts @@ -1,9 +1,9 @@ import { assert, expect } from 'chai' import { Map, Set } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { TabularData } from './tabular_data' -import type { Task } from '../..' +import { TabularData } from './tabular_data.js' +import type { Task } from '../../index.js' describe('tabular data checks', () => { const titanicMock: Task = { diff --git a/discojs/discojs-core/src/dataset/data/tabular_data.ts b/discojs/discojs-core/src/dataset/data/tabular_data.ts index 892c9d8b4..7996223b7 100644 --- a/discojs/discojs-core/src/dataset/data/tabular_data.ts +++ b/discojs/discojs-core/src/dataset/data/tabular_data.ts @@ -1,7 +1,8 @@ -import { type Task } from '../..' -import { type Dataset } from '../dataset' -import { Data } from './data' -import { TABULAR_PREPROCESSING } from './preprocessing' +import type { Task } from '../../index.js' +import type { Dataset } from '../dataset.js' + +import { Data } from './data.js' +import { TABULAR_PREPROCESSING } from './preprocessing/index.js' /** * Disco data made of tabular (.csv, .tsv, etc.) files. diff --git a/discojs/discojs-core/src/dataset/data/text_data.ts b/discojs/discojs-core/src/dataset/data/text_data.ts index 84933e337..64b52aad4 100644 --- a/discojs/discojs-core/src/dataset/data/text_data.ts +++ b/discojs/discojs-core/src/dataset/data/text_data.ts @@ -1,7 +1,8 @@ -import { type Task } from '../..' -import { type Dataset } from '../dataset' -import { Data } from './data' -import { TEXT_PREPROCESSING } from './preprocessing' +import type { Task } from '../../index.js' +import type { Dataset } from '../dataset.js' + +import { Data } from './data.js' +import { TEXT_PREPROCESSING } from './preprocessing/index.js' /** * Disco data made of textual samples. diff --git a/discojs/discojs-core/src/dataset/data_loader/data_loader.ts b/discojs/discojs-core/src/dataset/data_loader/data_loader.ts index a4377d1e8..fd6e578fc 100644 --- a/discojs/discojs-core/src/dataset/data_loader/data_loader.ts +++ b/discojs/discojs-core/src/dataset/data_loader/data_loader.ts @@ -1,4 +1,4 @@ -import type { DataSplit, Dataset } from '..' +import type { DataSplit, Dataset } from '../index.js' export interface DataConfig { features?: string[], labels?: string[], shuffle?: boolean, validationSplit?: number, inference?: boolean } diff --git a/discojs/discojs-core/src/dataset/data_loader/image_loader.ts b/discojs/discojs-core/src/dataset/data_loader/image_loader.ts index a42f5b0d4..713f54227 100644 --- a/discojs/discojs-core/src/dataset/data_loader/image_loader.ts +++ b/discojs/discojs-core/src/dataset/data_loader/image_loader.ts @@ -1,12 +1,12 @@ import { Range } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Task } from '../..' +import type { Task } from '../../index.js' -import type { Data, Dataset, DataSplit } from '..' -import { ImageData } from '../data' -import type { DataConfig } from '../data_loader' -import { DataLoader } from '../data_loader' +import type { Data, Dataset, DataSplit } from '../index.js' +import { ImageData } from '../data/index.js' +import type { DataConfig } from '../data_loader/index.js' +import { DataLoader } from '../data_loader/index.js' /** * Image data loader whose instantiable implementation is delegated by the platform-dependent Disco subprojects, namely, diff --git a/discojs/discojs-core/src/dataset/data_loader/index.ts b/discojs/discojs-core/src/dataset/data_loader/index.ts index 39c0aa34d..50390dc2d 100644 --- a/discojs/discojs-core/src/dataset/data_loader/index.ts +++ b/discojs/discojs-core/src/dataset/data_loader/index.ts @@ -1,6 +1,6 @@ -export type { DataConfig } from './data_loader' -export { DataLoader } from './data_loader' +export type { DataConfig } from './data_loader.js' +export { DataLoader } from './data_loader.js' -export { ImageLoader } from './image_loader' -export { TabularLoader } from './tabular_loader' -export { TextLoader } from './text_loader' +export { ImageLoader } from './image_loader.js' +export { TabularLoader } from './tabular_loader.js' +export { TextLoader } from './text_loader.js' diff --git a/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts b/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts index 41e912746..377345d92 100644 --- a/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts +++ b/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts @@ -1,11 +1,12 @@ import { List, Map, Set } from 'immutable' -import type { Task } from '../..' +import type { Task } from '../../index.js' -import type { Dataset, DataSplit } from '..' -import { TabularData } from '..' -import type { DataConfig } from '../data_loader' -import { DataLoader } from '../data_loader' +import type { Dataset, DataSplit } from '../index.js' +import { TabularData } from '../index.js' + +import type { DataConfig } from './index.js' +import { DataLoader } from './index.js' // Window size from which the dataset shuffling will sample const BUFFER_SIZE = 1000 diff --git a/discojs/discojs-core/src/dataset/data_loader/text_loader.ts b/discojs/discojs-core/src/dataset/data_loader/text_loader.ts index d1bbd633e..e1b27dbba 100644 --- a/discojs/discojs-core/src/dataset/data_loader/text_loader.ts +++ b/discojs/discojs-core/src/dataset/data_loader/text_loader.ts @@ -1,9 +1,9 @@ -import type { Task } from '../..' +import type { Task } from '../../index.js' -import type { DataSplit, Dataset } from '..' -import { TextData } from '..' +import type { DataSplit, Dataset } from '../index.js' +import { TextData } from '../index.js' -import { DataLoader } from '.' +import { DataLoader } from './index.js' /** * Text data loader whose instantiable implementation is delegated by the platform-dependent Disco subprojects, namely, diff --git a/discojs/discojs-core/src/dataset/dataset_builder.ts b/discojs/discojs-core/src/dataset/dataset_builder.ts index 3506c68f8..847a75c9f 100644 --- a/discojs/discojs-core/src/dataset/dataset_builder.ts +++ b/discojs/discojs-core/src/dataset/dataset_builder.ts @@ -1,6 +1,7 @@ -import { type Task } from '..' -import { type DataSplit } from './data' -import { type DataConfig, type DataLoader } from './data_loader/data_loader' +import type { Task } from '../index.js' + +import type { DataSplit } from './data/index.js' +import type { DataConfig, DataLoader } from './data_loader/data_loader.js' import { Map } from 'immutable' diff --git a/discojs/discojs-core/src/dataset/index.ts b/discojs/discojs-core/src/dataset/index.ts index d25130d14..ec0bde41e 100644 --- a/discojs/discojs-core/src/dataset/index.ts +++ b/discojs/discojs-core/src/dataset/index.ts @@ -1,8 +1,9 @@ -export type { Dataset } from './dataset' -export { DatasetBuilder } from './dataset_builder' -export { ImageLoader, TabularLoader, DataLoader, TextLoader } from './data_loader' +export type { Dataset } from './dataset.js' +export { DatasetBuilder } from './dataset_builder.js' +export { ImageLoader, TabularLoader, DataLoader, TextLoader } from './data_loader/index.js' +export type { DataSplit } from './data/index.js' export { - type DataSplit, Data, TabularData, ImageData, TextData, + Data, TabularData, ImageData, TextData, ImagePreprocessing, TabularPreprocessing, TextPreprocessing, IMAGE_PREPROCESSING, TABULAR_PREPROCESSING, TEXT_PREPROCESSING -} from './data' +} from './data/index.js' diff --git a/discojs/discojs-core/src/default_tasks/cifar10.ts b/discojs/discojs-core/src/default_tasks/cifar10.ts index cb2ce3ab0..413f26baa 100644 --- a/discojs/discojs-core/src/default_tasks/cifar10.ts +++ b/discojs/discojs-core/src/default_tasks/cifar10.ts @@ -1,7 +1,7 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model, Task, TaskProvider } from '..' -import { data, models } from '..' +import type { Model, Task, TaskProvider } from '../index.js' +import { data, models } from '../index.js' export const cifar10: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/default_tasks/geotags.ts b/discojs/discojs-core/src/default_tasks/geotags.ts index e84eb26de..14e24c004 100644 --- a/discojs/discojs-core/src/default_tasks/geotags.ts +++ b/discojs/discojs-core/src/default_tasks/geotags.ts @@ -1,9 +1,9 @@ import { Range } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model, Task, TaskProvider } from '..' -import { data, models } from '..' -import { LabelTypeEnum } from '../task/label_type' +import type { Model, Task, TaskProvider } from '../index.js' +import { data, models } from '../index.js' +import { LabelTypeEnum } from '../task/label_type.js' export const geotags: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/default_tasks/index.ts b/discojs/discojs-core/src/default_tasks/index.ts index 15730a99e..e85e0f216 100644 --- a/discojs/discojs-core/src/default_tasks/index.ts +++ b/discojs/discojs-core/src/default_tasks/index.ts @@ -1,8 +1,8 @@ -export { cifar10 } from './cifar10' -export { geotags } from './geotags' -export { lusCovid } from './lus_covid' -export { mnist } from './mnist' -export { simpleFace } from './simple_face' -export { skinMnist } from './skin_mnist' -export { titanic } from './titanic' -export { wikitext } from './wikitext' +export { cifar10 } from './cifar10.js' +export { geotags } from './geotags.js' +export { lusCovid } from './lus_covid.js' +export { mnist } from './mnist.js' +export { simpleFace } from './simple_face.js' +export { skinMnist } from './skin_mnist.js' +export { titanic } from './titanic.js' +export { wikitext } from './wikitext.js' diff --git a/discojs/discojs-core/src/default_tasks/lus_covid.ts b/discojs/discojs-core/src/default_tasks/lus_covid.ts index 4c36fba58..e789b4419 100644 --- a/discojs/discojs-core/src/default_tasks/lus_covid.ts +++ b/discojs/discojs-core/src/default_tasks/lus_covid.ts @@ -1,7 +1,7 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model, Task, TaskProvider } from '..' -import { data, models } from '..' +import type { Model, Task, TaskProvider } from '../index.js' +import { data, models } from '../index.js' export const lusCovid: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/default_tasks/mnist.ts b/discojs/discojs-core/src/default_tasks/mnist.ts index eceb8b9f7..559d9cd0f 100644 --- a/discojs/discojs-core/src/default_tasks/mnist.ts +++ b/discojs/discojs-core/src/default_tasks/mnist.ts @@ -1,7 +1,7 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model, Task, TaskProvider } from '..' -import { models } from '..' +import type { Model, Task, TaskProvider } from '../index.js' +import { models } from '../index.js' export const mnist: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/default_tasks/simple_face.ts b/discojs/discojs-core/src/default_tasks/simple_face.ts index cc5d55cd2..8d5df19b3 100644 --- a/discojs/discojs-core/src/default_tasks/simple_face.ts +++ b/discojs/discojs-core/src/default_tasks/simple_face.ts @@ -1,7 +1,7 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model, Task, TaskProvider } from '..' -import { data, models } from '..' +import type { Model, Task, TaskProvider } from '../index.js' +import { data, models } from '../index.js' export const simpleFace: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/default_tasks/skin_mnist.ts b/discojs/discojs-core/src/default_tasks/skin_mnist.ts index 357d7edef..b688ab9e6 100644 --- a/discojs/discojs-core/src/default_tasks/skin_mnist.ts +++ b/discojs/discojs-core/src/default_tasks/skin_mnist.ts @@ -1,7 +1,7 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model, Task, TaskProvider } from '..' -import { data, models } from '..' +import type { Model, Task, TaskProvider } from '../index.js' +import { data, models } from '../index.js' export const skinMnist: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/default_tasks/titanic.ts b/discojs/discojs-core/src/default_tasks/titanic.ts index 07cc38aa7..f70170f98 100644 --- a/discojs/discojs-core/src/default_tasks/titanic.ts +++ b/discojs/discojs-core/src/default_tasks/titanic.ts @@ -1,7 +1,7 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model, Task, TaskProvider } from '..' -import { data, models } from '..' +import type { Model, Task, TaskProvider } from '../index.js' +import { data, models } from '../index.js' export const titanic: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 44f834699..60ca82e34 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -1,5 +1,5 @@ -import type { Model, Task, TaskProvider } from '..' -import { models } from '..' +import type { Model, Task, TaskProvider } from '../index.js' +import { models } from '../index.js' export const wikitext: TaskProvider = { getTask (): Task { diff --git a/discojs/discojs-core/src/index.ts b/discojs/discojs-core/src/index.ts index 593234f84..e6e80d64b 100644 --- a/discojs/discojs-core/src/index.ts +++ b/discojs/discojs-core/src/index.ts @@ -1,23 +1,23 @@ -export * as data from './dataset' -export * as serialization from './serialization' -export * as training from './training' -export * as privacy from './privacy' -export { GraphInformant, TrainingInformant, informant } from './informant' +export * as data from './dataset/index.js' +export * as serialization from './serialization/index.js' +export * as training from './training/index.js' +export * as privacy from './privacy.js' +export { GraphInformant, TrainingInformant, informant } from './informant/index.js' -export * as client from './client' -export * as aggregator from './aggregator' +export * as client from './client/index.js' +export * as aggregator from './aggregator/index.js' -export { WeightsContainer, aggregation } from './weights' -export { AsyncInformant } from './async_informant' -export { Logger, ConsoleLogger, TrainerLog } from './logging' -export { Memory, ModelType, type ModelInfo, type Path, type ModelSource, Empty as EmptyMemory } from './memory' -export { Disco } from './training' -export { Validator } from './validation' +export { WeightsContainer, aggregation } from './weights/index.js' +export { AsyncInformant } from './async_informant.js' +export { Logger, ConsoleLogger, TrainerLog } from './logging/index.js' +export { Memory, ModelType, type ModelInfo, type Path, type ModelSource, Empty as EmptyMemory } from './memory/index.js' +export { Disco } from './training/index.js' +export { Validator } from './validation/index.js' -export { Model } from './models' -export * as models from './models' +export { Model } from './models/index.js' +export * as models from './models/index.js' -export * from './task' -export * as defaultTasks from './default_tasks' +export * from './task/index.js' +export * as defaultTasks from './default_tasks/index.js' -export * from './types' +export * from './types.js' diff --git a/discojs/discojs-core/src/informant/index.ts b/discojs/discojs-core/src/informant/index.ts index ce14ba43e..e3a8c1e65 100644 --- a/discojs/discojs-core/src/informant/index.ts +++ b/discojs/discojs-core/src/informant/index.ts @@ -1,3 +1,3 @@ -export { GraphInformant } from './graph_informant' -export { Base as TrainingInformant } from './training_informant' -export * as informant from './training_informant' +export { GraphInformant } from './graph_informant.js' +export { Base as TrainingInformant } from './training_informant/index.js' +export * as informant from './training_informant/index.js' diff --git a/discojs/discojs-core/src/informant/training_informant/base.ts b/discojs/discojs-core/src/informant/training_informant/base.ts index b4e2a578d..7317e45fb 100644 --- a/discojs/discojs-core/src/informant/training_informant/base.ts +++ b/discojs/discojs-core/src/informant/training_informant/base.ts @@ -1,7 +1,8 @@ import { List, Set } from 'immutable' -import { type Task } from '../../task' -import { GraphInformant } from '../graph_informant' +import type { Task } from '../../index.js' + +import { GraphInformant } from '../graph_informant.js' export abstract class Base { // written feedback diff --git a/discojs/discojs-core/src/informant/training_informant/decentralized.ts b/discojs/discojs-core/src/informant/training_informant/decentralized.ts index 2a9414343..9f307fc91 100644 --- a/discojs/discojs-core/src/informant/training_informant/decentralized.ts +++ b/discojs/discojs-core/src/informant/training_informant/decentralized.ts @@ -1,4 +1,4 @@ -import { Base } from '.' +import { Base } from './index.js' export class DecentralizedInformant extends Base { update (statistics: Record): void { diff --git a/discojs/discojs-core/src/informant/training_informant/federated.ts b/discojs/discojs-core/src/informant/training_informant/federated.ts index 67b0d73fc..dd18c4ab3 100644 --- a/discojs/discojs-core/src/informant/training_informant/federated.ts +++ b/discojs/discojs-core/src/informant/training_informant/federated.ts @@ -1,4 +1,4 @@ -import { Base } from '.' +import { Base } from './index.js' /** * Class that collects information about the status of the training-loop of the model. diff --git a/discojs/discojs-core/src/informant/training_informant/index.ts b/discojs/discojs-core/src/informant/training_informant/index.ts index 88cb0ecc5..8defbf68d 100644 --- a/discojs/discojs-core/src/informant/training_informant/index.ts +++ b/discojs/discojs-core/src/informant/training_informant/index.ts @@ -1,5 +1,5 @@ -export { Base } from './base' +export { Base } from './base.js' -export { FederatedInformant } from './federated' -export { DecentralizedInformant } from './decentralized' -export { LocalInformant } from './local' +export { FederatedInformant } from './federated.js' +export { DecentralizedInformant } from './decentralized.js' +export { LocalInformant } from './local.js' diff --git a/discojs/discojs-core/src/informant/training_informant/local.ts b/discojs/discojs-core/src/informant/training_informant/local.ts index 32ea2c76b..ca6a833db 100644 --- a/discojs/discojs-core/src/informant/training_informant/local.ts +++ b/discojs/discojs-core/src/informant/training_informant/local.ts @@ -1,5 +1,6 @@ -import { type Task } from '../../task' -import { Base } from '.' +import type { Task } from '../../index.js' + +import { Base } from './index.js' export class LocalInformant extends Base { constructor (task: Task, nbrMessagesToShow?: number) { diff --git a/discojs/discojs-core/src/logging/console_logger.ts b/discojs/discojs-core/src/logging/console_logger.ts index 24ad46b6b..1f021e033 100644 --- a/discojs/discojs-core/src/logging/console_logger.ts +++ b/discojs/discojs-core/src/logging/console_logger.ts @@ -1,5 +1,5 @@ import chalk from 'chalk' -import { Logger } from './logger' +import { Logger } from './logger.js' /** * Same properties as Toaster but on the console diff --git a/discojs/discojs-core/src/logging/index.ts b/discojs/discojs-core/src/logging/index.ts index a4cbdaaf0..443f03e2a 100644 --- a/discojs/discojs-core/src/logging/index.ts +++ b/discojs/discojs-core/src/logging/index.ts @@ -1,3 +1,3 @@ -export { Logger } from './logger' -export { ConsoleLogger } from './console_logger' -export { TrainerLog } from './trainer_logger' +export { Logger } from './logger.js' +export { ConsoleLogger } from './console_logger.js' +export { TrainerLog } from './trainer_logger.js' diff --git a/discojs/discojs-core/src/logging/trainer_logger.ts b/discojs/discojs-core/src/logging/trainer_logger.ts index 84bcdec6a..259bc6a51 100644 --- a/discojs/discojs-core/src/logging/trainer_logger.ts +++ b/discojs/discojs-core/src/logging/trainer_logger.ts @@ -1,7 +1,7 @@ import { List } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { ConsoleLogger } from '.' +import { ConsoleLogger } from './index.js' export class TrainerLog { epochs: List = List() diff --git a/discojs/discojs-core/src/memory/base.ts b/discojs/discojs-core/src/memory/base.ts index 7de82dad6..a28c7ac34 100644 --- a/discojs/discojs-core/src/memory/base.ts +++ b/discojs/discojs-core/src/memory/base.ts @@ -1,8 +1,8 @@ // only used browser-side // TODO: replace IO type -import type { Model, TaskID } from '..' -import type { ModelType } from './model_type' +import type { Model, TaskID } from '../index.js' +import type { ModelType } from './model_type.js' /** * Model path which uniquely identifies a model in memory. diff --git a/discojs/discojs-core/src/memory/empty.ts b/discojs/discojs-core/src/memory/empty.ts index 030222f31..69a73666e 100644 --- a/discojs/discojs-core/src/memory/empty.ts +++ b/discojs/discojs-core/src/memory/empty.ts @@ -1,7 +1,7 @@ -import type { Model } from '..' +import type { Model } from '../index.js' -import type { ModelInfo, Path } from './base' -import { Memory } from './base' +import type { ModelInfo, Path } from './base.js' +import { Memory } from './base.js' /** * Represents an empty model memory. diff --git a/discojs/discojs-core/src/memory/index.ts b/discojs/discojs-core/src/memory/index.ts index f098d8618..7d5d49f82 100644 --- a/discojs/discojs-core/src/memory/index.ts +++ b/discojs/discojs-core/src/memory/index.ts @@ -1,3 +1,3 @@ -export { Empty } from './empty' -export { Memory, type ModelInfo, type Path, type ModelSource } from './base' -export { ModelType } from './model_type' +export { Empty } from './empty.js' +export { Memory, type ModelInfo, type Path, type ModelSource } from './base.js' +export { ModelType } from './model_type.js' diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index cd07653b7..db39ce74f 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -1,4 +1,4 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' export default async function evaluate ( model: tf.LayersModel, diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 39552fc8c..9314c6f20 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -2,16 +2,16 @@ * this code is taken from gpt-tfjs with modifications from @peacefulotter and @lukemovement **/ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { WeightsContainer } from '../..' -import type { Dataset } from '../../dataset' -import { Sink } from '../../utils/event_emitter' +import { WeightsContainer } from '../../index.js' +import type { Dataset } from '../../dataset/index.js' +import { Sink } from '../../utils/event_emitter.js' -import type { EpochLogs, Prediction, Sample } from '../model' -import { Model } from '../model' +import type { EpochLogs, Prediction, Sample } from '../model.js' +import { Model } from '../model.js' -import { GPTLMHeadModel } from './model' +import { GPTLMHeadModel } from './model.js' // TODO too big config interface Config { diff --git a/discojs/discojs-core/src/models/gpt/model.ts b/discojs/discojs-core/src/models/gpt/model.ts index f881c50c6..e40acaa33 100644 --- a/discojs/discojs-core/src/models/gpt/model.ts +++ b/discojs/discojs-core/src/models/gpt/model.ts @@ -1,11 +1,11 @@ -import tf, { LayersModel, layers, serialization } from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { GPTConfig } from './config' -import { getModelSizes, DEFAULT_CONFIG } from './config' -import { train } from './train' -import type { TrainingCallbacks } from './types' +import type { GPTConfig } from './config.js' +import { getModelSizes, DEFAULT_CONFIG } from './config.js' +import { train } from './train.js' +import type { TrainingCallbacks } from './types.js' -class Range extends layers.Layer { +class Range extends tf.layers.Layer { static readonly className = 'Range' computeOutputShape (inputShape: tf.Shape | tf.Shape[]): tf.Shape | tf.Shape[] { @@ -25,9 +25,9 @@ class Range extends layers.Layer { }) } } -serialization.registerClass(Range) +tf.serialization.registerClass(Range) -class LogLayer extends layers.Layer { +class LogLayer extends tf.layers.Layer { static readonly className = 'LogLayer' computeOutputShape (inputShape: tf.Shape | tf.Shape[]): tf.Shape | tf.Shape[] { @@ -44,9 +44,9 @@ class LogLayer extends layers.Layer { }) } } -serialization.registerClass(LogLayer) +tf.serialization.registerClass(LogLayer) -class CausalSelfAttentionBase extends layers.Layer { +class CausalSelfAttentionBase extends tf.layers.Layer { static readonly className = 'CausalSelfAttentionBase' private readonly blockSize: number @@ -73,7 +73,7 @@ class CausalSelfAttentionBase extends layers.Layer { return [null, this.blockSize, this.nEmbd] } - getConfig (): serialization.ConfigDict { + getConfig (): tf.serialization.ConfigDict { const config = super.getConfig() return Object.assign({}, config, this.config) } @@ -112,14 +112,14 @@ class CausalSelfAttentionBase extends layers.Layer { }) } } -serialization.registerClass(CausalSelfAttentionBase) +tf.serialization.registerClass(CausalSelfAttentionBase) type CausalSelfAttentionConfig = ConstructorParameters[0] & Record<'blockSize' | 'nHead' | 'nEmbd' | 'dropout', number> & { bias: boolean } -class CausalSelfAttention extends layers.Layer { +class CausalSelfAttention extends tf.layers.Layer { static readonly className = 'CausalSelfAttention' private readonly nHead: number @@ -175,7 +175,7 @@ class CausalSelfAttention extends layers.Layer { return inputShape } - getConfig (): serialization.ConfigDict { + getConfig (): tf.serialization.ConfigDict { const config = super.getConfig() return Object.assign({}, config, this.config) } @@ -241,9 +241,9 @@ class CausalSelfAttention extends layers.Layer { }) } } -serialization.registerClass(CausalSelfAttention) +tf.serialization.registerClass(CausalSelfAttention) -class GELU extends layers.Layer { +class GELU extends tf.layers.Layer { static readonly className = 'GELU' constructor () { @@ -277,9 +277,9 @@ class GELU extends layers.Layer { }) } } -serialization.registerClass(GELU) +tf.serialization.registerClass(GELU) -function MLP (conf: any): LayersModel { +function MLP (conf: any): tf.LayersModel { const config = Object.assign({ name: 'mlp' }, conf) const inputs = tf.input({ shape: [config.blockSize, config.nEmbd] }) let x @@ -309,7 +309,7 @@ function MLP (conf: any): LayersModel { return tf.model({ inputs, outputs: x as any }) } -function Block (conf: CausalSelfAttentionConfig & { debug: boolean }): LayersModel { +function Block (conf: CausalSelfAttentionConfig & { debug: boolean }): tf.LayersModel { const config = Object.assign({ name: 'h' }, conf) const inputs = tf.input({ shape: [config.blockSize, config.nEmbd] }) let x1, x2 @@ -333,7 +333,7 @@ function Block (conf: CausalSelfAttentionConfig & { debug: boolean }): LayersMod return tf.model({ name: config.name, inputs, outputs: x2 as any }) } -function GPT (conf: GPTConfig): LayersModel { +function GPT (conf: GPTConfig): tf.LayersModel { const configDefaults = { name: 'transformer', ...DEFAULT_CONFIG @@ -456,7 +456,7 @@ declare abstract class Dataset { size: number } -class GPTModel extends LayersModel { +class GPTModel extends tf.LayersModel { constructor (protected readonly config: GPTConfig) { const gpt = GPT(config) const { inputs, outputs, name } = gpt diff --git a/discojs/discojs-core/src/models/gpt/optimizers.ts b/discojs/discojs-core/src/models/gpt/optimizers.ts index 7c8ee03ea..ec11e2e57 100644 --- a/discojs/discojs-core/src/models/gpt/optimizers.ts +++ b/discojs/discojs-core/src/models/gpt/optimizers.ts @@ -1,4 +1,4 @@ -import tf, { AdamOptimizer } from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' function l2Loss (tensor: tf.Tensor): tf.Tensor { return tf.div(tf.sum(tf.square(tensor)), 2) @@ -57,7 +57,7 @@ function clipByGlobalNormObj ( return tensorsObjClipped } -class AdamW extends AdamOptimizer { +class AdamW extends tf.AdamOptimizer { weightDecayRate: number includeInWeightDecay: string[] excludeFromWeightDecay: string[] diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index 3d1c92649..ade8a0318 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -1,10 +1,10 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { AdamW, clipByGlobalNormObj } from './optimizers' -import type { GPTConfig } from './config' -import { DEFAULT_CONFIG } from './config' -import evaluate from './evaluate' -import type { TrainingCallbacks } from './types' +import { AdamW, clipByGlobalNormObj } from './optimizers.js' +import type { GPTConfig } from './config.js' +import { DEFAULT_CONFIG } from './config.js' +import evaluate from './evaluate.js' +import type { TrainingCallbacks } from './types.js' function resolveConfig (config: GPTConfig): Required { return { diff --git a/discojs/discojs-core/src/models/index.ts b/discojs/discojs-core/src/models/index.ts index e6bf727ff..d076c5f55 100644 --- a/discojs/discojs-core/src/models/index.ts +++ b/discojs/discojs-core/src/models/index.ts @@ -1,4 +1,4 @@ -export { Model } from './model' +export { Model } from './model.js' -export { GPT } from './gpt' -export { TFJS } from './tfjs' +export { GPT } from './gpt/index.js' +export { TFJS } from './tfjs.js' diff --git a/discojs/discojs-core/src/models/model.ts b/discojs/discojs-core/src/models/model.ts index dd6e6713a..d92a28857 100644 --- a/discojs/discojs-core/src/models/model.ts +++ b/discojs/discojs-core/src/models/model.ts @@ -1,8 +1,9 @@ import type tf from '@tensorflow/tfjs' -import type { WeightsContainer } from '..' -import type { EventEmitter } from 'utils/event_emitter' -import type { Dataset } from 'dataset' +import type { WeightsContainer } from '../index.js' + +import type { EventEmitter } from '../utils/event_emitter.js' +import type { Dataset } from '../dataset/index.js' // TODO still bound to tfjs export type EpochLogs = tf.Logs | undefined diff --git a/discojs/discojs-core/src/models/tfjs.ts b/discojs/discojs-core/src/models/tfjs.ts index 6808bbbdb..b9596f95e 100644 --- a/discojs/discojs-core/src/models/tfjs.ts +++ b/discojs/discojs-core/src/models/tfjs.ts @@ -1,11 +1,11 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { Sink } from '../utils/event_emitter' -import { WeightsContainer } from '..' +import { Sink } from '../utils/event_emitter.js' +import { WeightsContainer } from '../index.js' -import { Model } from '.' -import type { EpochLogs, Prediction, Sample } from './model' -import type { Dataset } from '../dataset' +import { Model } from './index.js' +import type { EpochLogs, Prediction, Sample } from './model.js' +import type { Dataset } from '../dataset/index.js' /** TensorFlow JavaScript model with standard training */ export class TFJS extends Model { diff --git a/discojs/discojs-core/src/privacy.ts b/discojs/discojs-core/src/privacy.ts index 754410a6b..adf0e87c0 100644 --- a/discojs/discojs-core/src/privacy.ts +++ b/discojs/discojs-core/src/privacy.ts @@ -1,6 +1,6 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Task, WeightsContainer } from '.' +import type { Task, WeightsContainer } from './index.js' /** * Add task-parametrized Gaussian noise to and clip the weights update between the previous and current rounds. diff --git a/discojs/discojs-core/src/serialization/index.ts b/discojs/discojs-core/src/serialization/index.ts index 62d206c2e..b702ea9e0 100644 --- a/discojs/discojs-core/src/serialization/index.ts +++ b/discojs/discojs-core/src/serialization/index.ts @@ -1,2 +1,2 @@ -export * as model from './model' -export * as weights from './weights' +export * as model from './model.js' +export * as weights from './weights.js' diff --git a/discojs/discojs-core/src/serialization/model.spec.ts b/discojs/discojs-core/src/serialization/model.spec.ts index 8d986dae8..094c0ea5d 100644 --- a/discojs/discojs-core/src/serialization/model.spec.ts +++ b/discojs/discojs-core/src/serialization/model.spec.ts @@ -1,8 +1,8 @@ import { assert } from 'chai' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { Model } from '..' -import { serialization, models } from '..' +import type { Model } from '../index.js' +import { serialization, models } from '../index.js' async function getRawWeights (model: Model): Promise> { return Array.from( diff --git a/discojs/discojs-core/src/serialization/model.ts b/discojs/discojs-core/src/serialization/model.ts index d41585490..4d70584b8 100644 --- a/discojs/discojs-core/src/serialization/model.ts +++ b/discojs/discojs-core/src/serialization/model.ts @@ -1,8 +1,8 @@ import msgpack from 'msgpack-lite' import type tf from '@tensorflow/tfjs' -import type { Model } from '..' -import { models, serialization } from '..' +import type { Model } from '../index.js' +import { models, serialization } from '../index.js' const enum Type { TFJS, GPT } diff --git a/discojs/discojs-core/src/serialization/weights.spec.ts b/discojs/discojs-core/src/serialization/weights.spec.ts index 2a4a10b18..263c8be8a 100644 --- a/discojs/discojs-core/src/serialization/weights.spec.ts +++ b/discojs/discojs-core/src/serialization/weights.spec.ts @@ -1,6 +1,6 @@ import { assert } from 'chai' -import { WeightsContainer, serialization } from '..' +import { WeightsContainer, serialization } from '../index.js' describe('weights', () => { it('can encode what it decodes', async () => { diff --git a/discojs/discojs-core/src/serialization/weights.ts b/discojs/discojs-core/src/serialization/weights.ts index 59d687a55..910264ad0 100644 --- a/discojs/discojs-core/src/serialization/weights.ts +++ b/discojs/discojs-core/src/serialization/weights.ts @@ -1,7 +1,7 @@ import * as msgpack from 'msgpack-lite' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import { WeightsContainer } from '..' +import { WeightsContainer } from '../index.js' interface Serialized { shape: number[] diff --git a/discojs/discojs-core/src/task/display_information.ts b/discojs/discojs-core/src/task/display_information.ts index a008702eb..f8daa730c 100644 --- a/discojs/discojs-core/src/task/display_information.ts +++ b/discojs/discojs-core/src/task/display_information.ts @@ -1,6 +1,6 @@ -import { type Summary, isSummary } from './summary' -import { type DataExample, isDataExample } from './data_example' -import { isLabelType, type LabelType } from './label_type' +import { type Summary, isSummary } from './summary.js' +import { type DataExample, isDataExample } from './data_example.js' +import { type LabelType, isLabelType } from './label_type.js' export interface DisplayInformation { taskTitle?: string diff --git a/discojs/discojs-core/src/task/index.ts b/discojs/discojs-core/src/task/index.ts index d36ef0bf2..64cd69aa6 100644 --- a/discojs/discojs-core/src/task/index.ts +++ b/discojs/discojs-core/src/task/index.ts @@ -1,7 +1,7 @@ -export { isTask, type Task, isTaskID, type TaskID } from './task' -export { type TaskProvider } from './task_provider' -export { isDigest, type Digest } from './digest' -export { isDisplayInformation, type DisplayInformation } from './display_information' -export type { TrainingInformation } from './training_information' -export { pushTask, fetchTasks } from './task_handler' -export { LabelTypeEnum } from './label_type' +export { isTask, type Task, isTaskID, type TaskID } from './task.js' +export { type TaskProvider } from './task_provider.js' +export { isDigest, type Digest } from './digest.js' +export { isDisplayInformation, type DisplayInformation } from './display_information.js' +export type { TrainingInformation } from './training_information.js' +export { pushTask, fetchTasks } from './task_handler.js' +export { LabelTypeEnum } from './label_type.js' diff --git a/discojs/discojs-core/src/task/task.ts b/discojs/discojs-core/src/task/task.ts index 5de14ba09..89ca0f075 100644 --- a/discojs/discojs-core/src/task/task.ts +++ b/discojs/discojs-core/src/task/task.ts @@ -1,6 +1,6 @@ -import { isDisplayInformation, type DisplayInformation } from './display_information' -import { isTrainingInformation, type TrainingInformation } from './training_information' -import { isDigest, type Digest } from './digest' +import { isDisplayInformation, type DisplayInformation } from './display_information.js' +import { isTrainingInformation, type TrainingInformation } from './training_information.js' +import { isDigest, type Digest } from './digest.js' export type TaskID = string diff --git a/discojs/discojs-core/src/task/task_handler.ts b/discojs/discojs-core/src/task/task_handler.ts index e99021477..1fe8e2981 100644 --- a/discojs/discojs-core/src/task/task_handler.ts +++ b/discojs/discojs-core/src/task/task_handler.ts @@ -1,11 +1,11 @@ import axios from 'axios' import { Map } from 'immutable' -import type { Model } from '..' -import { serialization } from '..' +import type { Model } from '../index.js' +import { serialization } from '../index.js' -import type { Task, TaskID } from './task' -import { isTask } from './task' +import type { Task, TaskID } from './task.js' +import { isTask } from './task.js' const TASK_ENDPOINT = 'tasks' diff --git a/discojs/discojs-core/src/task/task_provider.ts b/discojs/discojs-core/src/task/task_provider.ts index ccb0377a4..64ad74171 100644 --- a/discojs/discojs-core/src/task/task_provider.ts +++ b/discojs/discojs-core/src/task/task_provider.ts @@ -1,4 +1,4 @@ -import type { Model, Task } from '..' +import type { Model, Task } from '../index.js' export interface TaskProvider { getTask: () => Task diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index 73ed2239b..075b597c3 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -1,5 +1,5 @@ -import { type AggregatorChoice } from '../aggregator/get' -import { type Preprocessing } from '../dataset/data/preprocessing' +import { type AggregatorChoice } from '../aggregator/get.js' +import { type Preprocessing } from '../dataset/data/preprocessing/index.js' export interface TrainingInformation { // modelID: unique ID for the model diff --git a/discojs/discojs-core/src/training/disco.ts b/discojs/discojs-core/src/training/disco.ts index c31eb3c65..ddcbdd819 100644 --- a/discojs/discojs-core/src/training/disco.ts +++ b/discojs/discojs-core/src/training/disco.ts @@ -1,18 +1,10 @@ -import { - client as clients, - type data, - type Logger, - type Task, - type TrainingInformant, informant as informants, - type Memory, EmptyMemory, - ConsoleLogger, - type TrainingInformation -} from '..' -import { type Trainer } from './trainer/trainer' -import { TrainerBuilder } from './trainer/trainer_builder' -import { type TrainerLog } from '../logging/trainer_logger' -import { type Aggregator } from '../aggregator' -import { MeanAggregator } from '../aggregator/mean' +import type { data, Logger, Memory, Task, TrainingInformant, TrainingInformation } from '../index.js' +import { client as clients, informant as informants, EmptyMemory, ConsoleLogger } from '../index.js' +import type { Trainer } from './trainer/trainer.js' +import { TrainerBuilder } from './trainer/trainer_builder.js' +import type { TrainerLog } from '../logging/trainer_logger.js' +import type { Aggregator } from '../aggregator/index.js' +import { MeanAggregator } from '../aggregator/mean.js' export interface DiscoOptions { client?: clients.Client diff --git a/discojs/discojs-core/src/training/index.ts b/discojs/discojs-core/src/training/index.ts index 3dac39f48..89ccaa1b4 100644 --- a/discojs/discojs-core/src/training/index.ts +++ b/discojs/discojs-core/src/training/index.ts @@ -1 +1 @@ -export { Disco } from './disco' +export { Disco } from './disco.js' diff --git a/discojs/discojs-core/src/training/trainer/distributed_trainer.ts b/discojs/discojs-core/src/training/trainer/distributed_trainer.ts index b66521be4..90caa8ec5 100644 --- a/discojs/discojs-core/src/training/trainer/distributed_trainer.ts +++ b/discojs/discojs-core/src/training/trainer/distributed_trainer.ts @@ -1,9 +1,9 @@ import type tf from '@tensorflow/tfjs' -import type { Model, Memory, Task, TrainingInformant, client as clients } from '../..' -import type { Aggregator } from '../../aggregator' +import type { Model, Memory, Task, TrainingInformant, client as clients } from '../../index.js' +import type { Aggregator } from '../../aggregator/index.js' -import { Trainer } from './trainer' +import { Trainer } from './trainer.js' /** * Class whose role is to train a model in a distributed way with a given dataset. diff --git a/discojs/discojs-core/src/training/trainer/local_trainer.ts b/discojs/discojs-core/src/training/trainer/local_trainer.ts index 5ee597e5d..b774a33a8 100644 --- a/discojs/discojs-core/src/training/trainer/local_trainer.ts +++ b/discojs/discojs-core/src/training/trainer/local_trainer.ts @@ -1,6 +1,6 @@ import type tf from '@tensorflow/tfjs' -import { Trainer } from './trainer' +import { Trainer } from './trainer.js' /** Class whose role is to locally (alone) train a model on a given dataset, * without any collaborators. diff --git a/discojs/discojs-core/src/training/trainer/round_tracker.spec.ts b/discojs/discojs-core/src/training/trainer/round_tracker.spec.ts index d0003caeb..2095bae5d 100644 --- a/discojs/discojs-core/src/training/trainer/round_tracker.spec.ts +++ b/discojs/discojs-core/src/training/trainer/round_tracker.spec.ts @@ -1,6 +1,6 @@ import { expect } from 'chai' -import { RoundTracker } from './round_tracker' +import { RoundTracker } from './round_tracker.js' const roundDuration = 2 diff --git a/discojs/discojs-core/src/training/trainer/trainer.ts b/discojs/discojs-core/src/training/trainer/trainer.ts index c9b20d784..e9da7102b 100644 --- a/discojs/discojs-core/src/training/trainer/trainer.ts +++ b/discojs/discojs-core/src/training/trainer/trainer.ts @@ -1,11 +1,11 @@ import type tf from '@tensorflow/tfjs' -import type { Memory, Model, Task, TrainingInformant } from '../..' +import type { Memory, Model, Task, TrainingInformant } from '../../index.js' -import { RoundTracker } from './round_tracker' -import type { TrainerLog } from '../../logging/trainer_logger' -import { TrainerLogger } from '../../logging/trainer_logger' -import { EventEmitter } from '../../utils/event_emitter' +import { RoundTracker } from './round_tracker.js' +import type { TrainerLog } from '../../logging/trainer_logger.js' +import { TrainerLogger } from '../../logging/trainer_logger.js' +import { EventEmitter } from '../../utils/event_emitter.js' /** Abstract class whose role is to train a model with a given dataset. This can be either done * locally (alone) or in a distributed way with collaborators. The Trainer works as follows: diff --git a/discojs/discojs-core/src/training/trainer/trainer_builder.ts b/discojs/discojs-core/src/training/trainer/trainer_builder.ts index 40cdd6399..2154911f9 100644 --- a/discojs/discojs-core/src/training/trainer/trainer_builder.ts +++ b/discojs/discojs-core/src/training/trainer/trainer_builder.ts @@ -1,9 +1,9 @@ -import type { client as clients, Model, Task, TrainingInformant, ModelInfo, Memory } from '../..' -import { ModelType } from '../..' +import type { client as clients, Model, Task, TrainingInformant, ModelInfo, Memory } from '../../index.js' +import { ModelType } from '../../index.js' -import { DistributedTrainer } from './distributed_trainer' -import { LocalTrainer } from './local_trainer' -import type { Trainer } from './trainer' +import { DistributedTrainer } from './distributed_trainer.js' +import { LocalTrainer } from './local_trainer.js' +import type { Trainer } from './trainer.js' /** * A class that helps build the Trainer and auxiliary classes. diff --git a/discojs/discojs-core/src/types.ts b/discojs/discojs-core/src/types.ts index c36a45ad8..7cf8cb020 100644 --- a/discojs/discojs-core/src/types.ts +++ b/discojs/discojs-core/src/types.ts @@ -1,7 +1,7 @@ import type { Map } from 'immutable' -import type { WeightsContainer } from '.' -import type { NodeID } from './client' +import type { WeightsContainer } from './index.js' +import type { NodeID } from './client/index.js' // Filesystem reference export type Path = string diff --git a/discojs/discojs-core/src/validation/index.ts b/discojs/discojs-core/src/validation/index.ts index aaec72d40..c1ad9037c 100644 --- a/discojs/discojs-core/src/validation/index.ts +++ b/discojs/discojs-core/src/validation/index.ts @@ -1 +1 @@ -export { Validator } from './validator' +export { Validator } from './validator.js' diff --git a/discojs/discojs-core/src/validation/validator.ts b/discojs/discojs-core/src/validation/validator.ts index fff18c513..d7969971d 100644 --- a/discojs/discojs-core/src/validation/validator.ts +++ b/discojs/discojs-core/src/validation/validator.ts @@ -1,8 +1,8 @@ import { List } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { data, Model, Task, Logger, client as clients, Memory, ModelSource, Features } from '..' -import { GraphInformant } from '..' +import type { data, Model, Task, Logger, client as clients, Memory, ModelSource, Features } from '../index.js' +import { GraphInformant } from '../index.js' export class Validator { private readonly graphInformant = new GraphInformant() diff --git a/discojs/discojs-core/src/weights/aggregation.spec.ts b/discojs/discojs-core/src/weights/aggregation.spec.ts index fff526cbc..157619f33 100644 --- a/discojs/discojs-core/src/weights/aggregation.spec.ts +++ b/discojs/discojs-core/src/weights/aggregation.spec.ts @@ -1,6 +1,6 @@ import { assert } from 'chai' -import { WeightsContainer, aggregation } from '.' +import { WeightsContainer, aggregation } from './index.js' describe('weights aggregation', () => { it('avg of weights with two operands', async () => { diff --git a/discojs/discojs-core/src/weights/aggregation.ts b/discojs/discojs-core/src/weights/aggregation.ts index b3973b47f..25fb68ed7 100644 --- a/discojs/discojs-core/src/weights/aggregation.ts +++ b/discojs/discojs-core/src/weights/aggregation.ts @@ -1,8 +1,8 @@ import { List } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' -import type { TensorLike } from './weights_container' -import { WeightsContainer } from './weights_container' +import type { TensorLike } from './weights_container.js' +import { WeightsContainer } from './weights_container.js' type WeightsLike = Iterable diff --git a/discojs/discojs-core/src/weights/index.ts b/discojs/discojs-core/src/weights/index.ts index be0b56855..84a0df956 100644 --- a/discojs/discojs-core/src/weights/index.ts +++ b/discojs/discojs-core/src/weights/index.ts @@ -1,2 +1,2 @@ -export { WeightsContainer } from './weights_container' -export * as aggregation from './aggregation' +export { WeightsContainer } from './weights_container.js' +export * as aggregation from './aggregation.js' diff --git a/discojs/discojs-core/src/weights/weights_container.ts b/discojs/discojs-core/src/weights/weights_container.ts index ff5b4e12f..747d23e30 100644 --- a/discojs/discojs-core/src/weights/weights_container.ts +++ b/discojs/discojs-core/src/weights/weights_container.ts @@ -1,5 +1,5 @@ import { List } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' type Weights = tf.Tensor[] diff --git a/discojs/discojs-core/tsconfig.json b/discojs/discojs-core/tsconfig.json index b313ce878..1e0adf398 100644 --- a/discojs/discojs-core/tsconfig.json +++ b/discojs/discojs-core/tsconfig.json @@ -1,8 +1,8 @@ { - "extends": "../tsconfig.base.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "dist", - "baseUrl": "src" // TODO not needed? + "declaration": true }, "include": ["src"], "exclude": ["**/*.spec.ts"] diff --git a/discojs/discojs-node/.mocharc.json b/discojs/discojs-node/.mocharc.json index 5a26266b1..5a3f09e83 100644 --- a/discojs/discojs-node/.mocharc.json +++ b/discojs/discojs-node/.mocharc.json @@ -2,5 +2,6 @@ "spec": ["src"], "recursive": true, "extension": ["ts"], + "loader": "ts-node/esm", "require": "ts-node/register" } diff --git a/discojs/discojs-node/package.json b/discojs/discojs-node/package.json index 02775fbd7..62a3ccfb7 100644 --- a/discojs/discojs-node/package.json +++ b/discojs/discojs-node/package.json @@ -1,6 +1,7 @@ { "name": "@epfml/discojs-node", "version": "2.1.1", + "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { diff --git a/discojs/discojs-node/src/data/image_loader.spec.ts b/discojs/discojs-node/src/data/image_loader.spec.ts index 4a5369959..5d02d03b1 100644 --- a/discojs/discojs-node/src/data/image_loader.spec.ts +++ b/discojs/discojs-node/src/data/image_loader.spec.ts @@ -1,12 +1,12 @@ import { assert, expect } from 'chai' import { List, Map, Range } from 'immutable' import fs from 'fs' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' import { node as tfNode } from '@tensorflow/tfjs-node' import type { Task } from '@epfml/discojs-core' -import { ImageLoader } from './image_loader' +import { ImageLoader } from './image_loader.js' const readFilesFromDir = (dir: string): string[] => fs.readdirSync(dir).map((file: string) => dir + file) diff --git a/discojs/discojs-node/src/data/index.ts b/discojs/discojs-node/src/data/index.ts index 685b18afb..1db4c045d 100644 --- a/discojs/discojs-node/src/data/index.ts +++ b/discojs/discojs-node/src/data/index.ts @@ -1,3 +1,3 @@ -export { ImageLoader as NodeImageLoader } from './image_loader' -export { TabularLoader as NodeTabularLoader } from './tabular_loader' -export { TextLoader as NodeTextLoader } from './text_loader' +export { ImageLoader as NodeImageLoader } from './image_loader.js' +export { TabularLoader as NodeTabularLoader } from './tabular_loader.js' +export { TextLoader as NodeTextLoader } from './text_loader.js' diff --git a/discojs/discojs-node/src/data/tabular_loader.spec.ts b/discojs/discojs-node/src/data/tabular_loader.spec.ts index c4d45eadb..78365efd3 100644 --- a/discojs/discojs-node/src/data/tabular_loader.spec.ts +++ b/discojs/discojs-node/src/data/tabular_loader.spec.ts @@ -1,10 +1,10 @@ import { assert, expect } from 'chai' import { List } from 'immutable' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' import type { Task } from '@epfml/discojs-core' -import { TabularLoader } from './tabular_loader' +import { TabularLoader } from './tabular_loader.js' const inputFiles = ['../../datasets/titanic_train.csv'] diff --git a/discojs/discojs-node/src/index.ts b/discojs/discojs-node/src/index.ts index 7f165348f..ed3ca8856 100644 --- a/discojs/discojs-node/src/index.ts +++ b/discojs/discojs-node/src/index.ts @@ -1 +1 @@ -export * from './data' +export * from './data/index.js' diff --git a/discojs/discojs-node/tsconfig.json b/discojs/discojs-node/tsconfig.json index b66143c03..71b6902b9 100644 --- a/discojs/discojs-node/tsconfig.json +++ b/discojs/discojs-node/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../tsconfig.base.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { - "types": ["node", "mocha"], + "types": ["mocha", "node"], "outDir": "dist", - "baseUrl": "src" + "declaration": true }, "include": ["src"], "exclude": ["**/*.spec.ts"] diff --git a/discojs/discojs-web/.mocharc.json b/discojs/discojs-web/.mocharc.json index 5a26266b1..5a3f09e83 100644 --- a/discojs/discojs-web/.mocharc.json +++ b/discojs/discojs-web/.mocharc.json @@ -2,5 +2,6 @@ "spec": ["src"], "recursive": true, "extension": ["ts"], + "loader": "ts-node/esm", "require": "ts-node/register" } diff --git a/discojs/discojs-web/package.json b/discojs/discojs-web/package.json index 6fe759f07..b4ce26846 100644 --- a/discojs/discojs-web/package.json +++ b/discojs/discojs-web/package.json @@ -1,6 +1,7 @@ { "name": "@epfml/discojs", "version": "2.1.1", + "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { diff --git a/discojs/discojs-web/src/data/image_loader.ts b/discojs/discojs-web/src/data/image_loader.ts index 537dfe26c..597149557 100644 --- a/discojs/discojs-web/src/data/image_loader.ts +++ b/discojs/discojs-web/src/data/image_loader.ts @@ -1,4 +1,4 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' import { data } from '@epfml/discojs-core' diff --git a/discojs/discojs-web/src/data/index.ts b/discojs/discojs-web/src/data/index.ts index 705a83eb9..41493f2e3 100644 --- a/discojs/discojs-web/src/data/index.ts +++ b/discojs/discojs-web/src/data/index.ts @@ -1,3 +1,3 @@ -export { ImageLoader as WebImageLoader } from './image_loader' -export { TabularLoader as WebTabularLoader } from './tabular_loader' -export { TextLoader as WebTextLoader } from './text_loader' +export { ImageLoader as WebImageLoader } from './image_loader.js' +export { TabularLoader as WebTabularLoader } from './tabular_loader.js' +export { TextLoader as WebTextLoader } from './text_loader.js' diff --git a/discojs/discojs-web/src/data/tabular_loader.ts b/discojs/discojs-web/src/data/tabular_loader.ts index edb9e7d6c..41b34d3f5 100644 --- a/discojs/discojs-web/src/data/tabular_loader.ts +++ b/discojs/discojs-web/src/data/tabular_loader.ts @@ -1,4 +1,4 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' import { data } from '@epfml/discojs-core' diff --git a/discojs/discojs-web/src/data/text_loader.ts b/discojs/discojs-web/src/data/text_loader.ts index 4fdd3c5fc..e83c0866c 100644 --- a/discojs/discojs-web/src/data/text_loader.ts +++ b/discojs/discojs-web/src/data/text_loader.ts @@ -1,4 +1,4 @@ -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs' import { data } from '@epfml/discojs-core' diff --git a/discojs/discojs-web/src/index.ts b/discojs/discojs-web/src/index.ts index f55da3c7a..85355e753 100644 --- a/discojs/discojs-web/src/index.ts +++ b/discojs/discojs-web/src/index.ts @@ -1,2 +1,2 @@ -export * from './data' -export * from './memory' +export * from './data/index.js' +export * from './memory/index.js' diff --git a/discojs/discojs-web/src/memory/index.ts b/discojs/discojs-web/src/memory/index.ts index e23dad6e6..bad0ecca4 100644 --- a/discojs/discojs-web/src/memory/index.ts +++ b/discojs/discojs-web/src/memory/index.ts @@ -1 +1 @@ -export { IndexedDB } from './memory' +export { IndexedDB } from './memory.js' diff --git a/discojs/discojs-web/tsconfig.json b/discojs/discojs-web/tsconfig.json index fcc5151a4..bbf2759e8 100644 --- a/discojs/discojs-web/tsconfig.json +++ b/discojs/discojs-web/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../tsconfig.base.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "lib": ["DOM"], "outDir": "dist", - "baseUrl": "src" + "declaration": true }, "include": ["src"], "exclude": ["**/*.spec.ts"] diff --git a/discojs/tsconfig.base.json b/discojs/tsconfig.base.json deleted file mode 100644 index a6cb0b28a..000000000 --- a/discojs/tsconfig.base.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - // TODO ES6 disallow server's test - "target": "ES5", - "lib": ["ES5"], - - "strict": true, - "noEmitOnError": true, - - "esModuleInterop": true, - "skipLibCheck": true, - "moduleResolution": "node", - "importHelpers": true, - "downlevelIteration": true, // needed by { const server = await runDefaultServer() diff --git a/server/tests/client/decentralized.spec.ts b/server/tests/client/decentralized.spec.ts index 3e25d558e..4c7f8f6cd 100644 --- a/server/tests/client/decentralized.spec.ts +++ b/server/tests/client/decentralized.spec.ts @@ -3,7 +3,7 @@ import type * as http from 'http' import type { Task } from '@epfml/discojs-core' import { aggregator as aggregators, client as clients, defaultTasks } from '@epfml/discojs-core' -import { startServer } from '../../src' +import { startServer } from '../../src/index.js' const TASK = defaultTasks.titanic.getTask() diff --git a/server/tests/client/federated.spec.ts b/server/tests/client/federated.spec.ts index a12839ff2..13d9a79a3 100644 --- a/server/tests/client/federated.spec.ts +++ b/server/tests/client/federated.spec.ts @@ -2,7 +2,7 @@ import type * as http from 'http' import { aggregator as aggregators, client as clients, informant, defaultTasks } from '@epfml/discojs-core' -import { startServer } from '../../src' +import { startServer } from '../../src/index.js' const TASK = defaultTasks.titanic.getTask() diff --git a/server/tests/e2e/decentralized.spec.ts b/server/tests/e2e/decentralized.spec.ts index 29512b1bf..3de1c0832 100644 --- a/server/tests/e2e/decentralized.spec.ts +++ b/server/tests/e2e/decentralized.spec.ts @@ -7,7 +7,7 @@ import { aggregator as aggregators, informant as informants, client as clients, WeightsContainer, defaultTasks, aggregation } from '@epfml/discojs-core' -import { startServer } from '../../src' +import { startServer } from '../../src/index.js' // Mocked aggregators with easy-to-fetch aggregation results class MockMeanAggregator extends aggregators.MeanAggregator { diff --git a/server/tests/e2e/federated.spec.ts b/server/tests/e2e/federated.spec.ts index c06045068..468d962e6 100644 --- a/server/tests/e2e/federated.spec.ts +++ b/server/tests/e2e/federated.spec.ts @@ -11,7 +11,7 @@ import { } from '@epfml/discojs-core' import { NodeImageLoader, NodeTabularLoader, NodeTextLoader } from '@epfml/discojs-node' -import { startServer } from '../../src' +import { startServer } from '../../src/index.js' describe('end-to-end federated', function () { this.timeout(100_000) diff --git a/server/tsconfig.json b/server/tsconfig.json index 1d705d85a..62b037725 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -1,20 +1,8 @@ { + "extends": "../tsconfig.base.json", "compilerOptions": { - "target": "ES5", - "lib": ["ES5"], - - "strict": true, - - "esModuleInterop": true, - "skipLibCheck": true, - "moduleResolution": "node", - "downlevelIteration": true, - - "declaration": true, - "outDir": "dist", - - "baseUrl": "src", + "declaration": true }, "include": ["src"] } diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..7590b2094 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "node16", + "target": "es2022", + + "strict": true, + + // tfjs and others + "skipLibCheck": true, + + // don't pollute + "noEmitOnError": true + } +} + diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 3db538a75..63b6999b0 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,17 +1,4 @@ { - "compilerOptions": { - // TODO ES6 disallow server's test - "target": "ES5", - "lib": ["ES5"], - - "strict": true, - "noEmit": true, - - "esModuleInterop": true, - "skipLibCheck": true, - "moduleResolution": "node", - "importHelpers": true, - "downlevelIteration": true, // needed by Date: Mon, 18 Mar 2024 18:20:46 +0100 Subject: [PATCH 17/37] *: upgrade eslint --- .eslintrc.js | 14 - cli/.eslintrc.json | 5 - cli/package.json | 2 +- cli/src/data.ts | 2 +- discojs/discojs-core/package.json | 2 +- discojs/discojs-core/src/aggregator/robust.ts | 17 +- discojs/discojs-core/src/client/base.ts | 40 +- .../src/client/decentralized/base.ts | 14 +- .../client/decentralized/peer_pool.spec.ts | 12 +- .../src/client/decentralized/peer_pool.ts | 2 +- .../src/client/event_connection.ts | 17 +- .../discojs-core/src/client/federated/base.ts | 42 +- discojs/discojs-core/src/client/utils.ts | 2 +- discojs/discojs-core/src/dataset/data/data.ts | 19 +- .../src/dataset/data/image_data.ts | 8 +- .../data/preprocessing/image_preprocessing.ts | 2 +- .../preprocessing/tabular_preprocessing.ts | 3 +- .../data/preprocessing/text_preprocessing.ts | 18 +- .../src/dataset/data/text_data.ts | 4 +- .../src/dataset/data_loader/tabular_loader.ts | 2 +- .../src/default_tasks/lus_covid.ts | 4 +- .../discojs-core/src/default_tasks/mnist.ts | 4 +- .../src/default_tasks/skin_mnist.ts | 4 +- .../discojs-core/src/default_tasks/titanic.ts | 4 +- .../src/default_tasks/wikitext.ts | 4 +- discojs/discojs-core/src/memory/empty.ts | 35 +- discojs/discojs-core/src/models/gpt/config.ts | 2 +- discojs/discojs-core/src/models/gpt/index.ts | 4 +- discojs/discojs-core/src/models/gpt/model.ts | 86 +- discojs/discojs-core/src/models/gpt/train.ts | 2 +- discojs/discojs-core/src/models/tfjs.ts | 12 +- .../discojs-core/src/serialization/model.ts | 9 +- .../discojs-core/src/serialization/weights.ts | 3 +- discojs/discojs-core/src/task/digest.ts | 2 +- .../src/task/training_information.ts | 10 +- .../training/trainer/distributed_trainer.ts | 4 +- .../src/training/trainer/local_trainer.ts | 6 +- .../src/training/trainer/trainer.ts | 9 +- .../discojs-core/src/validation/validator.ts | 4 +- .../src/weights/aggregation.spec.ts | 6 +- discojs/discojs-node/.eslintrc.json | 5 - discojs/discojs-node/package.json | 2 +- .../src/data/image_loader.spec.ts | 8 +- discojs/discojs-node/src/data/image_loader.ts | 4 +- .../src/data/tabular_loader.spec.ts | 13 +- .../discojs-node/src/data/tabular_loader.ts | 4 +- discojs/discojs-web/.eslintrc.json | 5 - discojs/discojs-web/package.json | 2 +- .../discojs-web/src/data/tabular_loader.ts | 3 +- discojs/discojs-web/src/data/text_loader.ts | 4 +- docs/examples/.eslintrc.js | 18 - docs/examples/custom_task.ts | 4 +- docs/examples/eslint.config.js | 19 + docs/examples/package.json | 10 +- docs/examples/training.ts | 2 +- docs/examples/tsconfig.eslint.json | 4 - eslint.config.js | 17 + package-lock.json | 1228 +++++++++-------- package.json | 9 +- server/.eslintrc.json | 5 - server/package.json | 2 +- server/src/router/federated/server.ts | 13 +- server/src/router/tasks.ts | 27 +- server/src/tasks.ts | 21 +- server/tests/e2e/decentralized.spec.ts | 4 +- tsconfig.eslint.json | 2 +- 66 files changed, 972 insertions(+), 904 deletions(-) delete mode 100644 .eslintrc.js delete mode 100644 cli/.eslintrc.json delete mode 100644 discojs/discojs-node/.eslintrc.json delete mode 100644 discojs/discojs-web/.eslintrc.json delete mode 100644 docs/examples/.eslintrc.js create mode 100644 docs/examples/eslint.config.js delete mode 100644 docs/examples/tsconfig.eslint.json delete mode 100644 server/.eslintrc.json diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index f268058c0..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -// @ts-check - -module.exports = { - root: true, - extends: "standard-with-typescript", - parserOptions: { - project: "./tsconfig.eslint.json", - tsconfigRootDir: __dirname, - }, - ignorePatterns: ["**/dist/", "*.d.ts"], - env: { - mocha: true, - }, -}; diff --git a/cli/.eslintrc.json b/cli/.eslintrc.json deleted file mode 100644 index 10d223883..000000000 --- a/cli/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "node": true - } -} diff --git a/cli/package.json b/cli/package.json index d8f3f9079..09052f1ab 100644 --- a/cli/package.json +++ b/cli/package.json @@ -7,7 +7,7 @@ "watch": "nodemon --ext ts --ignore dist --watch ../discojs/discojs-node/dist --watch ../server/dist --watch . --exec npm run", "start": "npm run build && node dist/cli.js", "build": "tsc", - "lint": "npx eslint --ext ts --max-warnings 0 .", + "lint": "npx eslint .", "test": ": nothing" }, "author": "", diff --git a/cli/src/data.ts b/cli/src/data.ts index 58013f4da..abfcb3c0a 100644 --- a/cli/src/data.ts +++ b/cli/src/data.ts @@ -32,7 +32,7 @@ async function simplefaceData (task: Task): Promise { const filesPerFolder = [youngFiles, oldFiles] - const labels = filesPerFolder.flatMap((files, index) => Array(files.length).fill(index)) + const labels = filesPerFolder.flatMap((files, index) => Array(files.length).fill(`${index}`)) const files = filesPerFolder.flat() return await new NodeImageLoader(task).loadAll(files, { labels }) diff --git a/discojs/discojs-core/package.json b/discojs/discojs-core/package.json index 66475feda..4d922988e 100644 --- a/discojs/discojs-core/package.json +++ b/discojs/discojs-core/package.json @@ -7,7 +7,7 @@ "scripts": { "watch": "nodemon --ext ts --ignore dist --exec npm run", "build": "tsc", - "lint": "npx eslint --ext ts --max-warnings 0 .", + "lint": "npx eslint .", "test": "mocha", "docs": "typedoc ./src/index.ts --theme oxide" }, diff --git a/discojs/discojs-core/src/aggregator/robust.ts b/discojs/discojs-core/src/aggregator/robust.ts index 1a5aab72d..6dd0c58e4 100644 --- a/discojs/discojs-core/src/aggregator/robust.ts +++ b/discojs/discojs-core/src/aggregator/robust.ts @@ -1,3 +1,5 @@ +// TODO remove as nothing is implemented + import { Base as Aggregator } from './base.js' import type { client, Model, WeightsContainer } from '../index.js' @@ -8,11 +10,8 @@ export type Momentum = WeightsContainer // TODO @s314cy: store previous round contributions + be able to access own previous contribution // for computing the momentum export class RobustAggregator extends Aggregator { - // TODO @s314y: move to task definition - private readonly beta = 1 - constructor ( - private readonly tauPercentile: number, + _tauPercentile: number, model?: Model, roundCutoff?: number, communicationRounds?: number @@ -35,19 +34,15 @@ export class RobustAggregator extends Aggregator { return false } - aggregate (): void { + override aggregate (): void { throw new Error('not implemented') } - makePayloads (weights: WeightsContainer): Map { - return undefined as any + override makePayloads (): Map { + throw new Error('not implemented') } isFull (): boolean { return true } - - private computeMomentum (a: WeightsContainer, b: WeightsContainer): WeightsContainer { - return a.sub(b).mul(1 - this.beta).add(a.mul(this.beta)) - } } diff --git a/discojs/discojs-core/src/client/base.ts b/discojs/discojs-core/src/client/base.ts index 459c2e728..308de7ef6 100644 --- a/discojs/discojs-core/src/client/base.ts +++ b/discojs/discojs-core/src/client/base.ts @@ -67,46 +67,46 @@ export abstract class Base { /** * Communication callback called once at the beginning of the training instance. - * @param weights The initial model weights - * @param trainingInformant The training informant + * @param _weights The initial model weights + * @param _trainingInformant The training informant */ async onTrainBeginCommunication ( - weights: WeightsContainer, - trainingInformant: TrainingInformant + _weights: WeightsContainer, + _trainingInformant: TrainingInformant ): Promise {} /** * Communication callback called once at the end of the training instance. - * @param weights The final model weights - * @param trainingInformant The training informant + * @param _weights The final model weights + * @param _trainingInformant The training informant */ async onTrainEndCommunication ( - weights: WeightsContainer, - trainingInformant: TrainingInformant + _weights: WeightsContainer, + _trainingInformant: TrainingInformant ): Promise {} /** * Communication callback called at the beginning of every training round. - * @param weights The most recent local weight updates - * @param round The current training round - * @param trainingInformant The training informant + * @param _weights The most recent local weight updates + * @param _round The current training round + * @param _trainingInformant The training informant */ async onRoundBeginCommunication ( - weights: WeightsContainer, - round: number, - trainingInformant: TrainingInformant + _weights: WeightsContainer, + _round: number, + _trainingInformant: TrainingInformant ): Promise {} /** * Communication callback called the end of every training round. - * @param weights The most recent local weight updates - * @param round The current training round - * @param trainingInformant The training informant + * @param _weights The most recent local weight updates + * @param _round The current training round + * @param _trainingInformant The training informant */ async onRoundEndCommunication ( - weights: WeightsContainer, - round: number, - trainingInformant: TrainingInformant + _weights: WeightsContainer, + _round: number, + _trainingInformant: TrainingInformant ): Promise {} get nodes (): Set { diff --git a/discojs/discojs-core/src/client/decentralized/base.ts b/discojs/discojs-core/src/client/decentralized/base.ts index 2fbed69ef..bdf03cab3 100644 --- a/discojs/discojs-core/src/client/decentralized/base.ts +++ b/discojs/discojs-core/src/client/decentralized/base.ts @@ -1,6 +1,6 @@ import { Map, Set } from 'immutable' -import { type TrainingInformant, type WeightsContainer, serialization } from '../../index.js' +import { type WeightsContainer, serialization } from '../../index.js' import { Client, type NodeID } from '../index.js' import { type, type ClientConnected } from '../messages.js' import { timeout } from '../utils.js' @@ -125,7 +125,7 @@ export class Base extends Client { this.pool = new PeerPool(peerIdMsg.id) } - async disconnect (): Promise { + disconnect (): Promise { // Disconnect from peers this.pool?.shutdown() this.pool = undefined @@ -139,12 +139,13 @@ export class Base extends Client { this.server?.disconnect() this._server = undefined this._ownId = undefined + + return Promise.resolve() } - async onRoundBeginCommunication ( - weights: WeightsContainer, + override async onRoundBeginCommunication ( + _: WeightsContainer, round: number, - trainingInformant: TrainingInformant ): Promise { // Reset peers list at each round of training to make sure client works with an updated peers // list, maintained by the server. Adds any received weights to the aggregator. @@ -153,10 +154,9 @@ export class Base extends Client { this.aggregationResult = this.aggregator.receiveResult() } - async onRoundEndCommunication ( + override async onRoundEndCommunication ( weights: WeightsContainer, round: number, - trainingInformant: TrainingInformant ): Promise { let result = weights diff --git a/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts b/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts index 23313672c..ab6f015ac 100644 --- a/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts +++ b/discojs/discojs-core/src/client/decentralized/peer_pool.spec.ts @@ -12,7 +12,7 @@ describe('peer pool', function () { let pools: Map - beforeEach(async () => { + beforeEach(() => { const count = 3 pools = Map(Range(1, count + 1).map(String).map((id) => @@ -26,8 +26,8 @@ describe('peer pool', function () { function mockServer (poolId: string): EventConnection { return { - send: (msg: any): void => { - const signal: messages.SignalForPeer = msg + send: (msg): void => { + const signal = msg as messages.SignalForPeer const otherPool = pools.get(signal.peer) if (otherPool === undefined) { throw new Error(`signal for unknown pool: ${signal.peer}`) @@ -71,7 +71,7 @@ describe('peer pool', function () { const messages = peersSets .entrySeq() - .map(([poolID, peers]) => + .map(([_, peers]) => peers .keySeq().map((id) => mockWeights(id)) .toArray()) @@ -81,7 +81,7 @@ describe('peer pool', function () { peersSets .entrySeq() .forEach(([poolID, peers]) => - peers.forEach((peer, id) => { peer.send(mockWeights(poolID)) })) + peers.forEach((peer) => { peer.send(mockWeights(poolID)) })) const exchanged = (await Promise.all( peersSets @@ -106,7 +106,7 @@ describe('peer pool', function () { await assertCanSendMessagesToEach(poolsPeers) }) - it('doesn\'t reconnect known peers', async () => { + it("doesn't reconnect known peers", async () => { const poolsPeersFirst = await getAllPeers(pools) await assertCanSendMessagesToEach(poolsPeersFirst) diff --git a/discojs/discojs-core/src/client/decentralized/peer_pool.ts b/discojs/discojs-core/src/client/decentralized/peer_pool.ts index 154dbc201..f011ba21c 100644 --- a/discojs/discojs-core/src/client/decentralized/peer_pool.ts +++ b/discojs/discojs-core/src/client/decentralized/peer_pool.ts @@ -51,7 +51,7 @@ export class PeerPool { )) console.info(`[${this.id}] asked to connect new peers:`, newPeers.keySeq().toJS()) - const newPeersConnections = newPeers.map((peer, id) => new PeerConnection(this.id, peer, signallingServer)) + const newPeersConnections = newPeers.map((peer) => new PeerConnection(this.id, peer, signallingServer)) // adding peers to pool before connecting them because they must be set to call signal on them this.peers = this.peers.merge(newPeersConnections) diff --git a/discojs/discojs-core/src/client/event_connection.ts b/discojs/discojs-core/src/client/event_connection.ts index 177358f99..4abe85d9b 100644 --- a/discojs/discojs-core/src/client/event_connection.ts +++ b/discojs/discojs-core/src/client/event_connection.ts @@ -30,7 +30,7 @@ export async function waitMessageWithTimeout (connection: EventC export class PeerConnection extends EventEmitter<{ [K in type]: NarrowMessage }> implements EventConnection { constructor ( - private readonly ownId: NodeID, + private readonly _ownId: NodeID, private readonly peer: Peer, private readonly signallingServer: EventConnection ) { @@ -48,7 +48,7 @@ export class PeerConnection extends EventEmitter<{ [K in type]: NarrowMessage }) this.peer.on('data', (data) => { - const msg = msgpack.decode(data) + const msg: unknown = msgpack.decode(data) if (!decentralizedMessages.isPeerMessage(msg)) { throw new Error(`invalid message received: ${JSON.stringify(msg)}`) @@ -83,27 +83,26 @@ export class PeerConnection extends EventEmitter<{ [K in type]: NarrowMessage export class WebSocketServer extends EventEmitter<{ [K in type]: NarrowMessage }> implements EventConnection { private constructor ( private readonly socket: isomorphic.WebSocket, - private readonly validateReceived?: (msg: any) => boolean, - private readonly validateSent?: (msg: any) => boolean + private readonly validateSent?: (msg: Message) => boolean ) { super() } static async connect (url: URL, - validateReceived?: (msg: any) => boolean, - validateSent?: (msg: any) => boolean): Promise { + validateReceived: (msg: unknown) => msg is Message, + validateSent: (msg: Message) => boolean): Promise { const ws = new isomorphic.WebSocket(url) ws.binaryType = 'arraybuffer' - const server: WebSocketServer = new WebSocketServer(ws, validateReceived, validateSent) + const server: WebSocketServer = new WebSocketServer(ws, validateSent) ws.onmessage = (event: isomorphic.MessageEvent) => { if (!(event.data instanceof ArrayBuffer)) { throw new Error('server did not send an ArrayBuffer') } - const msg = msgpack.decode(new Uint8Array(event.data)) + const msg: unknown = msgpack.decode(new Uint8Array(event.data)) // Validate message format - if (validateReceived !== undefined && !validateReceived(msg)) { + if (!validateReceived(msg)) { throw new Error(`invalid message received: ${JSON.stringify(msg)}`) } diff --git a/discojs/discojs-core/src/client/federated/base.ts b/discojs/discojs-core/src/client/federated/base.ts index 83c9d6f5f..75cc68fe7 100644 --- a/discojs/discojs-core/src/client/federated/base.ts +++ b/discojs/discojs-core/src/client/federated/base.ts @@ -1,6 +1,6 @@ import { Map } from 'immutable' -import { serialization, type informant, type MetadataKey, type MetadataValue, type WeightsContainer, type TrainingInformant } from '../../index.js' +import { serialization, type informant, type MetadataKey, type MetadataValue, type WeightsContainer } from '../../index.js' import { type NodeID } from '../types.js' import { Base as Client } from '../base.js' import { type, type ClientConnected } from '../messages.js' @@ -72,18 +72,20 @@ export class Base extends Client { /** * Disconnection process when user quits the task. */ - async disconnect (): Promise { + override disconnect (): Promise { this.server.disconnect() this._server = undefined this._ownId = undefined this.aggregator.setNodes(this.aggregator.nodes.delete(Base.SERVER_NODE_ID)) + + return Promise.resolve() } /** * Send a message containing our local weight updates to the federated server. * And waits for the server to reply with the most recent aggregated weights - * @param weights The weight updates to send + * @param payload The weight updates to send */ private async sendPayloadAndReceiveResult (payload: WeightsContainer): Promise { const msg: messages.SendPayload = { @@ -144,25 +146,6 @@ export class Base extends Client { } } - /** - * Sends metadata to the federated server. Metadata is gathered server-side according - * to the key given by clients. - * @param key The metadata key - * @param value The metadata value - */ - async sendMetadata (key: MetadataKey, value: MetadataValue): Promise { - const msg: messages.SendMetadata = { - type: type.SendMetadata, - taskId: this.task.id, - nodeId: this.ownId, - round: this.aggregator.round, - key, - value - } - - this.server.send(msg) - } - /** * Fetch the metadata values maintained by the federated server, for a given metadata key. * The values are indexed by node id. @@ -185,26 +168,23 @@ export class Base extends Client { const received = await waitMessageWithTimeout(this.server, type.ReceiveServerMetadata) if (received.metadataMap !== undefined) { this.metadataMap = Map( - received.metadataMap.filter(([k, v]) => v !== undefined) as Array<[NodeID, MetadataValue]> + received.metadataMap.filter(([_, v]) => v !== undefined) as Array<[NodeID, MetadataValue]> ) } return this.metadataMap } - async onRoundBeginCommunication ( - weights: WeightsContainer, - round: number, informant: - TrainingInformant - ): Promise { + override onRoundBeginCommunication (): Promise { // Prepare the result promise for the incoming round this.aggregationResult = this.aggregator.receiveResult() + + return Promise.resolve() } - async onRoundEndCommunication ( + override async onRoundEndCommunication ( weights: WeightsContainer, round: number, - trainingInformant: informant.FederatedInformant ): Promise { // NB: For now, we suppose a fully-federated setting. @@ -229,6 +209,4 @@ export class Base extends Client { // Pull statistics about the contributors // await this.receiveStatistics(trainingInformant) } - - async onTrainEndCommunication (): Promise {} } diff --git a/discojs/discojs-core/src/client/utils.ts b/discojs/discojs-core/src/client/utils.ts index 4cbe0d11b..877ed8357 100644 --- a/discojs/discojs-core/src/client/utils.ts +++ b/discojs/discojs-core/src/client/utils.ts @@ -2,7 +2,7 @@ export const MAX_WAIT_PER_ROUND = 15_000 export async function timeout (ms = MAX_WAIT_PER_ROUND): Promise { - return await new Promise((resolve, reject) => { + return await new Promise((_, reject) => { setTimeout(() => { reject(new Error('timeout')) }, ms) }) } diff --git a/discojs/discojs-core/src/dataset/data/data.ts b/discojs/discojs-core/src/dataset/data/data.ts index 2aa766582..c1a57e6ab 100644 --- a/discojs/discojs-core/src/dataset/data/data.ts +++ b/discojs/discojs-core/src/dataset/data/data.ts @@ -18,12 +18,12 @@ export abstract class Data { public readonly task: Task, public readonly size?: number) {} - static async init ( - dataset: Dataset, - task: Task, - size?: number + static init ( + _dataset: Dataset, + _task: Task, + _size?: number ): Promise { - throw new Error('abstract') + return Promise.reject(new Error('abstract')) } /** @@ -85,11 +85,12 @@ export abstract class Data { return (x) => x } - const preprocessingChain = applyPreprocessing - .reduce((acc: (x: tf.TensorContainer, task: Task) => tf.TensorContainer, fn) => - (x: tf.TensorContainer, task: Task) => fn(acc(x, this.task), this.task)) + const preprocessingChain = applyPreprocessing.reduce((acc, fn) => + (x: tf.TensorContainer) => fn(acc(x), this.task), + (x: tf.TensorContainer) => x, + ) - return (x: tf.TensorContainer) => preprocessingChain(x, this.task) + return (x: tf.TensorContainer) => preprocessingChain(x) } /** diff --git a/discojs/discojs-core/src/dataset/data/image_data.ts b/discojs/discojs-core/src/dataset/data/image_data.ts index 5545a085d..0fbad845a 100644 --- a/discojs/discojs-core/src/dataset/data/image_data.ts +++ b/discojs/discojs-core/src/dataset/data/image_data.ts @@ -43,7 +43,13 @@ export class ImageData extends Data { throw new Error() } } catch (e) { - throw new Error('Data input format is not compatible with the chosen task') + let cause + if (e instanceof Error) { + cause = e + } else { + console.error("got invalid Error type", e) + } + throw new Error('Data input format is not compatible with the chosen task', { cause }) } } diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts index 4b1bd13a0..c9b5f7c8f 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts @@ -33,7 +33,7 @@ const resize: PreprocessingFunction = { const normalize: PreprocessingFunction = { type: ImagePreprocessing.Normalize, - apply: (entry: tf.TensorContainer, task: Task): tf.TensorContainer => { + apply: (entry: tf.TensorContainer): tf.TensorContainer => { const { xs, ys } = entry as ImageEntry return { xs: xs.div(tf.scalar(255)), diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts index a3de0201b..2e91ea5b8 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts @@ -1,7 +1,6 @@ import type tf from '@tensorflow/tfjs' import { List } from 'immutable' -import type { Task } from '../../../index.js' import type { PreprocessingFunction } from './base.js' /** @@ -19,7 +18,7 @@ interface TabularEntry extends tf.TensorContainerObject { const sanitize: PreprocessingFunction = { type: TabularPreprocessing.Sanitize, - apply: (entry: tf.TensorContainer, task: Task): tf.TensorContainer => { + apply: (entry: tf.TensorContainer): tf.TensorContainer => { // if preprocessing a dataset without labels, then the entry is an array of numbers if (Array.isArray(entry)) { return entry.map(i => i ?? 0) diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index 239b718bd..92ab9d188 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -1,7 +1,6 @@ import { List } from 'immutable' import * as tf from '@tensorflow/tfjs' -import type { Task } from '../../../index.js' import type { PreprocessingFunction } from './base.js' /** @@ -22,11 +21,12 @@ interface TokenizedEntry extends tf.TensorContainerObject { ys: tf.Tensor1D } -const gpt3Tokenizer = null as any +// TODO that'll fail everytime +const gpt3Tokenizer = null as unknown as { encode: (_: string) => { bpe: number[]; text: string[] } } const padding: PreprocessingFunction = { type: TextPreprocessing.Padding, - apply: (x: tf.TensorContainer, task: Task) => { + apply: (x: tf.TensorContainer) => { const { xs, ys } = x as TokenizedEntry // TODO: add to task definition const maxLength = 64 @@ -44,18 +44,10 @@ const padding: PreprocessingFunction = { const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, - apply: (x: tf.TensorContainer, task: Task) => { + apply: (x: tf.TensorContainer) => { const { xs, ys } = x as TextEntry - const params = task.trainingInformation - // TODO: add to task definition - const tokenizer = (params as unknown as any).tokenizer - let tokenized: number[] - if (tokenizer === undefined) { - tokenized = gpt3Tokenizer.encode(xs[0]).bpe - } else { - throw new Error('tokenizer not implemented') - } + const tokenized = gpt3Tokenizer.encode(xs[0]).bpe return { xs: tf.tensor(tokenized), diff --git a/discojs/discojs-core/src/dataset/data/text_data.ts b/discojs/discojs-core/src/dataset/data/text_data.ts index 64b52aad4..fd7c27b31 100644 --- a/discojs/discojs-core/src/dataset/data/text_data.ts +++ b/discojs/discojs-core/src/dataset/data/text_data.ts @@ -10,12 +10,12 @@ import { TEXT_PREPROCESSING } from './preprocessing/index.js' export class TextData extends Data { public readonly availablePreprocessing = TEXT_PREPROCESSING - static async init ( + static init ( dataset: Dataset, task: Task, size?: number ): Promise { - return new TextData(dataset, task, size) + return Promise.resolve(new TextData(dataset, task, size)) } protected create (dataset: Dataset, task: Task, size?: number): TextData { diff --git a/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts b/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts index 377345d92..593e8da4e 100644 --- a/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts +++ b/discojs/discojs-core/src/dataset/data_loader/tabular_loader.ts @@ -73,7 +73,7 @@ export abstract class TabularLoader extends DataLoader { ys: Object.values(ys) } } else { - return Object.values(t) + return t } } throw new TypeError('Expected TensorContainerObject') diff --git a/discojs/discojs-core/src/default_tasks/lus_covid.ts b/discojs/discojs-core/src/default_tasks/lus_covid.ts index e789b4419..9d792332d 100644 --- a/discojs/discojs-core/src/default_tasks/lus_covid.ts +++ b/discojs/discojs-core/src/default_tasks/lus_covid.ts @@ -40,7 +40,7 @@ export const lusCovid: TaskProvider = { } }, - async getModel (): Promise { + getModel (): Promise { const imageHeight = 100 const imageWidth = 100 const imageChannels = 3 @@ -93,6 +93,6 @@ export const lusCovid: TaskProvider = { metrics: ['accuracy'] }) - return new models.TFJS(model) + return Promise.resolve(new models.TFJS(model)) } } diff --git a/discojs/discojs-core/src/default_tasks/mnist.ts b/discojs/discojs-core/src/default_tasks/mnist.ts index 559d9cd0f..4e0b62ee6 100644 --- a/discojs/discojs-core/src/default_tasks/mnist.ts +++ b/discojs/discojs-core/src/default_tasks/mnist.ts @@ -40,7 +40,7 @@ export const mnist: TaskProvider = { } }, - async getModel (): Promise { + getModel (): Promise { const model = tf.sequential() model.add( @@ -69,6 +69,6 @@ export const mnist: TaskProvider = { metrics: ['accuracy'] }) - return new models.TFJS(model) + return Promise.resolve(new models.TFJS(model)) } } diff --git a/discojs/discojs-core/src/default_tasks/skin_mnist.ts b/discojs/discojs-core/src/default_tasks/skin_mnist.ts index b688ab9e6..73a682ab4 100644 --- a/discojs/discojs-core/src/default_tasks/skin_mnist.ts +++ b/discojs/discojs-core/src/default_tasks/skin_mnist.ts @@ -47,7 +47,7 @@ export const skinMnist: TaskProvider = { } }, - async getModel (): Promise { + getModel (): Promise { const numClasses = 7 const size = 28 @@ -98,6 +98,6 @@ export const skinMnist: TaskProvider = { metrics: ['accuracy'] }) - return new models.TFJS(model) + return Promise.resolve(new models.TFJS(model)) } } diff --git a/discojs/discojs-core/src/default_tasks/titanic.ts b/discojs/discojs-core/src/default_tasks/titanic.ts index f70170f98..fba223e32 100644 --- a/discojs/discojs-core/src/default_tasks/titanic.ts +++ b/discojs/discojs-core/src/default_tasks/titanic.ts @@ -71,7 +71,7 @@ export const titanic: TaskProvider = { } }, - async getModel (): Promise { + getModel (): Promise { const model = tf.sequential() model.add( @@ -92,6 +92,6 @@ export const titanic: TaskProvider = { metrics: ['accuracy'] }) - return new models.TFJS(model) + return Promise.resolve(new models.TFJS(model)) } } diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 60ca82e34..c83d9d639 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -34,7 +34,7 @@ export const wikitext: TaskProvider = { } }, - async getModel (): Promise { - return new models.GPT() + getModel (): Promise { + return Promise.resolve(new models.GPT()) } } diff --git a/discojs/discojs-core/src/memory/empty.ts b/discojs/discojs-core/src/memory/empty.ts index 69a73666e..5e5f566d7 100644 --- a/discojs/discojs-core/src/memory/empty.ts +++ b/discojs/discojs-core/src/memory/empty.ts @@ -7,40 +7,41 @@ import { Memory } from './base.js' * Represents an empty model memory. */ export class Empty extends Memory { - async getModelMetadata (): Promise { - return undefined + getModelMetadata (): Promise { + return Promise.resolve(undefined) } - async contains (): Promise { - return false + contains (): Promise { + return Promise.resolve(false) } - async getModel (): Promise { - throw new Error('empty') + getModel (): Promise { + return Promise.reject(new Error('empty')) } - async loadModel (): Promise { - throw new Error('empty') + loadModel (): Promise { + return Promise.reject(new Error('empty')) } - async updateWorkingModel (): Promise { + updateWorkingModel (): Promise { // nothing to do + return Promise.resolve() } - async saveWorkingModel (): Promise { - return undefined + saveWorkingModel (): Promise { + return Promise.resolve(undefined) } - async saveModel (): Promise { - return undefined + saveModel (): Promise { + return Promise.resolve(undefined) } async deleteModel (): Promise { // nothing to do } - async downloadModel (): Promise { - throw new Error('empty') + downloadModel (): Promise { + return Promise.reject(new Error('empty')) } pathFor (): Path { @@ -51,7 +52,7 @@ export class Empty extends Memory { throw new Error('empty') } - async duplicateSource (): Promise { - return undefined + duplicateSource (): Promise { + return Promise.resolve(undefined) } } diff --git a/discojs/discojs-core/src/models/gpt/config.ts b/discojs/discojs-core/src/models/gpt/config.ts index b8e879dfb..515249c0e 100644 --- a/discojs/discojs-core/src/models/gpt/config.ts +++ b/discojs/discojs-core/src/models/gpt/config.ts @@ -7,7 +7,7 @@ type ModelType = | 'gpt-micro' | 'gpt-nano' -interface ModelSize { +export interface ModelSize { nLayer?: number nHead?: number nEmbd?: number diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 9314c6f20..19876869b 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -123,13 +123,13 @@ export class GPT extends Model { } } - override async predict (input: Sample): Promise { + override predict (input: Sample): Promise { const ret = this.model.predict(input) if (Array.isArray(ret)) { throw new Error('prediction yield many Tensors but should have only returned one') } - return ret + return Promise.resolve(ret) } static deserialize (weights: WeightsContainer): Model { diff --git a/discojs/discojs-core/src/models/gpt/model.ts b/discojs/discojs-core/src/models/gpt/model.ts index e40acaa33..422819cb2 100644 --- a/discojs/discojs-core/src/models/gpt/model.ts +++ b/discojs/discojs-core/src/models/gpt/model.ts @@ -1,6 +1,6 @@ import * as tf from '@tensorflow/tfjs' -import type { GPTConfig } from './config.js' +import type { GPTConfig, ModelSize } from './config.js' import { getModelSizes, DEFAULT_CONFIG } from './config.js' import { train } from './train.js' import type { TrainingCallbacks } from './types.js' @@ -12,7 +12,7 @@ class Range extends tf.layers.Layer { return inputShape } - call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { + call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { return tf.tidy(() => { if (Array.isArray(input)) { // TODO support multitensor @@ -34,7 +34,7 @@ class LogLayer extends tf.layers.Layer { return inputShape } - call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { + call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { return tf.tidy(() => { if (Array.isArray(input)) { input = input[0] @@ -78,7 +78,7 @@ class CausalSelfAttentionBase extends tf.layers.Layer { return Object.assign({}, config, this.config) } - call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { + call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { return tf.tidy(() => { if (Array.isArray(input)) { input = input[0] @@ -180,7 +180,7 @@ class CausalSelfAttention extends tf.layers.Layer { return Object.assign({}, config, this.config) } - call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { + call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { return tf.tidy(() => { if (this.cAttnKernel === undefined || this.cAttnBias === undefined || @@ -254,7 +254,7 @@ class GELU extends tf.layers.Layer { return inputShape } - call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { + call (input: tf.Tensor | tf.Tensor[], kwargs: Record): tf.Tensor | tf.Tensor[] { return tf.tidy(() => { if (Array.isArray(input)) { // TODO support multitensor @@ -279,37 +279,33 @@ class GELU extends tf.layers.Layer { } tf.serialization.registerClass(GELU) -function MLP (conf: any): tf.LayersModel { - const config = Object.assign({ name: 'mlp' }, conf) - const inputs = tf.input({ shape: [config.blockSize, config.nEmbd] }) - let x - x = tf.layers - .dense({ - name: config.name + '/c_fc', +type MLPConfig = Required & Record<'blockSize' | 'residDrop', number> + +function MLP (config: MLPConfig): tf.LayersModel { + return tf.sequential({ layers: [ + tf.layers.dense({ + name: 'mlp/c_fc', units: 4 * config.nEmbd, inputDim: config.nEmbd, inputShape: [config.blockSize, config.nEmbd] - }) - .apply(inputs) - x = new GELU().apply(x) - x = tf.layers - .dense({ - name: config.name + '/c_proj', + }), + new GELU(), + tf.layers.dense({ + name: 'mlp/c_proj', units: config.nEmbd, inputDim: 4 * config.nEmbd, inputShape: [config.blockSize, 4 * config.nEmbd] - }) - .apply(x) - x = tf.layers - .dropout({ - name: config.name + '/drop', + }), + tf.layers.dropout({ + name: 'mlp/drop', rate: config.residDrop - }) - .apply(x) - return tf.model({ inputs, outputs: x as any }) + }), + ]}) } -function Block (conf: CausalSelfAttentionConfig & { debug: boolean }): tf.LayersModel { +type BlockConfig = CausalSelfAttentionConfig & MLPConfig & { debug: boolean } + +function Block (conf: BlockConfig): tf.LayersModel { const config = Object.assign({ name: 'h' }, conf) const inputs = tf.input({ shape: [config.blockSize, config.nEmbd] }) let x1, x2 @@ -322,15 +318,16 @@ function Block (conf: CausalSelfAttentionConfig & { debug: boolean }): tf.Layers x1 = new CausalSelfAttention( Object.assign({}, config, { name: config.name + '/attn' }) ).apply(x1) - x1 = tf.layers.add().apply([inputs, x1 as any]) + x1 = tf.layers.add().apply([inputs, x1 as tf.SymbolicTensor]) x2 = tf.layers .layerNormalization({ name: config.name + '/ln_2', epsilon: 1e-5 }) .apply(x1) x2 = MLP(Object.assign({}, config, { name: config.name + '/mlp' })).apply( x2 ) - x2 = tf.layers.add().apply([x1 as any, x2 as any]) - return tf.model({ name: config.name, inputs, outputs: x2 as any }) + x2 = tf.layers.add().apply([x1 as tf.SymbolicTensor, x2 as tf.SymbolicTensor]) + + return tf.model({ name: config.name, inputs, outputs: x2 as tf.SymbolicTensor }) } function GPT (conf: GPTConfig): tf.LayersModel { @@ -342,8 +339,6 @@ function GPT (conf: GPTConfig): tf.LayersModel { const modelSizes = getModelSizes(conf.modelType) const config = Object.assign({}, configDefaults, conf, modelSizes) - console.log('IN MODEL CONFIG', config) - const inputs = tf.input({ shape: [null] }) const tokEmb = config.tokEmb @@ -356,7 +351,7 @@ function GPT (conf: GPTConfig): tf.LayersModel { embeddingsRegularizer: undefined, activityRegularizer: undefined }) - .apply(inputs) + .apply(inputs) as tf.SymbolicTensor : inputs const range = new Range({}).apply(inputs) @@ -367,13 +362,14 @@ function GPT (conf: GPTConfig): tf.LayersModel { outputDim: config.nEmbd, embeddingsInitializer: 'zeros' }) - .apply(range) + .apply(range) as tf.SymbolicTensor if (config.debug) { - posEmb = new LogLayer({ name: 'posEmb' }).apply(posEmb) + posEmb = new LogLayer({ name: 'posEmb' }).apply(posEmb) as tf.SymbolicTensor } let x - x = tf.layers.add().apply([tokEmb as any, posEmb as any]) + + x = tf.layers.add().apply([tokEmb, posEmb]) x = tf.layers .dropout({ name: 'drop', @@ -407,7 +403,8 @@ function GPT (conf: GPTConfig): tf.LayersModel { }) .apply(x) } - return tf.model({ inputs, outputs: x as any }) + + return tf.model({ inputs, outputs: x as tf.SymbolicTensor }) } interface GenerateConfig { @@ -468,7 +465,6 @@ class GPTModel extends tf.LayersModel { dataset: Dataset, args: tf.ModelFitDatasetArgs ): Promise { - console.log('=== GPTModel custom train function ===') const config = { ...this.config, ...args } await train( @@ -483,10 +479,8 @@ class GPTModel extends tf.LayersModel { } } -interface GenerateOutput { idxNext: tf.Tensor2D, timePerToken: number } - class GPTLMHeadModel extends GPTModel { - async generate (idxRaw: tf.TensorLike, conf: GenerateConfig, act?: (_: GenerateOutput) => Promise): Promise { + async generate (idxRaw: tf.TensorLike, conf: GenerateConfig, act?: (_: { idxNext: number[][], timePerToken: number }) => Promise): Promise { const config = Object.assign({}, defaultGenerateConfig, conf) let idx = prepareIdx(idxRaw) for (let step = 0; step < config.maxNewTokens; step++) { @@ -494,7 +488,7 @@ class GPTLMHeadModel extends GPTModel { const idxNew = idx.concat(idxNext, 1) tf.dispose(idx) idx = idxNew - const idxNextArr = await (idxNext as any).array() + const idxNextArr = await idxNext.array() tf.dispose(idxNext) if (act !== undefined) { await act({ idxNext: idxNextArr, timePerToken }) @@ -505,11 +499,13 @@ class GPTLMHeadModel extends GPTModel { return idxArr } - private generateOnce (model: tf.LayersModel, idx: tf.Tensor2D, config: GenerateConfig): GenerateOutput { + private generateOnce (model: tf.LayersModel, idx: tf.Tensor2D, config: GenerateConfig): { idxNext: tf.Tensor2D, timePerToken: number } { let timePerToken = performance.now() const idxNext = tf.tidy(() => { - const blockSize: any = model.inputs[0].shape[1] + const blockSize = model.inputs[0].shape[1] + if (blockSize === null) throw new Error('unexpected shape') + const idxCond = idx.shape[1] <= blockSize ? idx diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index ade8a0318..13d6d51a7 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -18,7 +18,7 @@ function getCustomAdam (model: tf.LayersModel, c: Required): tf.Optim const excludeFromWeightDecay: string[] = [] // TODO unsafe cast - const namedWeights = (model as unknown as any).getNamedWeights() as Array<{ name: string, tensor: tf.Tensor }> + const namedWeights = (model as unknown as Record<'getNamedWeights', () => Array<{ name: string, tensor: tf.Tensor }>>).getNamedWeights() namedWeights.forEach((v) => { if ( diff --git a/discojs/discojs-core/src/models/tfjs.ts b/discojs/discojs-core/src/models/tfjs.ts index b9596f95e..403fb0bff 100644 --- a/discojs/discojs-core/src/models/tfjs.ts +++ b/discojs/discojs-core/src/models/tfjs.ts @@ -51,18 +51,18 @@ export class TFJS extends Model { } } - override async predict (input: Sample): Promise { + override predict (input: Sample): Promise { const ret = this.model.predict(input) if (Array.isArray(ret)) { throw new Error('prediction yield many Tensors but should have only returned one') } - return ret + return Promise.resolve(ret) } static async deserialize (raw: tf.io.ModelArtifacts): Promise { return new this(await tf.loadLayersModel({ - load: async () => raw + load: () => Promise.resolve(raw) })) } @@ -71,14 +71,14 @@ export class TFJS extends Model { const ret = new Promise((resolve) => { resolveArtifacts = resolve }) await this.model.save({ - save: async (artifacts) => { + save: (artifacts) => { resolveArtifacts(artifacts) - return { + return Promise.resolve({ modelArtifactsInfo: { dateSaved: new Date(), modelTopologyType: 'JSON' } - } + }) } }, { includeOptimizer: true // keep model compiled diff --git a/discojs/discojs-core/src/serialization/model.ts b/discojs/discojs-core/src/serialization/model.ts index 4d70584b8..e2baa18f6 100644 --- a/discojs/discojs-core/src/serialization/model.ts +++ b/discojs/discojs-core/src/serialization/model.ts @@ -4,7 +4,10 @@ import type tf from '@tensorflow/tfjs' import type { Model } from '../index.js' import { models, serialization } from '../index.js' -const enum Type { TFJS, GPT } +const Type = { + TFJS: 0, + GPT: 1 +} as const export type Encoded = Uint8Array @@ -37,7 +40,7 @@ export async function decode (encoded: unknown): Promise { } const [type, rawModel] = raw as [unknown, unknown] - if (typeof type !== 'number' || (type !== Type.TFJS && type !== Type.GPT)) { + if (typeof type !== 'number') { throw new Error('invalid encoding') } switch (type) { @@ -57,5 +60,7 @@ export async function decode (encoded: unknown): Promise { const serialized = serialization.weights.decode(nums) return models.GPT.deserialize(serialized) } + default: + throw new Error('invalid encoding') } } diff --git a/discojs/discojs-core/src/serialization/weights.ts b/discojs/discojs-core/src/serialization/weights.ts index 910264ad0..0672488db 100644 --- a/discojs/discojs-core/src/serialization/weights.ts +++ b/discojs/discojs-core/src/serialization/weights.ts @@ -24,7 +24,6 @@ function isSerialized (raw: unknown): raw is Serialized { return false } - // eslint-disable-next-line const _: Serialized = {shape, data} return true @@ -48,7 +47,7 @@ export async function encode (weights: WeightsContainer): Promise { } export function decode (encoded: Encoded): WeightsContainer { - const raw = msgpack.decode(encoded) + const raw: unknown = msgpack.decode(encoded) if (!(Array.isArray(raw) && raw.every(isSerialized))) { throw new Error('expected to decode an array of serialized weights') diff --git a/discojs/discojs-core/src/task/digest.ts b/discojs/discojs-core/src/task/digest.ts index c6174cd3a..ebb3559cb 100644 --- a/discojs/discojs-core/src/task/digest.ts +++ b/discojs/discojs-core/src/task/digest.ts @@ -8,7 +8,7 @@ export function isDigest (raw: unknown): raw is Digest { return false } - const { algorithm, value }: Partial> = raw + const { algorithm, value }: Partial> = raw if (!( typeof algorithm === 'string' && diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index 075b597c3..e1f9c212e 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -1,5 +1,5 @@ -import { type AggregatorChoice } from '../aggregator/get.js' -import { type Preprocessing } from '../dataset/data/preprocessing/index.js' +import type { AggregatorChoice } from '../aggregator/get.js' +import type { Preprocessing } from '../dataset/data/preprocessing/index.js' export interface TrainingInformation { // modelID: unique ID for the model @@ -59,12 +59,12 @@ export interface TrainingInformation { } function isStringArray(raw: unknown): raw is string[] { - if (!Array.isArray(raw) || raw.some((e) => typeof e !== 'string')) { + if (!Array.isArray(raw)) { return false } + const arr: unknown[] = raw // isArray is unsafely guarding with any[] - const _: string[] = raw - return true + return arr.every((e) => typeof e === 'string') } export function isTrainingInformation (raw: unknown): raw is TrainingInformation { diff --git a/discojs/discojs-core/src/training/trainer/distributed_trainer.ts b/discojs/discojs-core/src/training/trainer/distributed_trainer.ts index 90caa8ec5..68c6e0772 100644 --- a/discojs/discojs-core/src/training/trainer/distributed_trainer.ts +++ b/discojs/discojs-core/src/training/trainer/distributed_trainer.ts @@ -31,14 +31,14 @@ export class DistributedTrainer extends Trainer { await this.client.onTrainBeginCommunication(this.model.weights, this.trainingInformant) } - async onRoundBegin (accuracy: number): Promise { + async onRoundBegin (): Promise { await this.client.onRoundBeginCommunication(this.model.weights, this.roundTracker.round, this.trainingInformant) } /** * Callback called every time a round is over */ - async onRoundEnd (accuracy: number): Promise { + async onRoundEnd (): Promise { await this.client.onRoundEndCommunication(this.model.weights, this.roundTracker.round, this.trainingInformant) if (this.aggregator.model !== undefined) { // The aggregator's own aggregation is async. The trainer updates its model to match the aggregator's diff --git a/discojs/discojs-core/src/training/trainer/local_trainer.ts b/discojs/discojs-core/src/training/trainer/local_trainer.ts index b774a33a8..73d7ada80 100644 --- a/discojs/discojs-core/src/training/trainer/local_trainer.ts +++ b/discojs/discojs-core/src/training/trainer/local_trainer.ts @@ -6,9 +6,11 @@ import { Trainer } from './trainer.js' * without any collaborators. */ export class LocalTrainer extends Trainer { - async onRoundBegin (accuracy: number): Promise {} + async onRoundBegin (): Promise { + return await Promise.resolve() + } - async onRoundEnd (accuracy: number): Promise { + async onRoundEnd (): Promise { console.log('on round end') await this.memory.updateWorkingModel( { taskID: this.task.id, name: this.task.trainingInformation.modelID }, diff --git a/discojs/discojs-core/src/training/trainer/trainer.ts b/discojs/discojs-core/src/training/trainer/trainer.ts index e9da7102b..3a8aad1ce 100644 --- a/discojs/discojs-core/src/training/trainer/trainer.ts +++ b/discojs/discojs-core/src/training/trainer/trainer.ts @@ -69,7 +69,8 @@ export abstract class Trainer { } } - protected onEpochBegin (epoch: number, logs?: tf.Logs): void {} + // TODO never used + protected onEpochBegin (_epoch: number, _logs?: tf.Logs): void {} /** * We update the training graph, this needs to be done on epoch end as there is no validation accuracy onBatchEnd. @@ -88,15 +89,17 @@ export abstract class Trainer { } } - protected async onTrainBegin (logs?: tf.Logs): Promise { + protected async onTrainBegin (_logs?: tf.Logs): Promise { this.trainingInformant.addMessage('Training started.') + return await Promise.resolve() } /** * When the training ends this function will be call */ - protected async onTrainEnd (logs?: tf.Logs): Promise { + protected async onTrainEnd (_logs?: tf.Logs): Promise { this.trainingInformant.addMessage('Training finished.') + return await Promise.resolve() } /** diff --git a/discojs/discojs-core/src/validation/validator.ts b/discojs/discojs-core/src/validation/validator.ts index d7969971d..64ce0f174 100644 --- a/discojs/discojs-core/src/validation/validator.ts +++ b/discojs/discojs-core/src/validation/validator.ts @@ -81,8 +81,8 @@ export class Validator { [], 0 ).arraySync() - } catch (e: any) { - console.error(e instanceof Error ? e.message : e.toString()) + } catch (e) { + console.error(e instanceof Error ? e.message : e) throw new Error('Failed to compute the confusion matrix') } } diff --git a/discojs/discojs-core/src/weights/aggregation.spec.ts b/discojs/discojs-core/src/weights/aggregation.spec.ts index 157619f33..6b507ad68 100644 --- a/discojs/discojs-core/src/weights/aggregation.spec.ts +++ b/discojs/discojs-core/src/weights/aggregation.spec.ts @@ -3,7 +3,7 @@ import { assert } from 'chai' import { WeightsContainer, aggregation } from './index.js' describe('weights aggregation', () => { - it('avg of weights with two operands', async () => { + it('avg of weights with two operands', () => { const actual = aggregation.avg([ WeightsContainer.of([1, 2, 3, -1], [-5, 6]), WeightsContainer.of([2, 3, 7, 1], [-10, 5]), @@ -14,7 +14,7 @@ describe('weights aggregation', () => { assert.isTrue(actual.equals(expected)) }) - it('sum of weights with two operands', async () => { + it('sum of weights with two operands', () => { const actual = aggregation.sum([ [[3, -4], [9]], [[2, 13], [0]] @@ -24,7 +24,7 @@ describe('weights aggregation', () => { assert.isTrue(actual.equals(expected)) }) - it('diff of weights with two operands', async () => { + it('diff of weights with two operands', () => { const actual = aggregation.diff([ [[3, -4, 5], [9, 1]], [[2, 13, 4], [0, 1]] diff --git a/discojs/discojs-node/.eslintrc.json b/discojs/discojs-node/.eslintrc.json deleted file mode 100644 index 10d223883..000000000 --- a/discojs/discojs-node/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "node": true - } -} diff --git a/discojs/discojs-node/package.json b/discojs/discojs-node/package.json index 62a3ccfb7..9be81206b 100644 --- a/discojs/discojs-node/package.json +++ b/discojs/discojs-node/package.json @@ -7,7 +7,7 @@ "scripts": { "watch": "nodemon --ext ts --ignore dist --watch ../discojs-core/dist --watch . --exec npm run", "build": "tsc", - "lint": "npx eslint --ext ts --max-warnings 0 .", + "lint": "npx eslint .", "test": "mocha", "docs": "typedoc ./src/imports.ts --theme oxide" }, diff --git a/discojs/discojs-node/src/data/image_loader.spec.ts b/discojs/discojs-node/src/data/image_loader.spec.ts index 5d02d03b1..6ccb819c9 100644 --- a/discojs/discojs-node/src/data/image_loader.spec.ts +++ b/discojs/discojs-node/src/data/image_loader.spec.ts @@ -78,9 +78,9 @@ describe('image loader', () => { const path = DIRS.CIFAR10 + '0.png' const imageContent = tfNode.decodeImage(fs.readFileSync(path)) const datasetContent = await (await LOADERS.CIFAR10 - .load(path, { labels: ['example'] })).toArray() - expect((datasetContent[0] as any).xs.shape).eql(imageContent.shape) - expect((datasetContent[0] as any).ys).eql('example') + .load(path, { labels: ['example'] })).toArray() as Array> + expect(datasetContent[0].xs.shape).eql(imageContent.shape) + expect(datasetContent[0].ys).eql('example') }) it('loads multiple samples with labels', async () => { @@ -119,7 +119,7 @@ describe('image loader', () => { assert(true) }) - it('shuffles list', async () => { + it('shuffles list', () => { const loader = new ImageLoader(cifar10Mock) const list = Range(0, 100_000).toArray() const shuffled = [...list] diff --git a/discojs/discojs-node/src/data/image_loader.ts b/discojs/discojs-node/src/data/image_loader.ts index 2c7fee5db..c177b4971 100644 --- a/discojs/discojs-node/src/data/image_loader.ts +++ b/discojs/discojs-node/src/data/image_loader.ts @@ -1,4 +1,4 @@ -import fs from 'fs' +import fs from 'node:fs/promises' import type tf from '@tensorflow/tfjs' import { node } from '@tensorflow/tfjs-node' @@ -6,6 +6,6 @@ import { data } from '@epfml/discojs-core' export class ImageLoader extends data.ImageLoader { async readImageFrom (source: string): Promise { - return node.decodeImage(fs.readFileSync(source)) as tf.Tensor3D + return node.decodeImage(await fs.readFile(source)) as tf.Tensor3D } } diff --git a/discojs/discojs-node/src/data/tabular_loader.spec.ts b/discojs/discojs-node/src/data/tabular_loader.spec.ts index 78365efd3..81dcc8fba 100644 --- a/discojs/discojs-node/src/data/tabular_loader.spec.ts +++ b/discojs/discojs-node/src/data/tabular_loader.spec.ts @@ -1,5 +1,4 @@ import { assert, expect } from 'chai' -import { List } from 'immutable' import * as tf from '@tensorflow/tfjs' import type { Task } from '@epfml/discojs-core' @@ -66,15 +65,15 @@ describe('tabular loader', () => { labels: titanic.trainingInformation?.outputColumns, shuffle: false } - const dataset = await (await loader + const dataset = (await (await loader .loadAll(inputFiles, config)) - .train.dataset.toArray() - const shuffled = await (await loader + .train.dataset.toArray()) as Array> + const shuffled = (await (await loader .loadAll(inputFiles, { ...config, shuffle: true })) - .train.dataset.toArray() + .train.dataset.toArray()) as Array> - const misses = List(dataset).zip(List(shuffled)).map(([d, s]) => - tf.notEqual((d as any).xs as tf.Tensor, (s as any).xs as tf.Tensor).any().dataSync()[0] + const misses = dataset.map((d, i) => + tf.notEqual(d.xs, shuffled[i].xs).any().dataSync()[0] ).reduce((acc: number, e) => acc + e) assert(misses > 0) }) diff --git a/discojs/discojs-node/src/data/tabular_loader.ts b/discojs/discojs-node/src/data/tabular_loader.ts index b2dca6e86..b5e616ea7 100644 --- a/discojs/discojs-node/src/data/tabular_loader.ts +++ b/discojs/discojs-node/src/data/tabular_loader.ts @@ -3,11 +3,11 @@ import { data as tfData } from '@tensorflow/tfjs-node' import { data } from '@epfml/discojs-core' export class TabularLoader extends data.TabularLoader { - async loadDatasetFrom (source: string, csvConfig: Record): Promise { + loadDatasetFrom (source: string, csvConfig: Record): Promise { const prefix = 'file://' if (source.slice(0, 7) !== prefix) { source = prefix + source } - return tfData.csv(source, csvConfig) + return Promise.resolve(tfData.csv(source, csvConfig)) } } diff --git a/discojs/discojs-web/.eslintrc.json b/discojs/discojs-web/.eslintrc.json deleted file mode 100644 index e5a34aec6..000000000 --- a/discojs/discojs-web/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "browser": true - } -} diff --git a/discojs/discojs-web/package.json b/discojs/discojs-web/package.json index b4ce26846..a34a77748 100644 --- a/discojs/discojs-web/package.json +++ b/discojs/discojs-web/package.json @@ -7,7 +7,7 @@ "scripts": { "watch": "nodemon --ext ts --ignore dist --watch ../discojs-core/dist --watch . --exec npm run", "build": "tsc", - "lint": "npx eslint --ext ts --max-warnings 0 .", + "lint": "npx eslint .", "test": ": nothing", "docs": "typedoc ./src/index.ts --theme oxide" }, diff --git a/discojs/discojs-web/src/data/tabular_loader.ts b/discojs/discojs-web/src/data/tabular_loader.ts index 41b34d3f5..034f1d641 100644 --- a/discojs/discojs-web/src/data/tabular_loader.ts +++ b/discojs/discojs-web/src/data/tabular_loader.ts @@ -4,6 +4,7 @@ import { data } from '@epfml/discojs-core' export class TabularLoader extends data.TabularLoader { async loadDatasetFrom (source: File, csvConfig: Record): Promise { - return new tf.data.CSVDataset(new tf.data.FileDataSource(source), csvConfig) + const file = new tf.data.FileDataSource(source) + return Promise.resolve(new tf.data.CSVDataset(file, csvConfig)) } } diff --git a/discojs/discojs-web/src/data/text_loader.ts b/discojs/discojs-web/src/data/text_loader.ts index e83c0866c..59bd31eec 100644 --- a/discojs/discojs-web/src/data/text_loader.ts +++ b/discojs/discojs-web/src/data/text_loader.ts @@ -3,8 +3,8 @@ import * as tf from '@tensorflow/tfjs' import { data } from '@epfml/discojs-core' export class TextLoader extends data.TextLoader { - async loadDatasetFrom (source: File): Promise { + loadDatasetFrom (source: File): Promise { const file = new tf.data.FileDataSource(source) - return new tf.data.TextLineDataset(file) + return Promise.resolve(new tf.data.TextLineDataset(file)) } } diff --git a/docs/examples/.eslintrc.js b/docs/examples/.eslintrc.js deleted file mode 100644 index 011f7af10..000000000 --- a/docs/examples/.eslintrc.js +++ /dev/null @@ -1,18 +0,0 @@ -// @ts-check - -module.exports = { - root: true, - extends: 'standard-with-typescript', - parserOptions: { - project: './tsconfig.eslint.json', - tsconfigRootDir: __dirname - }, - ignorePatterns: ['**/dist/'], - env: { node: true }, - overrides: [ - { - extends: ['plugin:@typescript-eslint/disable-type-checked'], - files: ['*.js'] - } - ] -} diff --git a/docs/examples/custom_task.ts b/docs/examples/custom_task.ts index 070ab3261..064813ba6 100644 --- a/docs/examples/custom_task.ts +++ b/docs/examples/custom_task.ts @@ -32,7 +32,7 @@ const customTask: TaskProvider = { } }, - async getModel () { + getModel () { const model = tf.sequential() model.add( @@ -52,7 +52,7 @@ const customTask: TaskProvider = { metrics: ['accuracy'] }) - return new models.TFJS(model) + return Promise.resolve(new models.TFJS(model)) } } diff --git a/docs/examples/eslint.config.js b/docs/examples/eslint.config.js new file mode 100644 index 000000000..e68682197 --- /dev/null +++ b/docs/examples/eslint.config.js @@ -0,0 +1,19 @@ +// @ts-check + +import eslint from '@eslint/js' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + { + files: ['*.ts'], + languageOptions: { + parserOptions: { + project: true, + tsconfigRootDir: import.meta.dirname + } + } + }, + { ignores: ['eslint.config.js', 'dist/*'] } +) diff --git a/docs/examples/package.json b/docs/examples/package.json index 86d192a26..8f303549a 100644 --- a/docs/examples/package.json +++ b/docs/examples/package.json @@ -7,7 +7,7 @@ "train": "npm run build && node dist/training.js", "custom_task": "npm run build && node dist/custom_task.js", "build": "tsc", - "lint": "npx eslint --ext ts --max-warnings 0 .", + "lint": "npx eslint .", "test": "npm run train" }, "license": "ISC", @@ -17,12 +17,8 @@ "@epfml/discojs-node": "*" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "6", "eslint": "8", - "eslint-config-standard-with-typescript": "43", - "eslint-plugin-import": "2", - "eslint-plugin-n": "15", - "eslint-plugin-promise": "6", - "typescript": "4" + "typescript": "4", + "typescript-eslint": "7" } } diff --git a/docs/examples/training.ts b/docs/examples/training.ts index ca2f77d66..45958d2d6 100644 --- a/docs/examples/training.ts +++ b/docs/examples/training.ts @@ -78,7 +78,7 @@ async function loadSimpleFaceData (task: Task): Promise { const filesPerFolder = [youngFiles, oldFiles] - const labels = filesPerFolder.flatMap((files, index) => Array(files.length).fill(index)) + const labels = filesPerFolder.flatMap((files, index) => Array(files.length).fill(`${index}`)) const files = filesPerFolder.flat() return await new NodeImageLoader(task).loadAll(files, { labels }) diff --git a/docs/examples/tsconfig.eslint.json b/docs/examples/tsconfig.eslint.json deleted file mode 100644 index a8d4317b4..000000000 --- a/docs/examples/tsconfig.eslint.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": [] -} diff --git a/eslint.config.js b/eslint.config.js index 46ceb8e6a..489260d87 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -14,5 +14,22 @@ export default tseslint.config( } } }, + { + rules: { + // taken from https://typescript-eslint.io/rules/no-unused-vars/ + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'all', + argsIgnorePattern: '^_', + caughtErrors: 'all', + caughtErrorsIgnorePattern: '^_', + destructuredArrayIgnorePattern: '^_', + varsIgnorePattern: '^_', + ignoreRestSiblings: true + } + ] + } + }, { ignores: ['**/dist/*'] } ) diff --git a/package-lock.json b/package-lock.json index bf2ac28a4..352920591 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,13 +15,9 @@ "isomorphic-wrtc" ], "devDependencies": { - "@typescript-eslint/eslint-plugin": "6", "eslint": "8", - "eslint-config-standard-with-typescript": "43", - "eslint-plugin-import": "2", - "eslint-plugin-n": "15", - "eslint-plugin-promise": "6", - "typescript": "4" + "typescript": "4", + "typescript-eslint": "7" } }, "cli": { @@ -197,18 +193,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2258,28 +2242,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", @@ -2318,28 +2280,6 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -3543,7 +3483,8 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/lodash": { "version": "4.17.0", @@ -3748,16 +3689,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz", + "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/type-utils": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -3766,15 +3707,15 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3783,26 +3724,26 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.3.1.tgz", + "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3811,16 +3752,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3828,25 +3769,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz", + "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/utils": "7.3.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3855,12 +3796,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.3.1.tgz", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3868,13 +3809,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3883,7 +3824,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3895,42 +3836,66 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.3.1.tgz", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", "semver": "^7.5.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/types": "7.3.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -4354,16 +4319,6 @@ "node": ">=4" } }, - "node_modules/@vue/cli-plugin-unit-mocha/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@vue/cli-plugin-unit-mocha/node_modules/chokidar": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", @@ -4914,90 +4869,304 @@ } } }, - "node_modules/@vue/reactivity": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", - "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", - "dependencies": { - "@vue/shared": "3.4.21" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", - "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", - "dependencies": { - "@vue/reactivity": "3.4.21", - "@vue/shared": "3.4.21" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", - "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", - "dependencies": { - "@vue/runtime-core": "3.4.21", - "@vue/shared": "3.4.21", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", - "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, "dependencies": { - "@vue/compiler-ssr": "3.4.21", - "@vue/shared": "3.4.21" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "vue": "3.4.21" - } - }, - "node_modules/@vue/shared": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", - "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==" - }, - "node_modules/@vue/test-utils": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.5.tgz", - "integrity": "sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==", - "dev": true, - "dependencies": { - "js-beautify": "^1.14.9", - "vue-component-type-helpers": "^2.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@vue/vue-loader-v15": { - "name": "vue-loader", - "version": "15.11.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", - "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "css-loader": "*", - "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "prettier": { - "optional": true - }, - "vue-template-compiler": { + "typescript": { "optional": true } } }, - "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vue/eslint-config-typescript/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", + "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", + "dependencies": { + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", + "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", + "dependencies": { + "@vue/reactivity": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", + "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", + "dependencies": { + "@vue/runtime-core": "3.4.21", + "@vue/shared": "3.4.21", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", + "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", + "dependencies": { + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21" + }, + "peerDependencies": { + "vue": "3.4.21" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==" + }, + "node_modules/@vue/test-utils": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.5.tgz", + "integrity": "sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==", + "dev": true, + "dependencies": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, + "node_modules/@vue/vue-loader-v15": { + "name": "vue-loader", + "version": "15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", @@ -5545,6 +5714,7 @@ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -5566,6 +5736,7 @@ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5600,6 +5771,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5620,6 +5792,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5638,6 +5811,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5656,6 +5830,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -5901,18 +6076,6 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/babel-loader/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -6180,11 +6343,12 @@ "dev": true }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -6338,16 +6502,25 @@ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, - "node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/builtins": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, + "peer": true, "dependencies": { "semver": "^7.0.0" } @@ -8367,6 +8540,7 @@ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -8384,6 +8558,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -8401,6 +8576,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -8935,6 +9111,15 @@ "node": ">=14" } }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/editorconfig/node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -9101,6 +9286,7 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", "dev": true, + "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -9186,6 +9372,7 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "peer": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -9198,6 +9385,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "peer": true, "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -9212,6 +9400,7 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "peer": true, "dependencies": { "hasown": "^2.0.0" } @@ -9221,6 +9410,7 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "peer": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -9347,6 +9537,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-compat-utils": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", + "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-config-prettier": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", @@ -9391,30 +9597,12 @@ "eslint-plugin-promise": "^6.0.0" } }, - "node_modules/eslint-config-standard-with-typescript": { - "version": "43.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-43.0.1.tgz", - "integrity": "sha512-WfZ986+qzIzX6dcr4yGUyVb/l9N3Z8wPXCc5z/70fljs3UbWhhV+WxrfgsqMToRzuuyX9MqZ974pq2UPhDTOcA==", - "deprecated": "Please use eslint-config-love, instead.", - "dev": true, - "dependencies": { - "@typescript-eslint/parser": "^6.4.0", - "eslint-config-standard": "17.1.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.4.0", - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0", - "typescript": "*" - } - }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "peer": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -9426,6 +9614,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -9435,6 +9624,7 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, + "peer": true, "dependencies": { "debug": "^3.2.7" }, @@ -9452,6 +9642,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -9469,9 +9660,9 @@ } }, "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "dependencies": { "eslint-utils": "^2.0.0", @@ -9487,28 +9678,25 @@ "eslint": ">=4.19.1" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-plugin-es-x": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz", + "integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==", "dev": true, + "peer": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.5.0" }, "engines": { - "node": ">=6" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { @@ -9516,6 +9704,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, + "peer": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -9542,21 +9731,12 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -9566,6 +9746,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -9573,44 +9754,37 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "peer": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, + "peer": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": ">=12.22.0" + "node": ">=16.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" @@ -9619,28 +9793,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -9661,71 +9813,6 @@ "eslint": ">=5.16.0" } }, - "node_modules/eslint-plugin-node/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-node/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-node/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -9761,6 +9848,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -9806,30 +9894,27 @@ } }, "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=4" } }, "node_modules/eslint-visitor-keys": { @@ -9950,28 +10035,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -10679,28 +10742,6 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -10828,6 +10869,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10846,6 +10888,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10944,6 +10987,7 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -10956,6 +11000,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "peer": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -11014,26 +11071,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -11068,6 +11105,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, + "peer": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -11171,6 +11209,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11688,6 +11727,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "peer": true, "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -11750,6 +11790,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -11771,6 +11812,7 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "peer": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -11794,6 +11836,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -11805,6 +11848,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "peer": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -11843,6 +11902,7 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "peer": true, "dependencies": { "is-typed-array": "^1.1.13" }, @@ -11858,6 +11918,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -11962,6 +12023,7 @@ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -11982,6 +12044,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12032,6 +12095,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -12048,6 +12112,7 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7" }, @@ -12072,6 +12137,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12087,6 +12153,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "peer": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -12137,6 +12204,7 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -12157,10 +12225,9 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", @@ -12304,6 +12371,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/js-beautify/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -12326,6 +12402,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/js-beautify/node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", @@ -12538,14 +12629,15 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonc-parser": { @@ -12755,6 +12847,17 @@ "node": ">=4.0.0" } }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -13242,17 +13345,14 @@ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { @@ -13355,16 +13455,6 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/mocha/node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -13554,16 +13644,6 @@ "node": ">=4" } }, - "node_modules/mochapack/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/mochapack/node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -13711,18 +13791,6 @@ "node": ">=6" } }, - "node_modules/mochapack/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mochapack/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -13922,11 +13990,6 @@ "msgpack": "bin/msgpack" } }, - "node_modules/msgpack-lite/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", @@ -14372,16 +14435,6 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/nodemon/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -14391,18 +14444,6 @@ "node": ">=4" } }, - "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/nodemon/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14595,6 +14636,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14613,6 +14655,7 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14627,6 +14670,7 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -16576,11 +16620,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -16651,6 +16690,7 @@ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -16797,6 +16837,16 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -16906,6 +16956,7 @@ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -16919,6 +16970,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "peer": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -16943,6 +17001,7 @@ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -17201,6 +17260,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "peer": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -17744,6 +17804,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -17762,6 +17823,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -17776,6 +17838,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -17816,6 +17879,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -17974,6 +18038,14 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -18003,6 +18075,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sucrase/node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", @@ -18443,18 +18529,6 @@ "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/thread-loader/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/thread-loader/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -18754,6 +18828,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "peer": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -18761,6 +18836,19 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -18832,6 +18920,7 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -18846,6 +18935,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -18865,6 +18955,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -18885,6 +18976,7 @@ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -18934,6 +19026,15 @@ "typedoc": "^0.22.17" } }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/typedoc/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -18977,6 +19078,31 @@ "node": ">=4.2.0" } }, + "node_modules/typescript-eslint": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.3.1.tgz", + "integrity": "sha512-psqcnHPRCdVIDbgj6RvfpwUKqMcNxIw7eizgxYi46X2BmXK6LxYqPD+SbDfPuA9JW+yPItY6aKJLRNbW7lZ4rA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.3.1", + "@typescript-eslint/parser": "7.3.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/typical": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", @@ -18991,6 +19117,7 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -19409,18 +19536,6 @@ "webpack": "^4.1.0 || ^5.0.0-0" } }, - "node_modules/vue-loader-v16/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/vue-loader-v16/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -20046,6 +20161,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "peer": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", diff --git a/package.json b/package.json index 5b208cb47..afa1b2372 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "disco", + "type": "module", "workspaces": [ "discojs/discojs-core", "discojs/discojs-node", @@ -10,12 +11,8 @@ "isomorphic-wrtc" ], "devDependencies": { - "@typescript-eslint/eslint-plugin": "6", "eslint": "8", - "eslint-config-standard-with-typescript": "43", - "eslint-plugin-import": "2", - "eslint-plugin-n": "15", - "eslint-plugin-promise": "6", - "typescript": "4" + "typescript": "4", + "typescript-eslint": "7" } } diff --git a/server/.eslintrc.json b/server/.eslintrc.json deleted file mode 100644 index 10d223883..000000000 --- a/server/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "node": true - } -} diff --git a/server/package.json b/server/package.json index c816d814f..b4e79e5b9 100644 --- a/server/package.json +++ b/server/package.json @@ -10,7 +10,7 @@ "watch": "nodemon --ext ts --ignore dist --watch ../discojs/discojs-node/dist --watch . --exec npm run", "start": "npm run build && node dist/run_server.js", "build": "tsc", - "lint": "npx eslint --ext ts --max-warnings 0 .", + "lint": "npx eslint .", "test": "mocha" }, "author": "", diff --git a/server/src/router/federated/server.ts b/server/src/router/federated/server.ts index d6356ac33..7d69c3484 100644 --- a/server/src/router/federated/server.ts +++ b/server/src/router/federated/server.ts @@ -127,12 +127,12 @@ export class Federated extends Server { * @param clientId the clientID of the contribution * @param ws the websocket through which send the aggregated weights */ - private async addContributionAndSendModel ( + private addContributionAndSendModel ( msg: messages.SendPayload, task: TaskID, clientId: client.NodeID, ws: WebSocket - ): Promise { + ): void { const { payload, round } = msg const aggregator = this.aggregators.get(task) @@ -150,7 +150,6 @@ export class Federated extends Server { // send the new weights to the client. // Use the void keyword to explicity avoid waiting for the promise to resolve this.createPromiseForWeights(task, aggregator, ws) - .catch(console.error) const serialized = serialization.weights.decode(payload) // Add the contribution to the aggregator, @@ -172,10 +171,10 @@ export class Federated extends Server { * @param aggregator the server aggregator, in order to access the current round * @param ws the websocket through which send the aggregated weights */ - private async createPromiseForWeights ( + private createPromiseForWeights ( task: TaskID, aggregator: aggregators.Aggregator, - ws: WebSocket): Promise { + ws: WebSocket): void { const promisedResult = this.results.get(task) if (promisedResult === undefined) { throw new Error(`result promise was not set for task ${task}`) @@ -213,7 +212,7 @@ export class Federated extends Server { } ws.on('message', (data: Buffer) => { - const msg = msgpack.decode(data) + const msg: unknown = msgpack.decode(data) if (!client.federated.messages.isMessageFederated(msg)) { console.error('invalid federated message received on WebSocket') return // TODO send back error @@ -241,7 +240,6 @@ export class Federated extends Server { throw new Error('aggregator model was not set') } this.addContributionAndSendModel(msg, task.id, clientId, ws) - .catch(console.error) } else if (msg.type === MessageTypes.ReceiveServerStatistics) { const statistics = this.informants .get(task.id) @@ -264,7 +262,6 @@ export class Federated extends Server { } this.createPromiseForWeights(task.id, aggregator, ws) - .catch(console.error) } else if (msg.type === MessageTypes.SendMetadata) { const { round, key, value } = msg diff --git a/server/src/router/tasks.ts b/server/src/router/tasks.ts index 11912e537..b34bcf2ea 100644 --- a/server/src/router/tasks.ts +++ b/server/src/router/tasks.ts @@ -19,13 +19,18 @@ export class Tasks { ) { this.ownRouter = express.Router() - this.ownRouter.get('/', (req, res, next) => { - this.getTasksMetadata(req, res).catch(next) + this.ownRouter.get('/', (_, res) => { + res + .status(200) + .send(this.tasksAndModels.map(([t, _]) => t).toArray()) }) this.ownRouter.post('/', (req, res) => { - const model = req.body.model - const newTask = req.body.task + const raw: unknown = req.body + if (typeof raw !== 'object' || raw === null) { + return res.status(400) + } + const { model, newTask }: Partial> = raw if (!( model !== undefined && @@ -62,20 +67,6 @@ export class Tasks { this.tasksAndModels = this.tasksAndModels.add([task, model]) } - /** - * Request handler called when a client sends a GET request asking for all the - * tasks metadata stored in the server's tasks.json file. This is used for - * generating the client's list of tasks. It requires no prior connection to the - * server and is thus publicly available data. - * @param request received from client - * @param response sent to client - */ - private async getTasksMetadata (request: Request, response: Response): Promise { - response - .status(200) - .send(this.tasksAndModels.map(([t, _]) => t).toArray()) - } - /** * Request handler called when a client sends a GET request asking for the * TFJS model files of a given task. The files consist of the model's diff --git a/server/src/tasks.ts b/server/src/tasks.ts index 8434bdce5..33a426616 100644 --- a/server/src/tasks.ts +++ b/server/src/tasks.ts @@ -71,13 +71,28 @@ export class TasksAndModels { const hash = createHash(digest.algorithm) const modelConfigRaw = await fs.readFile(`${modelPath}/model.json`) - const modelConfig = JSON.parse(modelConfigRaw.toString()) - const weightsFiles = modelConfig.weightsManifest[0].paths + const parsedModelConfig: unknown = JSON.parse(modelConfigRaw.toString()) + + if (typeof parsedModelConfig !== 'object' || parsedModelConfig === null) { + throw new Error('invalid model config') + } + const { weightsManifest }: Partial> = parsedModelConfig + + if (!Array.isArray(weightsManifest) || weightsManifest.length === 0) { + throw new Error('invalid weights manifest') + } + const manifest: unknown = weightsManifest[0] + + if (typeof manifest !== 'object' || manifest === null) { + throw new Error('invalid weight manifest') + } + const { paths: weightsFiles }: Partial<{ paths: unknown }> = manifest + if (!( Array.isArray(weightsFiles) && typeof weightsFiles[0] === 'string' )) { - throw new Error() + throw new Error("invalud weights files") } await Promise.all(weightsFiles.map(async (file: string) => { const data = await fs.readFile(`${modelPath}/${file}`) diff --git a/server/tests/e2e/decentralized.spec.ts b/server/tests/e2e/decentralized.spec.ts index 3de1c0832..b98e3f85e 100644 --- a/server/tests/e2e/decentralized.spec.ts +++ b/server/tests/e2e/decentralized.spec.ts @@ -91,11 +91,11 @@ describe('end-to-end decentralized', function () { await client.onTrainBeginCommunication(aggregator.outcome, informant) // Perform multiple training rounds for (let r = 0; r < rounds; r++) { - await client.onRoundBeginCommunication(aggregator.outcome, aggregator.round, informant) + await client.onRoundBeginCommunication(aggregator.outcome, aggregator.round) await new Promise((resolve) => { setTimeout(resolve, 1_000) }) - await client.onRoundEndCommunication(aggregator.outcome, aggregator.round, informant) + await client.onRoundEndCommunication(aggregator.outcome, aggregator.round) } await client.onTrainEndCommunication(aggregator.outcome, informant) diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 63b6999b0..30bdea20f 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.base.json", - "include": ["**/src", "**/tests"], + "include": ["./eslint.config.js", "**/src", "**/tests"], } From b9db50f3e777d8f9cfa343db5ae4c8887314862f Mon Sep 17 00:00:00 2001 From: tharvik Date: Fri, 22 Mar 2024 19:01:33 +0100 Subject: [PATCH 18/37] web-client: bump deps --- package-lock.json | 84 ++++++++++++++--------------------------- web-client/package.json | 4 +- 2 files changed, 31 insertions(+), 57 deletions(-) diff --git a/package-lock.json b/package-lock.json index 352920591..3f7bf8d66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2097,9 +2097,9 @@ } }, "node_modules/@cypress/request": { - "version": "2.88.12", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", - "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2114,7 +2114,7 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "~6.10.3", + "qs": "6.10.4", "safe-buffer": "^5.1.2", "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", @@ -7280,9 +7280,9 @@ } }, "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "engines": { "node": ">= 6" } @@ -7950,29 +7950,28 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/cypress": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz", - "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==", + "version": "13.7.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.7.1.tgz", + "integrity": "sha512-4u/rpFNxOFCoFX/Z5h+uwlkBO4mWzAjveURi3vqdSu56HPvVdyGTxGw4XKGWt399Y1JwIn9E1L9uMXQpc0o55w==", "hasInstallScript": true, "dependencies": { - "@cypress/request": "^2.88.10", + "@cypress/request": "^3.0.0", "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", - "buffer": "^5.6.0", + "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", "cli-cursor": "^3.1.0", "cli-table3": "~0.6.1", - "commander": "^5.1.0", + "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", - "debug": "^4.3.2", + "debug": "^4.3.4", "enquirer": "^2.3.6", "eventemitter2": "6.4.7", "execa": "4.1.0", @@ -7981,18 +7980,19 @@ "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", - "is-ci": "^3.0.0", + "is-ci": "^3.0.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", - "minimist": "^1.2.6", + "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", + "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.3.2", + "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.1", "untildify": "^4.0.0", @@ -8002,14 +8002,9 @@ "cypress": "bin/cypress" }, "engines": { - "node": ">=12.0.0" + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, - "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" - }, "node_modules/cypress/node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -16032,6 +16027,14 @@ "renderkid": "^3.0.0" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -19521,35 +19524,6 @@ } } }, - "node_modules/vue-loader-v16": { - "name": "vue-loader", - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", - "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "peerDependencies": { - "webpack": "^4.1.0 || ^5.0.0-0" - } - }, - "node_modules/vue-loader-v16/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/vue-router": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.0.tgz", @@ -20621,7 +20595,7 @@ "aws-sdk": "2", "core-js": "3", "crypto-browserify": "3", - "cypress": "10", + "cypress": "13", "d3": "7", "immutable": "4", "jshashes": "1", @@ -20665,7 +20639,7 @@ "eslint-plugin-vue": "9", "typescript": "4", "vue-cli-plugin-tailwind": "3", - "vue-loader-v16": "npm:vue-loader@16" + "vue-loader": "17" } } } diff --git a/web-client/package.json b/web-client/package.json index 8d08814e5..98477b50b 100644 --- a/web-client/package.json +++ b/web-client/package.json @@ -19,7 +19,7 @@ "aws-sdk": "2", "core-js": "3", "crypto-browserify": "3", - "cypress": "10", + "cypress": "13", "d3": "7", "immutable": "4", "jshashes": "1", @@ -63,7 +63,7 @@ "eslint-plugin-vue": "9", "typescript": "4", "vue-cli-plugin-tailwind": "3", - "vue-loader-v16": "npm:vue-loader@16" + "vue-loader": "17" }, "browserslist": [ "> 1%", From e2c20574fa84c600be7a948c9ca668f710bd9c2a Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Mon, 25 Mar 2024 13:34:27 +0100 Subject: [PATCH 19/37] Add transformers.js --- discojs/discojs-core/package.json | 1 + .../data/preprocessing/text_preprocessing.ts | 15 +- package-lock.json | 332 ++++++++++++++++-- 3 files changed, 315 insertions(+), 33 deletions(-) diff --git a/discojs/discojs-core/package.json b/discojs/discojs-core/package.json index 0c07a7418..cc989222d 100644 --- a/discojs/discojs-core/package.json +++ b/discojs/discojs-core/package.json @@ -22,6 +22,7 @@ "dependencies": { "@tensorflow/tfjs": "4", "@types/msgpack-lite": "0.1", + "@xenova/transformers": "^2.16.1", "axios": "1", "gpt-tokenizer": "^2.1.2", "gpt3-tokenizer": "1", diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index ad7bd7fc4..110e9dc95 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -1,13 +1,10 @@ import { List } from 'immutable' import * as tf from '@tensorflow/tfjs' -<<<<<<< HEAD -import type { Task } from '../../..' -import type { PreprocessingFunction } from './base' -import { encode } from 'gpt-tokenizer/cjs/model/text-davinci-003' -======= +import type { Task } from '../../../index.js' import type { PreprocessingFunction } from './base.js' ->>>>>>> 632-upgrade-es2022-tharvik +import { encode } from 'gpt-tokenizer/cjs/model/text-davinci-003' +import { AutoTokenizer } from '@xenova/transformers'; /** * Available text preprocessing types. @@ -43,8 +40,10 @@ const tokenize: PreprocessingFunction = { apply: (x: tf.TensorContainer, task: Task) => { const xs = x as string // tf.TextLineDataset yields strings // TODO: add to task definition - const tokenizer = { encode } - const tokens = tokenizer.encode(xs) + const tokenizer = await AutoTokenizer.from_pretrained('Xenova/bert-base-uncased'); + const { tokens } = await tokenizer(xs); + // const tokenizer = { encode } + // const tokens = tokenizer.encode(xs) return { xs: tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs diff --git a/package-lock.json b/package-lock.json index 57d6f1eaf..c6c34c9e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,7 @@ "dependencies": { "@tensorflow/tfjs": "4", "@types/msgpack-lite": "0.1", + "@xenova/transformers": "^2.16.1", "axios": "1", "gpt-tokenizer": "^2.1.2", "gpt3-tokenizer": "1", @@ -2267,6 +2268,14 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@huggingface/jinja": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz", + "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", + "engines": { + "node": ">=18" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -2609,6 +2618,60 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -5330,6 +5393,19 @@ "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.38.tgz", "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==" }, + "node_modules/@xenova/transformers": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.16.1.tgz", + "integrity": "sha512-p2ii7v7oC3Se0PC012dn4vt196GCroaN5ngOYJYkfg0/ce8A5frsrnnnktOBJuejG3bW5Hreb7JZ/KxtUaKd8w==", + "dependencies": { + "@huggingface/jinja": "^0.2.2", + "onnxruntime-web": "1.14.0", + "sharp": "^0.32.0" + }, + "optionalDependencies": { + "onnxruntime-node": "1.14.0" + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -6028,6 +6104,11 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + }, "node_modules/babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", @@ -6153,6 +6234,39 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/bare-events": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.2.tgz", + "integrity": "sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA==", + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-os": "^2.0.0", + "bare-path": "^2.0.0", + "streamx": "^2.13.0" + } + }, + "node_modules/bare-os": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz", + "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==", + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz", + "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==", + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -7115,6 +7229,18 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -7131,6 +7257,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -8642,7 +8777,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "peer": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -10258,7 +10392,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "peer": true, "engines": { "node": ">=6" } @@ -10423,6 +10556,11 @@ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -10632,6 +10770,11 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flatbuffers": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", + "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" + }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", @@ -10800,8 +10943,7 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "peer": true + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { "version": "9.1.0", @@ -11028,8 +11170,7 @@ "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "peer": true + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "node_modules/glob": { "version": "7.2.3", @@ -11187,6 +11328,11 @@ "node": ">=4.x" } }, + "node_modules/guid-typescript": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", + "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==" + }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -13248,7 +13394,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "peer": true, "engines": { "node": ">=10" }, @@ -13404,8 +13549,7 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "peer": true + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mocha": { "version": "9.2.2", @@ -14042,8 +14186,7 @@ "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "peer": true + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -14098,7 +14241,6 @@ "version": "3.56.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==", - "peer": true, "dependencies": { "semver": "^7.3.5" }, @@ -14735,6 +14877,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/onnx-proto": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz", + "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", + "dependencies": { + "protobufjs": "^6.8.8" + } + }, + "node_modules/onnxruntime-common": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", + "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==" + }, + "node_modules/onnxruntime-node": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz", + "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==", + "optional": true, + "os": [ + "win32", + "darwin", + "linux" + ], + "dependencies": { + "onnxruntime-common": "~1.14.0" + } + }, + "node_modules/onnxruntime-web": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", + "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", + "dependencies": { + "flatbuffers": "^1.12.0", + "guid-typescript": "^1.0.9", + "long": "^4.0.0", + "onnx-proto": "^4.0.4", + "onnxruntime-common": "~1.14.0", + "platform": "^1.3.6" + } + }, "node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", @@ -15241,6 +15423,11 @@ "node": ">=8" } }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" + }, "node_modules/portfinder": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", @@ -15956,7 +16143,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "peer": true, "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -16301,6 +16487,31 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, + "node_modules/protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -16423,6 +16634,11 @@ } ] }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "node_modules/rand-seed": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/rand-seed/-/rand-seed-1.0.2.tgz", @@ -16482,7 +16698,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "peer": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -16496,14 +16711,12 @@ "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "peer": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -17317,6 +17530,56 @@ "node": ">=8" } }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" + }, + "node_modules/sharp/node_modules/tar-fs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", + "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/sharp/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17395,8 +17658,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/simple-get": { "version": "4.0.1", @@ -17416,7 +17678,6 @@ "url": "https://feross.org/support" } ], - "peer": true, "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -17506,6 +17767,19 @@ "node": ">= 6" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -17775,6 +18049,18 @@ "node": ">= 6" } }, + "node_modules/streamx": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", + "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -18359,7 +18645,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "peer": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -18370,14 +18655,12 @@ "node_modules/tar-fs/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "peer": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "peer": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -18393,7 +18676,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", From b4e46c3e07c4aecd89531c724b3148f7fe9d82cc Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Tue, 26 Mar 2024 15:09:34 +0100 Subject: [PATCH 20/37] Integrate Transformers.js tokenizers --- discojs/discojs-core/src/dataset/data/data.ts | 30 +++++------ .../src/dataset/data/preprocessing/base.ts | 2 +- .../data/preprocessing/image_preprocessing.ts | 8 +-- .../preprocessing/tabular_preprocessing.ts | 4 +- .../data/preprocessing/text_preprocessing.ts | 52 ++++++------------- .../src/default_tasks/wikitext.ts | 21 ++------ discojs/discojs-core/src/models/gpt/index.ts | 16 +++--- discojs/discojs-core/src/models/gpt/model.ts | 19 +++---- .../src/task/training_information.ts | 10 ++-- discojs/discojs-node/src/data/text_loader.ts | 8 +-- web-client/.gitignore | 1 + 11 files changed, 68 insertions(+), 103 deletions(-) diff --git a/discojs/discojs-core/src/dataset/data/data.ts b/discojs/discojs-core/src/dataset/data/data.ts index c1a57e6ab..c42e6f704 100644 --- a/discojs/discojs-core/src/dataset/data/data.ts +++ b/discojs/discojs-core/src/dataset/data/data.ts @@ -64,33 +64,31 @@ export abstract class Data { * functions in a series. The preprocessing functions are chained according to their defined * priority. */ - get preprocessing (): (entry: tf.TensorContainer) => tf.TensorContainer { + get preprocessing (): (entry: tf.TensorContainer) => Promise { const params = this.task.trainingInformation const taskPreprocessing = params.preprocessingFunctions - if ( taskPreprocessing === undefined || taskPreprocessing.length === 0 || this.availablePreprocessing === undefined || this.availablePreprocessing.size === 0 - ) { - return (x) => x - } - + ) { + return (x) => new Promise((res, _) => res(x)) + } + const applyPreprocessing = this.availablePreprocessing - .filter((e) => e.type in taskPreprocessing) - .map((e) => e.apply) - + .filter((e) => e.type in taskPreprocessing) + .map((e) => e.apply) + if (applyPreprocessing.size === 0) { - return (x) => x + return (x) => new Promise((res, _) => res(x)) } - + const preprocessingChain = applyPreprocessing.reduce((acc, fn) => - (x: tf.TensorContainer) => fn(acc(x), this.task), - (x: tf.TensorContainer) => x, + (x: Promise) => fn(acc(x), this.task), + (x: Promise) => x, ) - - return (x: tf.TensorContainer) => preprocessingChain(x) + return (x: tf.TensorContainer) => preprocessingChain(new Promise((res, _) => res(x))) } /** @@ -98,6 +96,6 @@ export abstract class Data { * parameters. */ get preprocessedDataset (): Dataset { - return this.dataset.map(this.preprocessing) + return this.dataset.mapAsync(this.preprocessing) } } diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/base.ts b/discojs/discojs-core/src/dataset/data/preprocessing/base.ts index dbd18a096..e5823d0d2 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/base.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/base.ts @@ -15,5 +15,5 @@ export type Preprocessing = ImagePreprocessing | TextPreprocessing | TabularPrep */ export interface PreprocessingFunction { type: Preprocessing - apply: (x: tf.TensorContainer, task: Task) => tf.TensorContainer + apply: (x: Promise, task: Task) => Promise } diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts index c9b5f7c8f..88b6c4bef 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/image_preprocessing.ts @@ -19,8 +19,8 @@ interface ImageEntry extends tf.TensorContainerObject { const resize: PreprocessingFunction = { type: ImagePreprocessing.Resize, - apply: (entry: tf.TensorContainer, task: Task): tf.TensorContainer => { - const { xs, ys } = entry as ImageEntry + apply: async (entry: Promise, task: Task): Promise => { + const { xs, ys } = await entry as ImageEntry const params = task.trainingInformation return { xs: params.IMAGE_W !== undefined && params.IMAGE_H !== undefined @@ -33,8 +33,8 @@ const resize: PreprocessingFunction = { const normalize: PreprocessingFunction = { type: ImagePreprocessing.Normalize, - apply: (entry: tf.TensorContainer): tf.TensorContainer => { - const { xs, ys } = entry as ImageEntry + apply: async (entry: Promise): Promise => { + const { xs, ys } = await entry as ImageEntry return { xs: xs.div(tf.scalar(255)), ys diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts index 2e91ea5b8..11a287fdc 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts @@ -18,13 +18,13 @@ interface TabularEntry extends tf.TensorContainerObject { const sanitize: PreprocessingFunction = { type: TabularPreprocessing.Sanitize, - apply: (entry: tf.TensorContainer): tf.TensorContainer => { + apply: async (entry: Promise) => { // if preprocessing a dataset without labels, then the entry is an array of numbers if (Array.isArray(entry)) { return entry.map(i => i ?? 0) // otherwise it is an object with feature and labels } else { - const { xs, ys } = entry as TabularEntry + const { xs, ys } = await entry as TabularEntry return { xs: xs.map(i => i ?? 0), ys diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index 110e9dc95..81f76faa3 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -3,50 +3,33 @@ import * as tf from '@tensorflow/tfjs' import type { Task } from '../../../index.js' import type { PreprocessingFunction } from './base.js' -import { encode } from 'gpt-tokenizer/cjs/model/text-davinci-003' +// import { encode } from 'gpt-tokenizer/cjs/model/text-davinci-003' import { AutoTokenizer } from '@xenova/transformers'; /** * Available text preprocessing types. */ export enum TextPreprocessing { - Tokenize, - Padding -} - -interface TokenizedEntry extends tf.TensorContainerObject { - xs: tf.Tensor1D -} - -const padding: PreprocessingFunction = { - type: TextPreprocessing.Padding, - apply: (x: tf.TensorContainer, task: Task) => { - const { xs } = x as TokenizedEntry - const vocabSize = task.trainingInformation.vocabSize ?? 50258 - const maxLength = task.trainingInformation.maxSequenceLength ?? 128 - // Use the tokenizer paddingToken except if undefined - // Fallback value to the last value of the vocab size - const paddingToken = task.trainingInformation.paddingToken ?? vocabSize - const xsPadded = xs.pad([[0, Math.max(0, maxLength - xs.size)]], paddingToken).slice([0], [maxLength]) - return { - xs: xsPadded, - ys: tf.oneHot(xsPadded, vocabSize) // gpt-tfjs expects a one-hot encoded token label - } - } + Tokenize } const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, - apply: (x: tf.TensorContainer, task: Task) => { - const xs = x as string // tf.TextLineDataset yields strings - // TODO: add to task definition - const tokenizer = await AutoTokenizer.from_pretrained('Xenova/bert-base-uncased'); - const { tokens } = await tokenizer(xs); - // const tokenizer = { encode } - // const tokens = tokenizer.encode(xs) - + apply: async (x: Promise, task: Task): Promise => { + let xs = await x as string // tf.TextLineDataset yields strings + const tokenizerName = task.trainingInformation.tokenizer ?? 'Xenova/gpt2' + const tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) + const maxSequenceLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length + const { input_ids: tokens } = tokenizer(xs, { + padding: true, + truncation: true, + max_length: maxSequenceLength, + return_tensor: false + }) + const xsTokens = tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs return { - xs: tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs + xs: xsTokens, + ys: tf.oneHot(xsTokens, tokenizer.model.vocab.length + 1) // gpt-tfjs expects a one-hot encoded token label } } } @@ -55,6 +38,5 @@ const tokenize: PreprocessingFunction = { * Available text preprocessing functions. */ export const AVAILABLE_PREPROCESSING = List.of( - tokenize, - padding + tokenize ).sortBy((e) => e.type) diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 34f218d7f..67721aec2 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -1,11 +1,5 @@ -<<<<<<< HEAD -import type { Model, Task, TaskProvider } from '..' -import { TrainingSchemes, models, data } from '..' -import { encode, EndOfText } from 'gpt-tokenizer/cjs/model/text-davinci-003' -======= import type { Model, Task, TaskProvider } from '../index.js' -import { models } from '../index.js' ->>>>>>> 632-upgrade-es2022-tharvik +import { data, models } from '../index.js' export const wikitext: TaskProvider = { getTask (): Task { @@ -25,26 +19,17 @@ export const wikitext: TaskProvider = { trainingInformation: { dataType: 'text', modelID: 'wikitext-103-raw-model', - preprocessingFunctions: [data.TextPreprocessing.Tokenize, data.TextPreprocessing.Padding], + preprocessingFunctions: [data.TextPreprocessing.Tokenize], validationSplit: 0.2, // TODO: is this used somewhere? because train, eval and test are already split in dataset -<<<<<<< HEAD epochs: 1, - scheme: TrainingSchemes.FEDERATED, -======= - epochs: 10, - // constructing a batch is taken care automatically in the dataset to make things faster - // so we fake a batch size of 1 - batchSize: 1, scheme: 'federated', ->>>>>>> 632-upgrade-es2022-tharvik noiseScale: undefined, decentralizedSecure: true, minimumReadyPeers: 3, maxShareValue: 100, roundDuration: 10, batchSize: 16, - paddingToken: encode(EndOfText, { allowedSpecial: new Set([EndOfText]) })[0], - vocabSize: 50258, + tokenizer: 'Xenova/gpt2', maxSequenceLength: 128 } } diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 9df3c1a0b..23b645c82 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -7,7 +7,9 @@ import * as tf from '@tensorflow/tfjs' import { WeightsContainer } from '../../index.js' import type { Dataset } from '../../dataset/index.js' import { Sink } from '../../utils/event_emitter.js' -import { encode, decode } from 'gpt-tokenizer/cjs/model/text-davinci-003' +// import { encode, decode } from 'gpt-tokenizer/cjs/model/text-davinci-003' +import { AutoTokenizer } from '@xenova/transformers'; + import type { EpochLogs, Prediction, Sample } from '../model.js' import { Model } from '../model.js' @@ -35,7 +37,7 @@ export class GPT extends Model { const config: Config = { modelType: 'gpt-nano', lr: 0.001, - maxIter: 10, + maxIter: 1, maxEvalBatches: 10, blockSize: 128, vocabSize: 50258 @@ -97,10 +99,9 @@ export class GPT extends Model { return Promise.resolve(ret) } - async generate (input: Sample, newTokens: number): Promise { - const string = ((input.arraySync() as unknown) as string[])[0] - const tokenizer = { encode, decode } - const tokens = tokenizer.encode(string) + async generate (input: string, tokenizerModel: string = 'Xenova/gpt2', newTokens: number = 10): Promise { + const tokenizer = await AutoTokenizer.from_pretrained(tokenizerModel) + const { input_ids: tokens } = await tokenizer(input, { return_tensor: false}) const generationConfig = { maxNewTokens: newTokens, @@ -108,7 +109,8 @@ export class GPT extends Model { doSample: false, topK: null } - const predictedTokens = await this.model.generate([tokens], generationConfig) + console.log(tokens) + const predictedTokens = await this.model.generate(tokens, generationConfig) const generatedWords = tokenizer.decode(predictedTokens[0]) return generatedWords } diff --git a/discojs/discojs-core/src/models/gpt/model.ts b/discojs/discojs-core/src/models/gpt/model.ts index 0411d3f09..2bdf1428f 100644 --- a/discojs/discojs-core/src/models/gpt/model.ts +++ b/discojs/discojs-core/src/models/gpt/model.ts @@ -504,17 +504,14 @@ class GPTLMHeadModel extends GPTModel { let timePerToken = performance.now() const idxNext = tf.tidy(() => { - const blockSize = model.inputs[0].shape[1] - if (blockSize === null) throw new Error('unexpected shape') - - const idxCond = - idx.shape[1] <= blockSize - ? idx - : idx.slice([0, -blockSize], [-1, -1]) - const outputed = model.predict(idxCond) - if (Array.isArray(outputed)) throw new Error('model outputed multiple values') - if (outputed.shape.length !== 3) throw new Error('model outputed weird shape') - const logits = outputed as tf.Tensor3D + const blockSize = this.config.blockSize + const idxCond = idx.shape[1] <= blockSize + ? idx : idx.slice([0, -blockSize], [-1, -1]) + + const output = model.predict(idxCond) + if (Array.isArray(output)) throw new Error('The model outputs too multiple values') + if (output.shape.length !== 3) throw new Error('The model outputs wrong shape') + const logits = output as tf.Tensor3D timePerToken = performance.now() - timePerToken const logitsScaled = logits diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index e2c3ad224..95917e812 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -56,12 +56,10 @@ export interface TrainingInformation { // aggregator: aggregator to be used by the server for federated learning, or by the peers for decentralized learning // default is 'average', other options include for instance 'bandit' aggregator?: AggregatorChoice - // paddingToken (number) used for text preprocessing to pad batches containing sequences of different lengths. The padding token is defined by which pre-trained tokenizer is selected - paddingToken?: number - // vocabSize (number) used for text preprocessing using a tokenizer. The vocabSize is the number of tokens in the pre-trained tokenizer vocabulary. - vocabSize?: number + // tokenizer (string). For example: 'Xenova/gpt2'. The name should match a Transformers.js tokenizer available on HuggingFace's hub. + tokenizer?: string // maxSequenceLength: the maximum length of a input string used as input to a GPT model. It is used during preprocessing to - // truncate strings to a maximum length + // truncate strings to a maximum length. The default value is tokenizer.model_max_length maxSequenceLength?: number } @@ -173,7 +171,7 @@ export function isTrainingInformation (raw: unknown): raw is TrainingInformation validationSplit, } const _correct: TrainingInformation = repack - const _total: Record = repack + // const _total: Record = repack return true } diff --git a/discojs/discojs-node/src/data/text_loader.ts b/discojs/discojs-node/src/data/text_loader.ts index 960eef286..eed01e90c 100644 --- a/discojs/discojs-node/src/data/text_loader.ts +++ b/discojs/discojs-node/src/data/text_loader.ts @@ -1,11 +1,13 @@ import { data as tfData } from '@tensorflow/tfjs-node' - +import fs from 'node:fs' import { data } from '@epfml/discojs-core' export class TextLoader extends data.TextLoader { async loadDatasetFrom (source: string): Promise { - // Lazy chunk file reader - const file = new tfData.FileDataSource(source, { chunkSize: 1024 }) + // TODO: reads all the file at once, + // inputting the file path to FileDataSource isn't supported anymore + const inputFile = fs.readFileSync(source) + const file = new tfData.FileDataSource(inputFile, { chunkSize: 1024 }) // TODO: reading files line by line is an issue for LLM tokenization return new tfData.TextLineDataset(file) } diff --git a/web-client/.gitignore b/web-client/.gitignore index 781b3b25c..8630ec9e2 100644 --- a/web-client/.gitignore +++ b/web-client/.gitignore @@ -1,3 +1,4 @@ # local env files .env.local .env.*.local +node_modules \ No newline at end of file From 270ca103d9926bcb628fc6a2a50fb278f92ed248 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Tue, 26 Mar 2024 15:34:06 +0100 Subject: [PATCH 21/37] Load tokenizer only once during pre-processing --- discojs/discojs-core/package.json | 1 - .../data/preprocessing/text_preprocessing.ts | 16 ++++++++--- discojs/discojs-core/src/models/gpt/index.ts | 1 - .../src/task/training_information.ts | 2 ++ docs/examples/wikitext.ts | 27 ++++++++++++++----- package-lock.json | 14 ---------- 6 files changed, 34 insertions(+), 27 deletions(-) diff --git a/discojs/discojs-core/package.json b/discojs/discojs-core/package.json index cc989222d..c6e4d2cca 100644 --- a/discojs/discojs-core/package.json +++ b/discojs/discojs-core/package.json @@ -24,7 +24,6 @@ "@types/msgpack-lite": "0.1", "@xenova/transformers": "^2.16.1", "axios": "1", - "gpt-tokenizer": "^2.1.2", "gpt3-tokenizer": "1", "immutable": "4", "isomorphic-wrtc": "1", diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index 81f76faa3..e409f2fab 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -3,8 +3,7 @@ import * as tf from '@tensorflow/tfjs' import type { Task } from '../../../index.js' import type { PreprocessingFunction } from './base.js' -// import { encode } from 'gpt-tokenizer/cjs/model/text-davinci-003' -import { AutoTokenizer } from '@xenova/transformers'; +import { AutoTokenizer, PreTrainedTokenizer } from '@xenova/transformers'; /** * Available text preprocessing types. @@ -16,9 +15,17 @@ export enum TextPreprocessing { const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, apply: async (x: Promise, task: Task): Promise => { + let timePerToken = performance.now() let xs = await x as string // tf.TextLineDataset yields strings - const tokenizerName = task.trainingInformation.tokenizer ?? 'Xenova/gpt2' - const tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) + let tokenizer = task.trainingInformation.tokenizerModel as PreTrainedTokenizer + // The tokenizer is initialized the first time it is needed + // We're doing so to not send complex objects between the server and clients + if (tokenizer === undefined) { + const tokenizerName = task.trainingInformation.tokenizer ?? 'Xenova/gpt2' + tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) + task.trainingInformation.tokenizerModel = tokenizer + } + task.trainingInformation.tokenizer const maxSequenceLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length const { input_ids: tokens } = tokenizer(xs, { padding: true, @@ -27,6 +34,7 @@ const tokenize: PreprocessingFunction = { return_tensor: false }) const xsTokens = tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs + console.log(performance.now() - timePerToken) return { xs: xsTokens, ys: tf.oneHot(xsTokens, tokenizer.model.vocab.length + 1) // gpt-tfjs expects a one-hot encoded token label diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 23b645c82..7a8468aef 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -7,7 +7,6 @@ import * as tf from '@tensorflow/tfjs' import { WeightsContainer } from '../../index.js' import type { Dataset } from '../../dataset/index.js' import { Sink } from '../../utils/event_emitter.js' -// import { encode, decode } from 'gpt-tokenizer/cjs/model/text-davinci-003' import { AutoTokenizer } from '@xenova/transformers'; diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index 95917e812..1f59c5b19 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -58,6 +58,8 @@ export interface TrainingInformation { aggregator?: AggregatorChoice // tokenizer (string). For example: 'Xenova/gpt2'. The name should match a Transformers.js tokenizer available on HuggingFace's hub. tokenizer?: string + // tokenizerModel (object). The actual tokenizer. It is loaded the first time it is needed for the subsequent tokenizations + tokenizerModel?: object // maxSequenceLength: the maximum length of a input string used as input to a GPT model. It is used during preprocessing to // truncate strings to a maximum length. The default value is tokenizer.model_max_length maxSequenceLength?: number diff --git a/docs/examples/wikitext.ts b/docs/examples/wikitext.ts index 9ff1d25e9..39f2e35be 100644 --- a/docs/examples/wikitext.ts +++ b/docs/examples/wikitext.ts @@ -1,31 +1,44 @@ import type { Task, models } from '@epfml/discojs-core' import { - Disco, fetchTasks, TrainingSchemes, data, client as clients, + Disco, fetchTasks, data, client as clients, aggregator as aggregators, informant } from '@epfml/discojs-core' import { NodeTextLoader } from '@epfml/discojs-node' -import tf from '@tensorflow/tfjs' +import * as tf from '@tensorflow/tfjs-node' +import { AutoTokenizer } from '@xenova/transformers'; -async function main (): Promise { + +async function main(): Promise { + const tokenizer = await AutoTokenizer.from_pretrained('Xenova/gpt2') + // tokenizer.length + // const { input_ids: tokens } = await tokenizer('I love transformers!', { + // padding: true, + // truncation: true, + // max_length: tokenizer.model_max_length, + // return_tensor: false + // }) + // console.log(tf.tensor(tokens, undefined, 'int32')) // Launch a server instance const url = new URL('http://localhost:8080') const tasks = await fetchTasks(url) const task = tasks.get('wikitext-103') if (task === undefined) { throw new Error('task not found') } const dataset = await loadWikitextData(task) - + // console.log(await dataset.train.preprocess().dataset.take(5).toArray()) + // console.log(1) const aggregator = new aggregators.MeanAggregator() const client = new clients.federated.FederatedClient(url, task, aggregator) const trainingInformant = new informant.FederatedInformant(task, 10) - const disco = new Disco(task, { scheme: TrainingSchemes.FEDERATED, client, aggregator, informant: trainingInformant }) + const disco = new Disco(task, { scheme: 'federated', client, aggregator, informant: trainingInformant }) await disco.fit(dataset) if (aggregator.model === undefined) { throw new Error('model was not set') } const model = aggregator.model as models.GPT - const sample = tf.tensor(['Hello world,']) - const predictions = await model.generate(sample, 1) + const sample = 'Hello world,' + const tokenizerModel = task.trainingInformation.tokenizer ?? 'Xenova/gpt2' + const predictions = await model.generate(sample, tokenizerModel) console.log(predictions) await disco.close() } diff --git a/package-lock.json b/package-lock.json index c6c34c9e9..a6926be4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,6 @@ "@types/msgpack-lite": "0.1", "@xenova/transformers": "^2.16.1", "axios": "1", - "gpt-tokenizer": "^2.1.2", "gpt3-tokenizer": "1", "immutable": "4", "isomorphic-wrtc": "1", @@ -11289,14 +11288,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gpt-tokenizer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/gpt-tokenizer/-/gpt-tokenizer-2.1.2.tgz", - "integrity": "sha512-HSuI5d6uey+c7x/VzQlPfCoGrfLyAc28vxWofKbjR9PJHm0AjQGSWkKw/OJnb+8S1g7nzgRsf0WH3dK+NNWYbg==", - "dependencies": { - "rfc4648": "^1.5.2" - } - }, "node_modules/gpt3-tokenizer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/gpt3-tokenizer/-/gpt3-tokenizer-1.1.5.tgz", @@ -17108,11 +17099,6 @@ "node": ">=0.10.0" } }, - "node_modules/rfc4648": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", - "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==" - }, "node_modules/rfdc": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", From 7306fe89ea0a610e9bc5294ed502760d9d861abe Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Tue, 26 Mar 2024 15:38:37 +0100 Subject: [PATCH 22/37] Change tokenizer trainingInformation name --- .../data/preprocessing/text_preprocessing.ts | 13 +++++++------ discojs/discojs-core/src/default_tasks/wikitext.ts | 2 +- .../discojs-core/src/task/training_information.ts | 11 ++++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index e409f2fab..8bcf720de 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -12,20 +12,21 @@ export enum TextPreprocessing { Tokenize } +/** + * Tokenize and pad input strings + */ const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, apply: async (x: Promise, task: Task): Promise => { - let timePerToken = performance.now() let xs = await x as string // tf.TextLineDataset yields strings - let tokenizer = task.trainingInformation.tokenizerModel as PreTrainedTokenizer + let tokenizer = task.trainingInformation.tokenizer as PreTrainedTokenizer // The tokenizer is initialized the first time it is needed // We're doing so to not send complex objects between the server and clients if (tokenizer === undefined) { - const tokenizerName = task.trainingInformation.tokenizer ?? 'Xenova/gpt2' + const tokenizerName = task.trainingInformation.tokenizerName ?? 'Xenova/gpt2' tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) - task.trainingInformation.tokenizerModel = tokenizer + task.trainingInformation.tokenizer = tokenizer } - task.trainingInformation.tokenizer const maxSequenceLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length const { input_ids: tokens } = tokenizer(xs, { padding: true, @@ -34,7 +35,7 @@ const tokenize: PreprocessingFunction = { return_tensor: false }) const xsTokens = tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs - console.log(performance.now() - timePerToken) + return { xs: xsTokens, ys: tf.oneHot(xsTokens, tokenizer.model.vocab.length + 1) // gpt-tfjs expects a one-hot encoded token label diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 67721aec2..8527027f9 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -29,7 +29,7 @@ export const wikitext: TaskProvider = { maxShareValue: 100, roundDuration: 10, batchSize: 16, - tokenizer: 'Xenova/gpt2', + tokenizerName: 'Xenova/gpt2', maxSequenceLength: 128 } } diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index 1f59c5b19..da0212bf9 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -47,7 +47,7 @@ export interface TrainingInformation { // Number (>0 && <1). It must be a number between 0 and 1 and it is used only if byzantineRobustAggregator is true. tauPercentile?: number // maxShareValue: Secure Aggregation: maximum absolute value of a number in a randomly generated share - // default is 100, must be a positive number, check the ~/disco/information/PRIVACY.md file for more information on significance of maxShareValue selection + // default is 100, must be a positive number, check the docs/PRIVACY.md file for more information on significance of maxShareValue selection // only relevant if secure aggregation is true (for either federated or decentralized learning) maxShareValue?: number // minimumReadyPeers: Decentralized Learning: minimum number of peers who must be ready to participate in aggregation before model updates are shared between clients @@ -56,10 +56,11 @@ export interface TrainingInformation { // aggregator: aggregator to be used by the server for federated learning, or by the peers for decentralized learning // default is 'average', other options include for instance 'bandit' aggregator?: AggregatorChoice - // tokenizer (string). For example: 'Xenova/gpt2'. The name should match a Transformers.js tokenizer available on HuggingFace's hub. - tokenizer?: string - // tokenizerModel (object). The actual tokenizer. It is loaded the first time it is needed for the subsequent tokenizations - tokenizerModel?: object + // tokenizerName (string). For example: 'Xenova/gpt2'. The name should match a Transformers.js tokenizer available on HuggingFace's hub. + tokenizerName?: string + // tokenizer (object). The actual tokenizer. It is initialized according to the tokenizerName the first time it is needed for the subsequent tokenizations + // This field is not expected to be filled when initializing a field + tokenizer?: object // maxSequenceLength: the maximum length of a input string used as input to a GPT model. It is used during preprocessing to // truncate strings to a maximum length. The default value is tokenizer.model_max_length maxSequenceLength?: number From b561f2a6018598af5ad363176d1595a8c0448926 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 13:45:49 +0100 Subject: [PATCH 23/37] Implement text dataset shuffling and left padding preprocessing --- discojs/discojs-core/src/dataset/data/data.ts | 11 ++-- .../data/preprocessing/text_preprocessing.ts | 56 +++++++++++++++---- .../src/dataset/data_loader/text_loader.ts | 12 ++-- .../src/default_tasks/wikitext.ts | 2 +- discojs/discojs-core/src/models/gpt/index.ts | 8 +-- discojs/discojs-core/src/models/gpt/train.ts | 27 ++++++--- .../src/training/trainer/trainer.ts | 2 +- discojs/discojs-node/src/data/text_loader.ts | 2 +- discojs/discojs-web/src/data/text_loader.ts | 3 +- 9 files changed, 86 insertions(+), 37 deletions(-) diff --git a/discojs/discojs-core/src/dataset/data/data.ts b/discojs/discojs-core/src/dataset/data/data.ts index c42e6f704..fbae900a1 100644 --- a/discojs/discojs-core/src/dataset/data/data.ts +++ b/discojs/discojs-core/src/dataset/data/data.ts @@ -73,7 +73,7 @@ export abstract class Data { this.availablePreprocessing === undefined || this.availablePreprocessing.size === 0 ) { - return (x) => new Promise((res, _) => res(x)) + return x => Promise.resolve(x) } const applyPreprocessing = this.availablePreprocessing @@ -81,14 +81,13 @@ export abstract class Data { .map((e) => e.apply) if (applyPreprocessing.size === 0) { - return (x) => new Promise((res, _) => res(x)) + return x => Promise.resolve(x) } const preprocessingChain = applyPreprocessing.reduce((acc, fn) => - (x: Promise) => fn(acc(x), this.task), - (x: Promise) => x, - ) - return (x: tf.TensorContainer) => preprocessingChain(new Promise((res, _) => res(x))) + x => fn(acc(x), this.task), (x: Promise) => x) + + return x => preprocessingChain(Promise.resolve(x)) } /** diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index 8bcf720de..fd7e87d08 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -9,7 +9,43 @@ import { AutoTokenizer, PreTrainedTokenizer } from '@xenova/transformers'; * Available text preprocessing types. */ export enum TextPreprocessing { - Tokenize + Tokenize, + LeftPadding +} + +interface TokenizedEntry extends tf.TensorContainerObject { + xs: tf.Tensor1D +} + +/** + * We are currently only implementing left padding for text generation + * https://huggingface.co/docs/transformers/en/llm_tutorial#wrong-padding-side + * The function can easily be extended to support right padding once the need arise + */ +const leftPadding: PreprocessingFunction = { + type: TextPreprocessing.LeftPadding, + apply: async (x: Promise, task: Task): Promise => { + let { xs } = await x as TokenizedEntry + let tokenizer = task.trainingInformation.tokenizer as PreTrainedTokenizer + if (tokenizer === undefined) { + const tokenizerName = task.trainingInformation.tokenizerName ?? 'Xenova/gpt2' + tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) + task.trainingInformation.tokenizer = tokenizer + } + const maxLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length + // Should never happen because tokenization truncates inputs + if (xs.size > maxLength) { + xs = xs.slice([0], [maxLength]) + } else if (xs.size < maxLength) { + const paddingToken = tokenizer.pad_token_id + xs = xs.pad([[Math.max(0, maxLength - xs.size), 0]], paddingToken) + } + // if xs.size == maxLength we can leave it as it is + return { + xs, + ys: tf.oneHot(xs, tokenizer.model.vocab.length + 1) // gpt-tfjs expects a one-hot encoded token label + } + } } /** @@ -27,18 +63,17 @@ const tokenize: PreprocessingFunction = { tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) task.trainingInformation.tokenizer = tokenizer } - const maxSequenceLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length const { input_ids: tokens } = tokenizer(xs, { - padding: true, + // Transformers.js currently only supports right padding while we need left for text generation + // Right padding should be supported in the future, once it is, we can directly pad while tokenizing + // https://github.com/xenova/transformers.js/blob/8804c36591d11d8456788d1bb4b16489121b3be2/src/tokenizers.js#L2517 + padding: false, truncation: true, - max_length: maxSequenceLength, - return_tensor: false + return_tensor: false, + max_length: task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length, }) - const xsTokens = tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs - return { - xs: xsTokens, - ys: tf.oneHot(xsTokens, tokenizer.model.vocab.length + 1) // gpt-tfjs expects a one-hot encoded token label + xs: tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs} } } } @@ -47,5 +82,6 @@ const tokenize: PreprocessingFunction = { * Available text preprocessing functions. */ export const AVAILABLE_PREPROCESSING = List.of( - tokenize + tokenize, + leftPadding ).sortBy((e) => e.type) diff --git a/discojs/discojs-core/src/dataset/data_loader/text_loader.ts b/discojs/discojs-core/src/dataset/data_loader/text_loader.ts index e1b27dbba..a9ab643d6 100644 --- a/discojs/discojs-core/src/dataset/data_loader/text_loader.ts +++ b/discojs/discojs-core/src/dataset/data_loader/text_loader.ts @@ -3,7 +3,7 @@ import type { Task } from '../../index.js' import type { DataSplit, Dataset } from '../index.js' import { TextData } from '../index.js' -import { DataLoader } from './index.js' +import { DataLoader, DataConfig } from './index.js' /** * Text data loader whose instantiable implementation is delegated by the platform-dependent Disco subprojects, namely, @@ -18,13 +18,15 @@ export abstract class TextLoader extends DataLoader { abstract loadDatasetFrom (source: S): Promise - async load (source: S): Promise { - return await this.loadDatasetFrom(source) + async load (source: S, config?: DataConfig): Promise { + const dataset = await this.loadDatasetFrom(source) + // 1st arg: Stream shuffling buffer size + return (config?.shuffle === undefined || config?.shuffle) ? dataset.shuffle(1000, undefined, true) : dataset } - async loadAll (sources: S[]): Promise { + async loadAll (sources: S[], config?: DataConfig): Promise { const concatenated = - (await Promise.all(sources.map(async (src) => await this.load(src)))) + (await Promise.all(sources.map(async (src) => await this.load(src, config)))) .reduce((acc, dataset) => acc.concatenate(dataset)) return { diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 8527027f9..eaf5c16aa 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -19,7 +19,7 @@ export const wikitext: TaskProvider = { trainingInformation: { dataType: 'text', modelID: 'wikitext-103-raw-model', - preprocessingFunctions: [data.TextPreprocessing.Tokenize], + preprocessingFunctions: [data.TextPreprocessing.Tokenize, data.TextPreprocessing.LeftPadding], validationSplit: 0.2, // TODO: is this used somewhere? because train, eval and test are already split in dataset epochs: 1, scheme: 'federated', diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 7a8468aef..f43576306 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -18,10 +18,10 @@ import { GPTLMHeadModel } from './model.js' // TODO too big config interface Config { modelType: 'gpt-nano' - // epochs: number // TODO mv to Task maxIter: number blockSize: number vocabSize: number + evaluateEvery: number lr: number maxEvalBatches: number } @@ -36,8 +36,9 @@ export class GPT extends Model { const config: Config = { modelType: 'gpt-nano', lr: 0.001, - maxIter: 1, - maxEvalBatches: 10, + maxIter: 500, + evaluateEvery:50, + maxEvalBatches: 50, blockSize: 128, vocabSize: 50258 } @@ -108,7 +109,6 @@ export class GPT extends Model { doSample: false, topK: null } - console.log(tokens) const predictedTokens = await this.model.generate(tokens, generationConfig) const generatedWords = tokenizer.decode(predictedTokens[0]) return generatedWords diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index 8a3a8dd40..389c8d226 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -56,14 +56,17 @@ export async function train ( let iteration = 1 const iterator = await ds.iterator() while (true) { + let preprocessingTime = performance.now() const next = await iterator.next() + preprocessingTime = performance.now() - preprocessingTime if (next.done === true || iteration > c.maxIter) { tf.dispose([next.value]) break } + let weightUpdateTime = performance.now() await callbacks.onEpochBegin?.(epoch) const { xs, ys } = next.value - + const lossFn: () => tf.Scalar = () => { const logits = model.apply(xs) if (Array.isArray(logits)) { @@ -80,23 +83,31 @@ export async function train ( opt.applyGradients(gradsClipped) return loss }) - + const loss = await lossTensor.array() tf.dispose([xs, ys, lossTensor]) + weightUpdateTime = performance.now() - weightUpdateTime console.log( `Epoch: ${epoch}`, `\tStep: ${iteration} / ${c.maxIter}`, `\tLoss: ${loss.toFixed(3)}`, - `\tMemory: ${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB` + `\tMemory: ${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB`, + `\Preprocessing time: ${preprocessingTime.toFixed(0)} ms`, + `\tWeight update time: ${weightUpdateTime.toFixed(0)} ms` ) - let logs: tf.Logs | undefined - if (evalDs !== undefined) { - logs = await evaluate(model, evalDs, c.maxEvalBatches) + if (evalDs !== undefined && config.evaluateEvery !== undefined + && iteration % config.evaluateEvery == 0) { + const logs = await evaluate(model, evalDs, c.maxEvalBatches) + console.log(logs) } - await callbacks.onEpochEnd?.(epoch, logs) - await new Promise((resolve) => setTimeout(resolve, 1)) iteration++ } + let logs: tf.Logs | undefined + if (evalDs !== undefined) { + logs = await evaluate(model, evalDs, c.maxEvalBatches) + console.log(logs) + } + await callbacks.onEpochEnd?.(epoch, logs) } opt.dispose() diff --git a/discojs/discojs-core/src/training/trainer/trainer.ts b/discojs/discojs-core/src/training/trainer/trainer.ts index 2c2a841a3..08cf50e19 100644 --- a/discojs/discojs-core/src/training/trainer/trainer.ts +++ b/discojs/discojs-core/src/training/trainer/trainer.ts @@ -85,7 +85,7 @@ export abstract class Trainer { this.trainingInformant.loss = logs.val_loss } } else { - this.trainerLogger.error('onEpochEnd: NaN value') + this.trainerLogger.error('onEpochEnd: no logs available') } } diff --git a/discojs/discojs-node/src/data/text_loader.ts b/discojs/discojs-node/src/data/text_loader.ts index eed01e90c..affa192e4 100644 --- a/discojs/discojs-node/src/data/text_loader.ts +++ b/discojs/discojs-node/src/data/text_loader.ts @@ -9,6 +9,6 @@ export class TextLoader extends data.TextLoader { const inputFile = fs.readFileSync(source) const file = new tfData.FileDataSource(inputFile, { chunkSize: 1024 }) // TODO: reading files line by line is an issue for LLM tokenization - return new tfData.TextLineDataset(file) + return new tfData.TextLineDataset(file).filter(s => s != ' ') // newline creates empty strings } } diff --git a/discojs/discojs-web/src/data/text_loader.ts b/discojs/discojs-web/src/data/text_loader.ts index 59bd31eec..b76d03016 100644 --- a/discojs/discojs-web/src/data/text_loader.ts +++ b/discojs/discojs-web/src/data/text_loader.ts @@ -5,6 +5,7 @@ import { data } from '@epfml/discojs-core' export class TextLoader extends data.TextLoader { loadDatasetFrom (source: File): Promise { const file = new tf.data.FileDataSource(source) - return Promise.resolve(new tf.data.TextLineDataset(file)) + const dataset = new tf.data.TextLineDataset(file).filter(s => s != ' ') // newline creates empty strings + return Promise.resolve(dataset) } } From 07175e0576526df3f0686aa4435b25fb96b88bb3 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 14:21:05 +0100 Subject: [PATCH 24/37] Update wikitext example --- docs/examples/wikitext.ts | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/docs/examples/wikitext.ts b/docs/examples/wikitext.ts index 39f2e35be..768a1228b 100644 --- a/docs/examples/wikitext.ts +++ b/docs/examples/wikitext.ts @@ -1,31 +1,19 @@ import type { Task, models } from '@epfml/discojs-core' import { Disco, fetchTasks, data, client as clients, - aggregator as aggregators, informant + aggregator as aggregators, informant, serialization } from '@epfml/discojs-core' import { NodeTextLoader } from '@epfml/discojs-node' -import * as tf from '@tensorflow/tfjs-node' -import { AutoTokenizer } from '@xenova/transformers'; +import fs from 'node:fs/promises' async function main(): Promise { - const tokenizer = await AutoTokenizer.from_pretrained('Xenova/gpt2') - // tokenizer.length - // const { input_ids: tokens } = await tokenizer('I love transformers!', { - // padding: true, - // truncation: true, - // max_length: tokenizer.model_max_length, - // return_tensor: false - // }) - // console.log(tf.tensor(tokens, undefined, 'int32')) // Launch a server instance const url = new URL('http://localhost:8080') const tasks = await fetchTasks(url) const task = tasks.get('wikitext-103') if (task === undefined) { throw new Error('task not found') } const dataset = await loadWikitextData(task) - // console.log(await dataset.train.preprocess().dataset.take(5).toArray()) - // console.log(1) const aggregator = new aggregators.MeanAggregator() const client = new clients.federated.FederatedClient(url, task, aggregator) const trainingInformant = new informant.FederatedInformant(task, 10) @@ -35,19 +23,27 @@ async function main(): Promise { if (aggregator.model === undefined) { throw new Error('model was not set') } - const model = aggregator.model as models.GPT - const sample = 'Hello world,' - const tokenizerModel = task.trainingInformation.tokenizer ?? 'Xenova/gpt2' - const predictions = await model.generate(sample, tokenizerModel) - console.log(predictions) + let model = aggregator.model as models.GPT + const sample = 'Hello world' + const tokenizerName = task.trainingInformation.tokenizerName ?? 'Xenova/gpt2' + console.log(await model.generate(sample, tokenizerName)) + + //Save the trained model + const encoded = await serialization.model.encode(model) + await fs.writeFile(`model.json`, encoded) + + // Load an existing model + // const content = await fs.readFile(`model.json`) + // model = await serialization.model.decode(content) as models.GPT + // console.log(await model.generate(sample, tokenizerName, 10)) await disco.close() } async function loadWikitextData (task: Task): Promise { const loader = new NodeTextLoader(task) const dataSplit: data.DataSplit = { - train: await data.TextData.init((await loader.load('../../datasets/wikitext/wiki.train.tokens')), task), - validation: await data.TextData.init(await loader.load('../../datasets/wikitext/wiki.valid.tokens'), task) + train: await data.TextData.init(await loader.load('../../datasets/wikitext/wiki.train.tokens', {shuffle: false}), task), + validation: await data.TextData.init(await loader.load('../../datasets/wikitext/wiki.valid.tokens', {shuffle: false}), task) } return dataSplit } From 482df2d85a5d466f819bdcaaeb74ee0a2dd3a12c Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 14:32:44 +0100 Subject: [PATCH 25/37] Fix merge --- discojs/discojs-core/src/aggregator/index.ts | 4 -- discojs/discojs-core/src/aggregator/robust.ts | 48 ------------------- .../data/preprocessing/text_preprocessing.ts | 12 ----- server/src/router/federated/server.ts | 15 ------ .../src/components/training/Trainer.vue | 12 ----- 5 files changed, 91 deletions(-) delete mode 100644 discojs/discojs-core/src/aggregator/robust.ts diff --git a/discojs/discojs-core/src/aggregator/index.ts b/discojs/discojs-core/src/aggregator/index.ts index 8e6872d42..0913c17e1 100644 --- a/discojs/discojs-core/src/aggregator/index.ts +++ b/discojs/discojs-core/src/aggregator/index.ts @@ -3,10 +3,6 @@ import type { Base } from './base.js' export { Base as AggregatorBase, AggregationStep } from './base.js' export { MeanAggregator } from './mean.js' -<<<<<<< HEAD -export { RobustAggregator } from './robust.js' -======= ->>>>>>> develop export { SecureAggregator } from './secure.js' export { getAggregator, AggregatorChoice } from './get.js' diff --git a/discojs/discojs-core/src/aggregator/robust.ts b/discojs/discojs-core/src/aggregator/robust.ts deleted file mode 100644 index 6dd0c58e4..000000000 --- a/discojs/discojs-core/src/aggregator/robust.ts +++ /dev/null @@ -1,48 +0,0 @@ -// TODO remove as nothing is implemented - -import { Base as Aggregator } from './base.js' -import type { client, Model, WeightsContainer } from '../index.js' - -import type { Map } from 'immutable' - -export type Momentum = WeightsContainer - -// TODO @s314cy: store previous round contributions + be able to access own previous contribution -// for computing the momentum -export class RobustAggregator extends Aggregator { - constructor ( - _tauPercentile: number, - model?: Model, - roundCutoff?: number, - communicationRounds?: number - ) { - super(model, roundCutoff, communicationRounds) - } - - add (nodeId: client.NodeID, contribution: WeightsContainer, round: number, communicationRound: number): boolean { - if (this.isWithinRoundCutoff(round)) { - const stale = this.contributions.get(communicationRound) - if (stale !== undefined) { - // this.momentums = this.momentums.set(nodeId, this.computeMomentum(stale, contribution)) - } else { - // - } - this.contributions = this.contributions.setIn([nodeId, communicationRound], contribution) - this.aggregate() - return true - } - return false - } - - override aggregate (): void { - throw new Error('not implemented') - } - - override makePayloads (): Map { - throw new Error('not implemented') - } - - isFull (): boolean { - return true - } -} diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index 6503d6fed..fd7e87d08 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -1,13 +1,9 @@ import { List } from 'immutable' import * as tf from '@tensorflow/tfjs' -<<<<<<< HEAD import type { Task } from '../../../index.js' import type { PreprocessingFunction } from './base.js' import { AutoTokenizer, PreTrainedTokenizer } from '@xenova/transformers'; -======= -import type { PreprocessingFunction } from './base.js' ->>>>>>> develop /** * Available text preprocessing types. @@ -57,7 +53,6 @@ const leftPadding: PreprocessingFunction = { */ const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, -<<<<<<< HEAD apply: async (x: Promise, task: Task): Promise => { let xs = await x as string // tf.TextLineDataset yields strings let tokenizer = task.trainingInformation.tokenizer as PreTrainedTokenizer @@ -77,13 +72,6 @@ const tokenize: PreprocessingFunction = { return_tensor: false, max_length: task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length, }) -======= - apply: (x: tf.TensorContainer) => { - const { xs, ys } = x as TextEntry - - const tokenized = gpt3Tokenizer.encode(xs[0]).bpe - ->>>>>>> develop return { xs: tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs} } diff --git a/server/src/router/federated/server.ts b/server/src/router/federated/server.ts index 4b883cbf2..1dab08207 100644 --- a/server/src/router/federated/server.ts +++ b/server/src/router/federated/server.ts @@ -262,21 +262,6 @@ export class Federated extends Server { } this.createPromiseForWeights(task.id, aggregator, ws) -<<<<<<< HEAD - } else if (msg.type === MessageTypes.SendMetadata) { - const { round, key, value } = msg - - this.logsAppend(task.id, clientId, MessageTypes.SendMetadata, round) - - if (this.metadataMap.hasIn([task, round, clientId, key])) { - throw new Error('metadata already set') - } - this.metadataMap = this.metadataMap.setIn( - [task, round, clientId, key], - value - ) -======= ->>>>>>> develop } else if (msg.type === MessageTypes.ReceiveServerMetadata) { const { key, round } = msg diff --git a/web-client/src/components/training/Trainer.vue b/web-client/src/components/training/Trainer.vue index dd8154705..1d3933b17 100644 --- a/web-client/src/components/training/Trainer.vue +++ b/web-client/src/components/training/Trainer.vue @@ -48,11 +48,7 @@ import { defineComponent } from 'vue' import { mapStores } from 'pinia' -<<<<<<< HEAD -import { data, EmptyMemory, isTask, informant, TrainingInformant, Disco, Memory, client as clients } from '@epfml/discojs-core' -======= import { data, EmptyMemory, isTask, Task, informant, TrainingInformant, Disco, Memory, client as clients } from '@epfml/discojs-core' ->>>>>>> develop import { IndexedDB } from '@epfml/discojs' import { useMemoryStore } from '@/store/memory' @@ -110,11 +106,7 @@ export default defineComponent({ } ) }, -<<<<<<< HEAD - scheme (): typeof TrainingInformation['scheme'] { -======= scheme (): Task['trainingInformation']['scheme'] { ->>>>>>> develop if (this.distributedTraining && this.task.trainingInformation?.scheme !== undefined) { return this.task.trainingInformation?.scheme } @@ -127,11 +119,7 @@ export default defineComponent({ } }, watch: { -<<<<<<< HEAD - scheme (newScheme: typeof TrainingInformation['scheme']): void { -======= scheme (newScheme: Task['trainingInformation']['scheme']): void { ->>>>>>> develop const args = [this.task, 10] as const switch (newScheme) { case 'federated': From 8c3e24554bb4cc69b740841ad40397b2e1de1dae Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 14:35:53 +0100 Subject: [PATCH 26/37] Fix merge --- .../data/preprocessing/text_preprocessing.ts | 2 +- .../src/task/training_information.ts | 113 ------------------ 2 files changed, 1 insertion(+), 114 deletions(-) diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index fd7e87d08..b34447010 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -49,7 +49,7 @@ const leftPadding: PreprocessingFunction = { } /** - * Tokenize and pad input strings + * Tokenize and truncates input strings */ const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index 2982d40a3..47808bb76 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -69,119 +69,6 @@ function isStringArray(raw: unknown): raw is string[] { return arr.every((e) => typeof e === 'string') } -export function isTrainingInformation (raw: unknown): raw is TrainingInformation { - if (typeof raw !== 'object' || raw === null) { - return false - } - - const { - IMAGE_H, - IMAGE_W, - LABEL_LIST, - aggregator, - batchSize, - byzantineRobustAggregator, - clippingRadius, - dataType, - decentralizedSecure, - epochs, - inputColumns, - maxShareValue, - minimumReadyPeers, - modelID, - noiseScale, - outputColumns, - preprocessingFunctions, - roundDuration, - scheme, - tauPercentile, - validationSplit, - }: Partial> = raw - - if ( - typeof dataType !== 'string' || - typeof modelID !== 'string' || - typeof epochs !== 'number' || - typeof batchSize !== 'number' || - typeof roundDuration !== 'number' || - typeof validationSplit !== 'number' || - (aggregator !== undefined && typeof aggregator !== 'number') || - (clippingRadius !== undefined && typeof clippingRadius !== 'number') || - (decentralizedSecure !== undefined && typeof decentralizedSecure !== 'boolean') || - (byzantineRobustAggregator !== undefined && typeof byzantineRobustAggregator !== 'boolean') || - (maxShareValue !== undefined && typeof maxShareValue !== 'number') || - (minimumReadyPeers !== undefined && typeof minimumReadyPeers !== 'number') || - (noiseScale !== undefined && typeof noiseScale !== 'number') || - (tauPercentile !== undefined && typeof tauPercentile !== 'number') || - (IMAGE_H !== undefined && typeof IMAGE_H !== 'number') || - (IMAGE_W !== undefined && typeof IMAGE_W !== 'number') || - (LABEL_LIST !== undefined && !isStringArray(LABEL_LIST)) || - (inputColumns !== undefined && !isStringArray(inputColumns)) || - (outputColumns !== undefined && !isStringArray(outputColumns)) || - (preprocessingFunctions !== undefined && !Array.isArray(preprocessingFunctions)) - ) { - return false - } - - // interdepences on data type - if (dataType === 'image') { - if (typeof IMAGE_H !== 'number' || typeof IMAGE_W !== 'number') { - return false - } - } else if (dataType in ['text', 'tabular']) { - if (!(Array.isArray(inputColumns) && inputColumns.every((e) => typeof e === 'string'))) { - return false - } - if (!(Array.isArray(outputColumns) && outputColumns.every((e) => typeof e === 'string'))) { - return false - } - } - - switch (scheme) { - case 'decentralized': break - case 'federated': break - case 'local': break - default: return false - } - - const repack = { - IMAGE_W, - IMAGE_H, - LABEL_LIST, - aggregator, - batchSize, - byzantineRobustAggregator, - clippingRadius, - dataType, - decentralizedSecure, - epochs, - inputColumns, - maxShareValue, - minimumReadyPeers, - modelID, - noiseScale, - outputColumns, - preprocessingFunctions, - roundDuration, - scheme, - tauPercentile, - validationSplit, - } - const _correct: TrainingInformation = repack - // const _total: Record = repack - - return true -} - -function isStringArray(raw: unknown): raw is string[] { - if (!Array.isArray(raw)) { - return false - } - const arr: unknown[] = raw // isArray is unsafely guarding with any[] - - return arr.every((e) => typeof e === 'string') -} - export function isTrainingInformation (raw: unknown): raw is TrainingInformation { if (typeof raw !== 'object' || raw === null) { return false From decb341c081be01297e4eb83ce2a662c0862f61b Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 17:06:58 +0100 Subject: [PATCH 27/37] Fix linting errors --- .../preprocessing/tabular_preprocessing.ts | 2 +- .../data/preprocessing/text_preprocessing.ts | 15 ++++++--- .../src/default_tasks/wikitext.ts | 2 +- .../discojs-core/src/models/gpt/evaluate.ts | 33 +++++++++++-------- discojs/discojs-core/src/models/gpt/index.ts | 8 +++-- discojs/discojs-core/src/models/gpt/train.ts | 30 ++++++++++------- .../src/task/training_information.ts | 11 ++++++- discojs/discojs-node/src/data/text_loader.ts | 5 +-- 8 files changed, 70 insertions(+), 36 deletions(-) diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts index 11a287fdc..8adcbe6cc 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/tabular_preprocessing.ts @@ -21,7 +21,7 @@ const sanitize: PreprocessingFunction = { apply: async (entry: Promise) => { // if preprocessing a dataset without labels, then the entry is an array of numbers if (Array.isArray(entry)) { - return entry.map(i => i ?? 0) + return entry.map((i: number) => i ?? 0) // otherwise it is an object with feature and labels } else { const { xs, ys } = await entry as TabularEntry diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index b34447010..ee24d9873 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -32,7 +32,7 @@ const leftPadding: PreprocessingFunction = { tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) task.trainingInformation.tokenizer = tokenizer } - const maxLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length + const maxLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length as number // Should never happen because tokenization truncates inputs if (xs.size > maxLength) { xs = xs.slice([0], [maxLength]) @@ -48,13 +48,16 @@ const leftPadding: PreprocessingFunction = { } } +interface TokenizerOutput { + input_ids: number[] +} /** * Tokenize and truncates input strings */ const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, apply: async (x: Promise, task: Task): Promise => { - let xs = await x as string // tf.TextLineDataset yields strings + const xs = await x as string // tf.TextLineDataset yields strings let tokenizer = task.trainingInformation.tokenizer as PreTrainedTokenizer // The tokenizer is initialized the first time it is needed // We're doing so to not send complex objects between the server and clients @@ -63,15 +66,17 @@ const tokenize: PreprocessingFunction = { tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) task.trainingInformation.tokenizer = tokenizer } - const { input_ids: tokens } = tokenizer(xs, { + const maxLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length as number + + const {input_ids: tokens} = tokenizer(xs, { // Transformers.js currently only supports right padding while we need left for text generation // Right padding should be supported in the future, once it is, we can directly pad while tokenizing // https://github.com/xenova/transformers.js/blob/8804c36591d11d8456788d1bb4b16489121b3be2/src/tokenizers.js#L2517 padding: false, truncation: true, return_tensor: false, - max_length: task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length, - }) + max_length: maxLength, + }) as TokenizerOutput return { xs: tf.tensor(tokens, undefined, 'int32') // cast tokens from float to int for gpt-tfjs} } diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index eaf5c16aa..433bb39a6 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -21,7 +21,7 @@ export const wikitext: TaskProvider = { modelID: 'wikitext-103-raw-model', preprocessingFunctions: [data.TextPreprocessing.Tokenize, data.TextPreprocessing.LeftPadding], validationSplit: 0.2, // TODO: is this used somewhere? because train, eval and test are already split in dataset - epochs: 1, + epochs: 3, scheme: 'federated', noiseScale: undefined, decentralizedSecure: true, diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index e01015118..c7fee8872 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -1,5 +1,10 @@ import * as tf from '@tensorflow/tfjs' +interface DataPoint extends tf.TensorContainerObject { + xs: tf.Tensor2D, + ys: tf.Tensor3D, +} + export default async function evaluate ( model: tf.LayersModel, dataset: tf.data.Dataset<{ xs: tf.Tensor, ys: tf.Tensor }>, @@ -9,7 +14,13 @@ export default async function evaluate ( let totalLoss = 0 const acc: [number, number] = [0, 0] - await dataset.take(maxEvalBatches).map(({ xs, ys }) => { + let iteration = 1 + const iterator = await dataset.iterator() + let continueIterating = true + while (continueIterating) { + const next = await iterator.next() + + const { xs, ys } = next.value as DataPoint const logits = model.apply(xs) if (Array.isArray(logits)) { throw new Error('model output too many tensor') @@ -17,13 +28,9 @@ export default async function evaluate ( if (logits instanceof tf.SymbolicTensor) { throw new Error('model output symbolic tensor') } - xs.dispose() - - return { logits, ys } - }).mapAsync(async ({ logits, ys }) => { const lossTensor = tf.losses.softmaxCrossEntropy(ys, logits) - const loss = await lossTensor.array() - if (typeof loss !== 'number') { + const lossValue = await lossTensor.array() + if (typeof lossValue !== 'number') { throw new Error('got multiple loss') } @@ -35,17 +42,17 @@ export default async function evaluate ( throw new Error('got multiple accuracy sum') } - tf.dispose([ys, logits, accTensor, accSum, lossTensor]) - return { loss, accSummed, accSize } - }).forEachAsync(({ loss, accSummed, accSize }) => { datasetSize += 1 - totalLoss += loss + totalLoss += lossValue acc[0] += accSummed acc[1] += accSize - }) - const loss = totalLoss / datasetSize + tf.dispose([xs, ys, logits, accTensor, accSum, lossTensor, next.value]) + iteration++ + continueIterating = next.done !== true && iteration <= maxEvalBatches + } + const loss = totalLoss / datasetSize return { val_loss: loss, val_perplexity: Math.exp(loss), diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index f43576306..71d5d6dd1 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -26,6 +26,10 @@ interface Config { maxEvalBatches: number } +interface TokenizerOutput { + input_ids: number[] + } + export class GPT extends Model { private readonly model: GPTLMHeadModel @@ -74,7 +78,7 @@ export class GPT extends Model { epochs: 1, // force fitDataset to do only one epoch because it is wrapped in a for loop validationData, callbacks: { - onEpochEnd: (epoch, cur) => { + onEpochEnd: (_, cur) => { logs = cur if (logs !== undefined && cur !== undefined) { logs.loss = cur.val_loss @@ -101,7 +105,7 @@ export class GPT extends Model { async generate (input: string, tokenizerModel: string = 'Xenova/gpt2', newTokens: number = 10): Promise { const tokenizer = await AutoTokenizer.from_pretrained(tokenizerModel) - const { input_ids: tokens } = await tokenizer(input, { return_tensor: false}) + const { input_ids: tokens } = await tokenizer(input, { return_tensor: false}) as TokenizerOutput const generationConfig = { maxNewTokens: newTokens, diff --git a/discojs/discojs-core/src/models/gpt/train.ts b/discojs/discojs-core/src/models/gpt/train.ts index 389c8d226..22dc0f6dc 100644 --- a/discojs/discojs-core/src/models/gpt/train.ts +++ b/discojs/discojs-core/src/models/gpt/train.ts @@ -40,6 +40,11 @@ function getCustomAdam (model: tf.LayersModel, c: Required): tf.Optim }) } +interface DataPoint extends tf.TensorContainerObject { + xs: tf.Tensor2D, + ys: tf.Tensor3D, +} + export async function train ( model: tf.LayersModel, ds: tf.data.Dataset<{ xs: tf.Tensor2D, ys: tf.Tensor3D }>, @@ -55,18 +60,16 @@ export async function train ( for (let epoch = 1; epoch <= epochs; epoch++) { let iteration = 1 const iterator = await ds.iterator() - while (true) { + let continueTraining = true + while (continueTraining) { let preprocessingTime = performance.now() const next = await iterator.next() preprocessingTime = performance.now() - preprocessingTime - if (next.done === true || iteration > c.maxIter) { - tf.dispose([next.value]) - break - } + let weightUpdateTime = performance.now() await callbacks.onEpochBegin?.(epoch) - const { xs, ys } = next.value - + const { xs, ys } = next.value as DataPoint + const lossFn: () => tf.Scalar = () => { const logits = model.apply(xs) if (Array.isArray(logits)) { @@ -77,30 +80,35 @@ export async function train ( } return tf.losses.softmaxCrossEntropy(ys, logits) } + const lossTensor = tf.tidy(() => { - const { grads, value: loss } = opt.computeGradients(lossFn) + const { grads, value: lossTensor } = opt.computeGradients(lossFn) const gradsClipped = clipByGlobalNormObj(grads, 1) opt.applyGradients(gradsClipped) - return loss + return lossTensor }) const loss = await lossTensor.array() - tf.dispose([xs, ys, lossTensor]) + tf.dispose([xs, ys, lossTensor, next.value]) + weightUpdateTime = performance.now() - weightUpdateTime console.log( `Epoch: ${epoch}`, `\tStep: ${iteration} / ${c.maxIter}`, `\tLoss: ${loss.toFixed(3)}`, `\tMemory: ${(tf.memory().numBytes / 1024 / 1024).toFixed(2)} MB`, - `\Preprocessing time: ${preprocessingTime.toFixed(0)} ms`, + `\tNumber of tensors allocated: ${tf.memory().numTensors}`, + `\tPreprocessing time: ${preprocessingTime.toFixed(0)} ms`, `\tWeight update time: ${weightUpdateTime.toFixed(0)} ms` ) + if (evalDs !== undefined && config.evaluateEvery !== undefined && iteration % config.evaluateEvery == 0) { const logs = await evaluate(model, evalDs, c.maxEvalBatches) console.log(logs) } iteration++ + continueTraining = next.done !== true && iteration <= c.maxIter } let logs: tf.Logs | undefined if (evalDs !== undefined) { diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index 47808bb76..3a9cd0fae 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -54,7 +54,7 @@ export interface TrainingInformation { tokenizerName?: string // tokenizer (object). The actual tokenizer. It is initialized according to the tokenizerName the first time it is needed for the subsequent tokenizations // This field is not expected to be filled when initializing a field - tokenizer?: object + tokenizer?: object | null // maxSequenceLength: the maximum length of a input string used as input to a GPT model. It is used during preprocessing to // truncate strings to a maximum length. The default value is tokenizer.model_max_length maxSequenceLength?: number @@ -94,6 +94,9 @@ export function isTrainingInformation (raw: unknown): raw is TrainingInformation roundDuration, scheme, validationSplit, + tokenizerName, + tokenizer, + maxSequenceLength, }: Partial> = raw if ( @@ -103,6 +106,9 @@ export function isTrainingInformation (raw: unknown): raw is TrainingInformation typeof batchSize !== 'number' || typeof roundDuration !== 'number' || typeof validationSplit !== 'number' || + (tokenizerName !== undefined && typeof tokenizerName !== 'string') || + (maxSequenceLength !== undefined && typeof maxSequenceLength !== 'number') || + (tokenizer !== null && tokenizer !== undefined && typeof tokenizer !== 'object') || (aggregator !== undefined && typeof aggregator !== 'number') || (clippingRadius !== undefined && typeof clippingRadius !== 'number') || (decentralizedSecure !== undefined && typeof decentralizedSecure !== 'boolean') || @@ -160,6 +166,9 @@ export function isTrainingInformation (raw: unknown): raw is TrainingInformation roundDuration, scheme, validationSplit, + tokenizer, + tokenizerName, + maxSequenceLength } const _correct: TrainingInformation = repack const _total: Record = repack diff --git a/discojs/discojs-node/src/data/text_loader.ts b/discojs/discojs-node/src/data/text_loader.ts index affa192e4..80f615b62 100644 --- a/discojs/discojs-node/src/data/text_loader.ts +++ b/discojs/discojs-node/src/data/text_loader.ts @@ -3,12 +3,13 @@ import fs from 'node:fs' import { data } from '@epfml/discojs-core' export class TextLoader extends data.TextLoader { - async loadDatasetFrom (source: string): Promise { + loadDatasetFrom (source: string): Promise { // TODO: reads all the file at once, // inputting the file path to FileDataSource isn't supported anymore const inputFile = fs.readFileSync(source) const file = new tfData.FileDataSource(inputFile, { chunkSize: 1024 }) // TODO: reading files line by line is an issue for LLM tokenization - return new tfData.TextLineDataset(file).filter(s => s != ' ') // newline creates empty strings + const dataset = new tfData.TextLineDataset(file).filter(s => s != ' ') // newline creates empty strings + return Promise.resolve(dataset) } } From 45b7c985a0e4db78fe16bc9a40fcbcc253b22c07 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 17:25:49 +0100 Subject: [PATCH 28/37] Fixup package-lock.json --- .../src/default_tasks/wikitext.ts | 2 +- discojs/discojs-core/src/models/gpt/index.ts | 2 +- package-lock.json | 45 +++++++++---------- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 433bb39a6..eaf5c16aa 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -21,7 +21,7 @@ export const wikitext: TaskProvider = { modelID: 'wikitext-103-raw-model', preprocessingFunctions: [data.TextPreprocessing.Tokenize, data.TextPreprocessing.LeftPadding], validationSplit: 0.2, // TODO: is this used somewhere? because train, eval and test are already split in dataset - epochs: 3, + epochs: 1, scheme: 'federated', noiseScale: undefined, decentralizedSecure: true, diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 71d5d6dd1..2704d2d12 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -40,7 +40,7 @@ export class GPT extends Model { const config: Config = { modelType: 'gpt-nano', lr: 0.001, - maxIter: 500, + maxIter: 1, evaluateEvery:50, maxEvalBatches: 50, blockSize: 128, diff --git a/package-lock.json b/package-lock.json index b5c3b8888..a6926be4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8776,7 +8776,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "peer": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -10392,7 +10391,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "peer": true, "engines": { "node": ">=6" } @@ -10944,8 +10942,7 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "peer": true + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { "version": "9.1.0", @@ -11172,8 +11169,7 @@ "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "peer": true + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "node_modules/glob": { "version": "7.2.3", @@ -13389,7 +13385,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "peer": true, "engines": { "node": ">=10" }, @@ -13545,8 +13540,7 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "peer": true + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mocha": { "version": "9.2.2", @@ -14183,8 +14177,7 @@ "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "peer": true + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -14239,7 +14232,6 @@ "version": "3.56.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==", - "peer": true, "dependencies": { "semver": "^7.3.5" }, @@ -16142,7 +16134,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "peer": true, "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -16698,7 +16689,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "peer": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -16712,14 +16702,12 @@ "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "peer": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -17656,8 +17644,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/simple-get": { "version": "4.0.1", @@ -17677,7 +17664,6 @@ "url": "https://feross.org/support" } ], - "peer": true, "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -17767,6 +17753,19 @@ "node": ">= 6" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -18632,7 +18631,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "peer": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -18643,14 +18641,12 @@ "node_modules/tar-fs/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "peer": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "peer": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -18666,7 +18662,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", From ff90cb771d920aa269ae9a1566fba0dedb983cad Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 17:44:08 +0100 Subject: [PATCH 29/37] Fix lint error --- docs/examples/wikitext.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/wikitext.ts b/docs/examples/wikitext.ts index 768a1228b..9b935e5b3 100644 --- a/docs/examples/wikitext.ts +++ b/docs/examples/wikitext.ts @@ -23,7 +23,7 @@ async function main(): Promise { if (aggregator.model === undefined) { throw new Error('model was not set') } - let model = aggregator.model as models.GPT + const model = aggregator.model as models.GPT const sample = 'Hello world' const tokenizerName = task.trainingInformation.tokenizerName ?? 'Xenova/gpt2' console.log(await model.generate(sample, tokenizerName)) From 05ad23a8abd0ec4649e20976a8f533ab84b125a1 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 27 Mar 2024 18:02:22 +0100 Subject: [PATCH 30/37] Fix default wikitext max iter --- discojs/discojs-core/src/models/gpt/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 2704d2d12..7b1d53984 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -40,7 +40,7 @@ export class GPT extends Model { const config: Config = { modelType: 'gpt-nano', lr: 0.001, - maxIter: 1, + maxIter: 5, evaluateEvery:50, maxEvalBatches: 50, blockSize: 128, From 971e744cb0a9cbd1f4c7ffe007fe02e9aec38022 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Thu, 28 Mar 2024 10:55:17 +0100 Subject: [PATCH 31/37] Change wikitext default hp for server test --- discojs/discojs-core/src/default_tasks/wikitext.ts | 2 +- discojs/discojs-core/src/models/gpt/index.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index eaf5c16aa..63a220302 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -21,7 +21,7 @@ export const wikitext: TaskProvider = { modelID: 'wikitext-103-raw-model', preprocessingFunctions: [data.TextPreprocessing.Tokenize, data.TextPreprocessing.LeftPadding], validationSplit: 0.2, // TODO: is this used somewhere? because train, eval and test are already split in dataset - epochs: 1, + epochs: 5, scheme: 'federated', noiseScale: undefined, decentralizedSecure: true, diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index 7b1d53984..f289af0e1 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -40,9 +40,9 @@ export class GPT extends Model { const config: Config = { modelType: 'gpt-nano', lr: 0.001, - maxIter: 5, - evaluateEvery:50, - maxEvalBatches: 50, + maxIter: 2, + evaluateEvery:10, + maxEvalBatches: 10, blockSize: 128, vocabSize: 50258 } From 4a18a55babb037129b2cea1038fdb0171b0cc503 Mon Sep 17 00:00:00 2001 From: Julien Vignoud <33122365+JulienVig@users.noreply.github.com> Date: Thu, 28 Mar 2024 14:31:16 +0100 Subject: [PATCH 32/37] Update discojs/discojs-core/src/models/gpt/evaluate.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Valérian Rousset --- discojs/discojs-core/src/models/gpt/evaluate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index c7fee8872..5a5411a32 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -7,7 +7,7 @@ interface DataPoint extends tf.TensorContainerObject { export default async function evaluate ( model: tf.LayersModel, - dataset: tf.data.Dataset<{ xs: tf.Tensor, ys: tf.Tensor }>, + dataset: tf.data.Dataset, maxEvalBatches: number ): Promise> { let datasetSize = 0 From 00cff6686d1867f8b6df7a5d81d66b131ec396c5 Mon Sep 17 00:00:00 2001 From: Julien Vignoud <33122365+JulienVig@users.noreply.github.com> Date: Thu, 28 Mar 2024 14:37:42 +0100 Subject: [PATCH 33/37] Only specify transformers.js major version in package.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Valérian Rousset --- discojs/discojs-core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discojs/discojs-core/package.json b/discojs/discojs-core/package.json index c6e4d2cca..f25e43844 100644 --- a/discojs/discojs-core/package.json +++ b/discojs/discojs-core/package.json @@ -22,7 +22,7 @@ "dependencies": { "@tensorflow/tfjs": "4", "@types/msgpack-lite": "0.1", - "@xenova/transformers": "^2.16.1", + "@xenova/transformers": "2", "axios": "1", "gpt3-tokenizer": "1", "immutable": "4", From ec94c08ae223a623350e02389bd6b28fa9c962ab Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Thu, 28 Mar 2024 15:56:16 +0100 Subject: [PATCH 34/37] Address PR' comments --- .../data/preprocessing/text_preprocessing.ts | 20 ++---- .../src/default_tasks/wikitext.ts | 2 +- .../discojs-core/src/models/gpt/evaluate.ts | 64 +++++++++++++++---- discojs/discojs-core/src/models/gpt/index.ts | 5 +- discojs/discojs-core/src/models/index.ts | 1 + discojs/discojs-core/src/models/tokenizer.ts | 23 +++++++ .../src/task/training_information.ts | 14 ++-- discojs/discojs-node/src/data/text_loader.ts | 6 +- docs/examples/package.json | 1 + docs/examples/wikitext.ts | 43 ++++++++++--- 10 files changed, 124 insertions(+), 55 deletions(-) create mode 100644 discojs/discojs-core/src/models/tokenizer.ts diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index ee24d9873..245b99afc 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -3,7 +3,7 @@ import * as tf from '@tensorflow/tfjs' import type { Task } from '../../../index.js' import type { PreprocessingFunction } from './base.js' -import { AutoTokenizer, PreTrainedTokenizer } from '@xenova/transformers'; +import { models } from '../../../index.js' /** * Available text preprocessing types. @@ -26,12 +26,9 @@ const leftPadding: PreprocessingFunction = { type: TextPreprocessing.LeftPadding, apply: async (x: Promise, task: Task): Promise => { let { xs } = await x as TokenizedEntry - let tokenizer = task.trainingInformation.tokenizer as PreTrainedTokenizer - if (tokenizer === undefined) { - const tokenizerName = task.trainingInformation.tokenizerName ?? 'Xenova/gpt2' - tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) - task.trainingInformation.tokenizer = tokenizer - } + const tokenizer = await models.getTaskTokenizer(task) + + const maxLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length as number // Should never happen because tokenization truncates inputs if (xs.size > maxLength) { @@ -58,14 +55,7 @@ const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, apply: async (x: Promise, task: Task): Promise => { const xs = await x as string // tf.TextLineDataset yields strings - let tokenizer = task.trainingInformation.tokenizer as PreTrainedTokenizer - // The tokenizer is initialized the first time it is needed - // We're doing so to not send complex objects between the server and clients - if (tokenizer === undefined) { - const tokenizerName = task.trainingInformation.tokenizerName ?? 'Xenova/gpt2' - tokenizer = await AutoTokenizer.from_pretrained(tokenizerName) - task.trainingInformation.tokenizer = tokenizer - } + const tokenizer = await models.getTaskTokenizer(task) const maxLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length as number const {input_ids: tokens} = tokenizer(xs, { diff --git a/discojs/discojs-core/src/default_tasks/wikitext.ts b/discojs/discojs-core/src/default_tasks/wikitext.ts index 63a220302..7f80f2db5 100644 --- a/discojs/discojs-core/src/default_tasks/wikitext.ts +++ b/discojs/discojs-core/src/default_tasks/wikitext.ts @@ -29,7 +29,7 @@ export const wikitext: TaskProvider = { maxShareValue: 100, roundDuration: 10, batchSize: 16, - tokenizerName: 'Xenova/gpt2', + tokenizer: 'Xenova/gpt2', maxSequenceLength: 128 } } diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index 5a5411a32..f73efb36b 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -14,13 +14,7 @@ export default async function evaluate ( let totalLoss = 0 const acc: [number, number] = [0, 0] - let iteration = 1 - const iterator = await dataset.iterator() - let continueIterating = true - while (continueIterating) { - const next = await iterator.next() - - const { xs, ys } = next.value as DataPoint + await dataset.take(maxEvalBatches).map(({ xs, ys }) => { const logits = model.apply(xs) if (Array.isArray(logits)) { throw new Error('model output too many tensor') @@ -28,9 +22,13 @@ export default async function evaluate ( if (logits instanceof tf.SymbolicTensor) { throw new Error('model output symbolic tensor') } + xs.dispose() + + return { logits, ys } + }).mapAsync(async ({ logits, ys }) => { const lossTensor = tf.losses.softmaxCrossEntropy(ys, logits) - const lossValue = await lossTensor.array() - if (typeof lossValue !== 'number') { + const loss = await lossTensor.array() + if (typeof loss !== 'number') { throw new Error('got multiple loss') } @@ -42,15 +40,53 @@ export default async function evaluate ( throw new Error('got multiple accuracy sum') } + tf.dispose([ys, logits, accTensor, accSum, lossTensor]) + return { loss, accSummed, accSize } + }).forEachAsync(({ loss, accSummed, accSize }) => { datasetSize += 1 - totalLoss += lossValue + totalLoss += loss acc[0] += accSummed acc[1] += accSize + }) - tf.dispose([xs, ys, logits, accTensor, accSum, lossTensor, next.value]) - iteration++ - continueIterating = next.done !== true && iteration <= maxEvalBatches - } + + // let iteration = 1 + // const iterator = await dataset.iterator() + // let continueIterating = true + // while (continueIterating) { + // const next = await iterator.next() + + // const { xs, ys } = next.value as DataPoint + // const logits = model.apply(xs) + // if (Array.isArray(logits)) { + // throw new Error('model output too many tensor') + // } + // if (logits instanceof tf.SymbolicTensor) { + // throw new Error('model output symbolic tensor') + // } + // const lossTensor = tf.losses.softmaxCrossEntropy(ys, logits) + // const lossValue = await lossTensor.array() + // if (typeof lossValue !== 'number') { + // throw new Error('got multiple loss') + // } + + // const accTensor = tf.metrics.categoricalAccuracy(ys, logits) + // const accSize = accTensor.shape.reduce((l, r) => l * r, 1) + // const accSum = accTensor.sum() + // const accSummed = await accSum.array() + // if (typeof accSummed !== 'number') { + // throw new Error('got multiple accuracy sum') + // } + + // datasetSize += 1 + // totalLoss += lossValue + // acc[0] += accSummed + // acc[1] += accSize + + // tf.dispose([xs, ys, logits, accTensor, accSum, lossTensor, next.value]) + // iteration++ + // continueIterating = next.done !== true && iteration <= maxEvalBatches + // } const loss = totalLoss / datasetSize return { diff --git a/discojs/discojs-core/src/models/gpt/index.ts b/discojs/discojs-core/src/models/gpt/index.ts index f289af0e1..ccab3e540 100644 --- a/discojs/discojs-core/src/models/gpt/index.ts +++ b/discojs/discojs-core/src/models/gpt/index.ts @@ -7,7 +7,7 @@ import * as tf from '@tensorflow/tfjs' import { WeightsContainer } from '../../index.js' import type { Dataset } from '../../dataset/index.js' import { Sink } from '../../utils/event_emitter.js' -import { AutoTokenizer } from '@xenova/transformers'; +import { PreTrainedTokenizer } from '@xenova/transformers'; import type { EpochLogs, Prediction, Sample } from '../model.js' @@ -103,8 +103,7 @@ export class GPT extends Model { return Promise.resolve(ret) } - async generate (input: string, tokenizerModel: string = 'Xenova/gpt2', newTokens: number = 10): Promise { - const tokenizer = await AutoTokenizer.from_pretrained(tokenizerModel) + async generate (input: string, tokenizer: PreTrainedTokenizer, newTokens: number = 10): Promise { const { input_ids: tokens } = await tokenizer(input, { return_tensor: false}) as TokenizerOutput const generationConfig = { diff --git a/discojs/discojs-core/src/models/index.ts b/discojs/discojs-core/src/models/index.ts index d076c5f55..ce761d628 100644 --- a/discojs/discojs-core/src/models/index.ts +++ b/discojs/discojs-core/src/models/index.ts @@ -2,3 +2,4 @@ export { Model } from './model.js' export { GPT } from './gpt/index.js' export { TFJS } from './tfjs.js' +export { getTaskTokenizer } from './tokenizer.js' diff --git a/discojs/discojs-core/src/models/tokenizer.ts b/discojs/discojs-core/src/models/tokenizer.ts new file mode 100644 index 000000000..2fc3fbda4 --- /dev/null +++ b/discojs/discojs-core/src/models/tokenizer.ts @@ -0,0 +1,23 @@ +import type { Task } from '../index.js' +import { AutoTokenizer, PreTrainedTokenizer } from '@xenova/transformers'; + +/** + * A task's tokenizer is initially specified as the tokenizer name, e.g., 'Xenova/gpt2'. + * The first time the tokenizer is needed, this function initializes the actual tokenizer object + * and saves it the task' tokenizer field to be reused in subsequent calls. + * + * We are proceeding this way because the task object is sent from the server to the client. Rather than + * sending complex objects through the network, we simply send the tokenizer name to be initialized client-side the + * first time it is called. + * @param task the task object specifying which tokenizer to use + * @returns an initialized tokenizer object + */ +export async function getTaskTokenizer(task: Task): Promise { + let tokenizer = task.trainingInformation.tokenizer + if (tokenizer === undefined) throw Error('No tokenizer specified in the task training information') + if (typeof tokenizer == 'string') { + tokenizer = await AutoTokenizer.from_pretrained(tokenizer) + task.trainingInformation.tokenizer = tokenizer + } + return tokenizer +} \ No newline at end of file diff --git a/discojs/discojs-core/src/task/training_information.ts b/discojs/discojs-core/src/task/training_information.ts index 3a9cd0fae..64803d94b 100644 --- a/discojs/discojs-core/src/task/training_information.ts +++ b/discojs/discojs-core/src/task/training_information.ts @@ -1,5 +1,6 @@ import type { AggregatorChoice } from '../aggregator/get.js' import type { Preprocessing } from '../dataset/data/preprocessing/index.js' +import { PreTrainedTokenizer } from '@xenova/transformers'; export interface TrainingInformation { // modelID: unique ID for the model @@ -50,11 +51,9 @@ export interface TrainingInformation { // aggregator: aggregator to be used by the server for federated learning, or by the peers for decentralized learning // default is 'average', other options include for instance 'bandit' aggregator?: AggregatorChoice - // tokenizerName (string). For example: 'Xenova/gpt2'. The name should match a Transformers.js tokenizer available on HuggingFace's hub. - tokenizerName?: string - // tokenizer (object). The actual tokenizer. It is initialized according to the tokenizerName the first time it is needed for the subsequent tokenizations - // This field is not expected to be filled when initializing a field - tokenizer?: object | null + // tokenizer (string | PreTrainedTokenizer). This field should be initialized with the name of a Transformers.js pre-trained tokenizer, e.g., 'Xenova/gpt2'. + // When the tokenizer is first called, the actual object will be initialized and loaded into this field for the subsequent tokenizations. + tokenizer?: string | PreTrainedTokenizer // maxSequenceLength: the maximum length of a input string used as input to a GPT model. It is used during preprocessing to // truncate strings to a maximum length. The default value is tokenizer.model_max_length maxSequenceLength?: number @@ -94,7 +93,6 @@ export function isTrainingInformation (raw: unknown): raw is TrainingInformation roundDuration, scheme, validationSplit, - tokenizerName, tokenizer, maxSequenceLength, }: Partial> = raw @@ -106,9 +104,8 @@ export function isTrainingInformation (raw: unknown): raw is TrainingInformation typeof batchSize !== 'number' || typeof roundDuration !== 'number' || typeof validationSplit !== 'number' || - (tokenizerName !== undefined && typeof tokenizerName !== 'string') || + (tokenizer !== undefined && typeof tokenizer !== 'string' && !(tokenizer instanceof PreTrainedTokenizer)) || (maxSequenceLength !== undefined && typeof maxSequenceLength !== 'number') || - (tokenizer !== null && tokenizer !== undefined && typeof tokenizer !== 'object') || (aggregator !== undefined && typeof aggregator !== 'number') || (clippingRadius !== undefined && typeof clippingRadius !== 'number') || (decentralizedSecure !== undefined && typeof decentralizedSecure !== 'boolean') || @@ -167,7 +164,6 @@ export function isTrainingInformation (raw: unknown): raw is TrainingInformation scheme, validationSplit, tokenizer, - tokenizerName, maxSequenceLength } const _correct: TrainingInformation = repack diff --git a/discojs/discojs-node/src/data/text_loader.ts b/discojs/discojs-node/src/data/text_loader.ts index 80f615b62..b6d8efc44 100644 --- a/discojs/discojs-node/src/data/text_loader.ts +++ b/discojs/discojs-node/src/data/text_loader.ts @@ -1,12 +1,12 @@ import { data as tfData } from '@tensorflow/tfjs-node' -import fs from 'node:fs' +import fs from 'node:fs/promises' import { data } from '@epfml/discojs-core' export class TextLoader extends data.TextLoader { - loadDatasetFrom (source: string): Promise { + async loadDatasetFrom (source: string): Promise { // TODO: reads all the file at once, // inputting the file path to FileDataSource isn't supported anymore - const inputFile = fs.readFileSync(source) + const inputFile = await fs.readFile(source) const file = new tfData.FileDataSource(inputFile, { chunkSize: 1024 }) // TODO: reading files line by line is an issue for LLM tokenization const dataset = new tfData.TextLineDataset(file).filter(s => s != ' ') // newline creates empty strings diff --git a/docs/examples/package.json b/docs/examples/package.json index 8f303549a..1587287af 100644 --- a/docs/examples/package.json +++ b/docs/examples/package.json @@ -6,6 +6,7 @@ "scripts": { "train": "npm run build && node dist/training.js", "custom_task": "npm run build && node dist/custom_task.js", + "language_model": "npm run build && node dist/wikitext.js", "build": "tsc", "lint": "npx eslint .", "test": "npm run train" diff --git a/docs/examples/wikitext.ts b/docs/examples/wikitext.ts index 9b935e5b3..8773e677f 100644 --- a/docs/examples/wikitext.ts +++ b/docs/examples/wikitext.ts @@ -1,41 +1,64 @@ -import type { Task, models } from '@epfml/discojs-core' +import type { Task } from '@epfml/discojs-core' import { Disco, fetchTasks, data, client as clients, - aggregator as aggregators, informant, serialization + aggregator as aggregators, informant, serialization, models } from '@epfml/discojs-core' import { NodeTextLoader } from '@epfml/discojs-node' -import fs from 'node:fs/promises' +import fs from 'node:fs' +import fsPromises from 'node:fs/promises' async function main(): Promise { // Launch a server instance const url = new URL('http://localhost:8080') + + // Fetch the wikitext task from the server const tasks = await fetchTasks(url) const task = tasks.get('wikitext-103') if (task === undefined) { throw new Error('task not found') } + + // Load the wikitext dataset from the `datasets` folder const dataset = await loadWikitextData(task) + + // Initialize a Disco instance and start training a language model const aggregator = new aggregators.MeanAggregator() const client = new clients.federated.FederatedClient(url, task, aggregator) const trainingInformant = new informant.FederatedInformant(task, 10) const disco = new Disco(task, { scheme: 'federated', client, aggregator, informant: trainingInformant }) await disco.fit(dataset) + // Get the model and complete the prompt if (aggregator.model === undefined) { throw new Error('model was not set') } const model = aggregator.model as models.GPT - const sample = 'Hello world' - const tokenizerName = task.trainingInformation.tokenizerName ?? 'Xenova/gpt2' - console.log(await model.generate(sample, tokenizerName)) + + // Retrieve the tokenizer used during training + const tokenizer = await models.getTaskTokenizer(task) + + const prompt = 'Hello world' + console.log(await model.generate(prompt, tokenizer)) - //Save the trained model + // Save the trained model + const modelFolder = './models' + try { + if (!fs.existsSync(modelFolder)) { + fs.mkdirSync(modelFolder) + } + } catch (err) { + console.error(err); + } const encoded = await serialization.model.encode(model) - await fs.writeFile(`model.json`, encoded) + await fsPromises.writeFile(`${modelFolder}/model.json`, encoded) - // Load an existing model - // const content = await fs.readFile(`model.json`) + /** + * The commented code below shows how to load an existing model + */ + + // const content = await fsPromises.readFile(`${modelFolder}/model.json`) // model = await serialization.model.decode(content) as models.GPT // console.log(await model.generate(sample, tokenizerName, 10)) + await disco.close() } From 53fd0cbec70733a235dc48d510ebe4e1346f4402 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Thu, 28 Mar 2024 15:58:15 +0100 Subject: [PATCH 35/37] Use async array rather than arraySync --- discojs/discojs-core/src/models/gpt/evaluate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index f73efb36b..e858857d8 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -35,7 +35,7 @@ export default async function evaluate ( const accTensor = tf.metrics.categoricalAccuracy(ys, logits) const accSize = accTensor.shape.reduce((l, r) => l * r, 1) const accSum = accTensor.sum() - const accSummed = accSum.arraySync() + const accSummed = await accSum.array() if (typeof accSummed !== 'number') { throw new Error('got multiple accuracy sum') } From 8d86f546784072ac69e48ef49a15744018a37838 Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Thu, 28 Mar 2024 16:02:37 +0100 Subject: [PATCH 36/37] Improve getTaskTokenizer doc --- discojs/discojs-core/src/models/tokenizer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discojs/discojs-core/src/models/tokenizer.ts b/discojs/discojs-core/src/models/tokenizer.ts index 2fc3fbda4..29745a063 100644 --- a/discojs/discojs-core/src/models/tokenizer.ts +++ b/discojs/discojs-core/src/models/tokenizer.ts @@ -4,7 +4,7 @@ import { AutoTokenizer, PreTrainedTokenizer } from '@xenova/transformers'; /** * A task's tokenizer is initially specified as the tokenizer name, e.g., 'Xenova/gpt2'. * The first time the tokenizer is needed, this function initializes the actual tokenizer object - * and saves it the task' tokenizer field to be reused in subsequent calls. + * and saves it in the task' tokenizer field to be reused in subsequent calls. * * We are proceeding this way because the task object is sent from the server to the client. Rather than * sending complex objects through the network, we simply send the tokenizer name to be initialized client-side the From 1ba5f606beed2b7104238f81f7c9593ff709a36f Mon Sep 17 00:00:00 2001 From: Julien Vignoud Date: Wed, 3 Apr 2024 11:15:46 +0200 Subject: [PATCH 37/37] Add text preprocessing type checks --- .../data/preprocessing/text_preprocessing.ts | 6 +++ .../discojs-core/src/models/gpt/evaluate.ts | 39 ------------------- discojs/discojs-core/src/models/tokenizer.ts | 4 +- 3 files changed, 8 insertions(+), 41 deletions(-) diff --git a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts index 245b99afc..805c39447 100644 --- a/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts +++ b/discojs/discojs-core/src/dataset/data/preprocessing/text_preprocessing.ts @@ -26,6 +26,9 @@ const leftPadding: PreprocessingFunction = { type: TextPreprocessing.LeftPadding, apply: async (x: Promise, task: Task): Promise => { let { xs } = await x as TokenizedEntry + if (xs === undefined || !(xs instanceof tf.tensor) ||xs.rankType !== tf.Rank.R1) { + new Error("The leftPadding preprocessing expects a 1D tensor named 'xs' as input") + } const tokenizer = await models.getTaskTokenizer(task) @@ -54,6 +57,9 @@ interface TokenizerOutput { const tokenize: PreprocessingFunction = { type: TextPreprocessing.Tokenize, apply: async (x: Promise, task: Task): Promise => { + if (typeof x != 'string') { + new Error("The tokenize preprocessing expects a string as input") + } const xs = await x as string // tf.TextLineDataset yields strings const tokenizer = await models.getTaskTokenizer(task) const maxLength = task.trainingInformation.maxSequenceLength ?? tokenizer.model_max_length as number diff --git a/discojs/discojs-core/src/models/gpt/evaluate.ts b/discojs/discojs-core/src/models/gpt/evaluate.ts index e858857d8..1fedd420a 100644 --- a/discojs/discojs-core/src/models/gpt/evaluate.ts +++ b/discojs/discojs-core/src/models/gpt/evaluate.ts @@ -49,45 +49,6 @@ export default async function evaluate ( acc[1] += accSize }) - - // let iteration = 1 - // const iterator = await dataset.iterator() - // let continueIterating = true - // while (continueIterating) { - // const next = await iterator.next() - - // const { xs, ys } = next.value as DataPoint - // const logits = model.apply(xs) - // if (Array.isArray(logits)) { - // throw new Error('model output too many tensor') - // } - // if (logits instanceof tf.SymbolicTensor) { - // throw new Error('model output symbolic tensor') - // } - // const lossTensor = tf.losses.softmaxCrossEntropy(ys, logits) - // const lossValue = await lossTensor.array() - // if (typeof lossValue !== 'number') { - // throw new Error('got multiple loss') - // } - - // const accTensor = tf.metrics.categoricalAccuracy(ys, logits) - // const accSize = accTensor.shape.reduce((l, r) => l * r, 1) - // const accSum = accTensor.sum() - // const accSummed = await accSum.array() - // if (typeof accSummed !== 'number') { - // throw new Error('got multiple accuracy sum') - // } - - // datasetSize += 1 - // totalLoss += lossValue - // acc[0] += accSummed - // acc[1] += accSize - - // tf.dispose([xs, ys, logits, accTensor, accSum, lossTensor, next.value]) - // iteration++ - // continueIterating = next.done !== true && iteration <= maxEvalBatches - // } - const loss = totalLoss / datasetSize return { val_loss: loss, diff --git a/discojs/discojs-core/src/models/tokenizer.ts b/discojs/discojs-core/src/models/tokenizer.ts index 29745a063..4c371e0ff 100644 --- a/discojs/discojs-core/src/models/tokenizer.ts +++ b/discojs/discojs-core/src/models/tokenizer.ts @@ -6,8 +6,8 @@ import { AutoTokenizer, PreTrainedTokenizer } from '@xenova/transformers'; * The first time the tokenizer is needed, this function initializes the actual tokenizer object * and saves it in the task' tokenizer field to be reused in subsequent calls. * - * We are proceeding this way because the task object is sent from the server to the client. Rather than - * sending complex objects through the network, we simply send the tokenizer name to be initialized client-side the + * We are proceeding as such because the task object is sent from the server to the client. Rather than + * sending complex objects through the network, we simply send the tokenizer name, which is then initialized client-side the * first time it is called. * @param task the task object specifying which tokenizer to use * @returns an initialized tokenizer object