From 5c50df6a4638870a452d1ede1340636dde239aa8 Mon Sep 17 00:00:00 2001 From: Maciej Topor Date: Fri, 22 Sep 2023 14:47:24 +0200 Subject: [PATCH 1/2] Removing unused files and added comments to some part of the code --- src/CLI/setupCLISystems.ts | 16 - src/gpt/ensureIRunThisInRange.ts | 5 + src/gpt/extractParsedLines.ts | 6 + src/gpt/gptExecute.ts | 9 +- src/managers/LogProvider.ts | 5 - src/managers/SimpleOpenAICacheManager.ts | 3 +- src/minionTasks/applyModificationProcedure.ts | 47 +-- .../mutateCreateModificationProcedure.ts | 1 - .../mutators/mutateStageStarting.ts | 2 +- src/stepEvolve/calc/CalcEnv.ts | 54 --- src/stepEvolve/calc/Distribution.ts | 182 --------- src/stepEvolve/calc/EvenValueDistribution.ts | 55 --- src/stepEvolve/calc/Fixes.ts | 82 ---- src/stepEvolve/calc/Mutable.ts | 95 ----- src/stepEvolve/calc/calculation.ts | 207 ---------- src/stepEvolve/calc/expression.ts | 376 ------------------ src/stepEvolve/calc/filterCalculations.ts | 22 - src/stepEvolve/calc/filterExpressions.ts | 141 ------- src/stepEvolve/calc/fixess.ts | 365 ----------------- src/stepEvolve/calc/issueReporter.ts | 25 -- src/stepEvolve/calc/lazy.ts | 17 - src/utils/playSound.ts | 21 +- src/utils/string/stringUtils.ts | 82 ---- src/utils/utils.ts | 214 +--------- 24 files changed, 41 insertions(+), 1991 deletions(-) delete mode 100644 src/stepEvolve/calc/CalcEnv.ts delete mode 100644 src/stepEvolve/calc/Distribution.ts delete mode 100644 src/stepEvolve/calc/EvenValueDistribution.ts delete mode 100644 src/stepEvolve/calc/Fixes.ts delete mode 100644 src/stepEvolve/calc/Mutable.ts delete mode 100644 src/stepEvolve/calc/calculation.ts delete mode 100644 src/stepEvolve/calc/expression.ts delete mode 100644 src/stepEvolve/calc/filterCalculations.ts delete mode 100644 src/stepEvolve/calc/filterExpressions.ts delete mode 100644 src/stepEvolve/calc/fixess.ts delete mode 100644 src/stepEvolve/calc/issueReporter.ts delete mode 100644 src/stepEvolve/calc/lazy.ts diff --git a/src/CLI/setupCLISystems.ts b/src/CLI/setupCLISystems.ts index 5bc483d..9b2725c 100644 --- a/src/CLI/setupCLISystems.ts +++ b/src/CLI/setupCLISystems.ts @@ -37,22 +37,6 @@ export function initCLISystems() { setLogProvider(undefined); setOriginalContentProvider(undefined); - const reportChange = (uri: string) => { - // TODO - }; - - const reportChangeInTask = (id: string) => { - // TODO - }; - - setLogProvider({ - reportChangeInTask, - }); - - setOriginalContentProvider({ - reportChange, - }); - setEditorManager(new CLIEditorManager()); } diff --git a/src/gpt/ensureIRunThisInRange.ts b/src/gpt/ensureIRunThisInRange.ts index c1ed31d..ade7932 100644 --- a/src/gpt/ensureIRunThisInRange.ts +++ b/src/gpt/ensureIRunThisInRange.ts @@ -15,6 +15,11 @@ interface EnsureICanRunThisInRangeParams { * for the specified AI model. */ export function ensureIRunThisInRange({ prompt, minTokens, preferedTokens, mode }: EnsureICanRunThisInRangeParams): number { + /** + * @EXTRA_BUFFER_FOR_ENCODING_OVERHEAD provides a safety margin for token encoding overhead, + * ensuring you have enough tokens for the operation while accounting for potential + * additional tokens needed during encoding. + */ const EXTRA_BUFFER_FOR_ENCODING_OVERHEAD = 50; minTokens = Math.ceil(minTokens); diff --git a/src/gpt/extractParsedLines.ts b/src/gpt/extractParsedLines.ts index 3b93e92..9c6bc8d 100644 --- a/src/gpt/extractParsedLines.ts +++ b/src/gpt/extractParsedLines.ts @@ -1,5 +1,11 @@ import { ParsedLine } from './types'; +/** + * This function processes the chunkBuffer string line by line, checking for lines starting with "data: " or JSON error objects. If a line starts with "data: ", it removes the prefix, trims whitespace, attempts JSON parsing, and adds the result to an array. If parsing fails, it logs an error and throws an exception. For lines not starting with "data: ", it assumes they are JSON error objects and handles them accordingly. The function repeats this process until there are no more newline characters in chunkBuffer, returning the array of ParsedLine objects and the modified chunkBuffer. + * @param chunkBuffer The chunk buffer to extract parsed lines from. + * @returns A tuple containing the array of parsed lines and the modified chunk buffer. + * @throws An error if an error object is encountered in the chunk buffer. + */ export function extractParsedLines(chunkBuffer: string): [ParsedLine[], string] { const parsedLines: ParsedLine[] = []; diff --git a/src/gpt/gptExecute.ts b/src/gpt/gptExecute.ts index aff17f0..939b419 100644 --- a/src/gpt/gptExecute.ts +++ b/src/gpt/gptExecute.ts @@ -1,7 +1,6 @@ import fetch from 'node-fetch'; import { z } from 'zod'; import zodToJsonSchema from 'zod-to-json-schema'; -import { DEBUG_RESPONSES } from '../const'; import { getAnalyticsManager } from '../managers/AnalyticsManager'; import { getOpenAICacheManager } from '../managers/OpenAICacheManager'; import { isZodString } from '../utils/isZodString'; @@ -12,6 +11,7 @@ import { FAST_MODE_TOKENS, GPTExecuteRequestData, GPTExecuteRequestMessage, GPTE import { countTokens } from './countTokens'; let openAIApiKey: string | undefined; +const MAX_REQUEST_ATTEMPTS = 3; export function setOpenAIApiKey(apiKey: string) { openAIApiKey = apiKey; @@ -84,9 +84,6 @@ export async function gptExecute({ }), }; - if (DEBUG_RESPONSES) { - // console.log('REQUEST DATA:', requestData); - } const cachedResult = await getOpenAICacheManager().getCachedResult(requestData); function convertResult(result: string): z.infer { @@ -110,7 +107,7 @@ export async function gptExecute({ }; } - for (let attempt = 1; attempt <= 3; attempt++) { + for (let attempt = 1; attempt <= MAX_REQUEST_ATTEMPTS; attempt++) { try { const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', @@ -143,7 +140,7 @@ export async function gptExecute({ error: String(error), }); - if (attempt === 3) { + if (attempt === MAX_REQUEST_ATTEMPTS) { throw error; } } diff --git a/src/managers/LogProvider.ts b/src/managers/LogProvider.ts index c04c300..1ed8711 100644 --- a/src/managers/LogProvider.ts +++ b/src/managers/LogProvider.ts @@ -1,9 +1,4 @@ export interface LogProvider { - /* - get logURI() { - return `10minions-log:minionTaskId/${this.id}/${('[' + this.shortName + '].md').replace(/ /g, '%20')}`; - } - */ reportChangeInTask(taskId: string): void; } diff --git a/src/managers/SimpleOpenAICacheManager.ts b/src/managers/SimpleOpenAICacheManager.ts index 1b3fa2c..e551384 100644 --- a/src/managers/SimpleOpenAICacheManager.ts +++ b/src/managers/SimpleOpenAICacheManager.ts @@ -1,6 +1,7 @@ import * as admin from 'firebase-admin'; import { getAnalyticsManager } from './AnalyticsManager'; +// It is used to cache the results of the OpenAI API calls and it is imported by project that use this npm package. export class SimpleOpenAICacheManager { private firestore: admin.firestore.Firestore | undefined; @@ -35,7 +36,7 @@ export class SimpleOpenAICacheManager { data.push(doc.data().responseData as string); } }); - + // TODO: add explenation why this is done like that const randomIndex = Math.floor(Math.random() * data.length); return data[randomIndex]; } diff --git a/src/minionTasks/applyModificationProcedure.ts b/src/minionTasks/applyModificationProcedure.ts index e499157..38c9edd 100644 --- a/src/minionTasks/applyModificationProcedure.ts +++ b/src/minionTasks/applyModificationProcedure.ts @@ -7,7 +7,8 @@ type CommandSegment = { followedBy?: CommandSegment[]; execute?: (currentContent: string, languageId: string, params: { [key: string]: string }) => Promise; }; - +const REPLACE_REGEX = /^(?:(?!```).)*```[^\n]*\n(.*?)\n```(?:(?!```).)*$/s; +const REPLACE_VALUE = '$1'; const COMMAND_STRUCTURE: CommandSegment[] = [ { name: 'REPLACE', @@ -18,8 +19,8 @@ const COMMAND_STRUCTURE: CommandSegment[] = [ { name: 'END_REPLACE', execute: async (currentContent, languageId, params) => { - const findText = params.REPLACE.replace(/^(?:(?!```).)*```[^\n]*\n(.*?)\n```(?:(?!```).)*$/s, '$1'); - const withText = params.WITH.replace(/^(?:(?!```).)*```[^\n]*\n(.*?)\n```(?:(?!```).)*$/s, '$1'); + const findText = params.REPLACE.replace(REPLACE_REGEX, REPLACE_VALUE); + const withText = params.WITH.replace(REPLACE_REGEX, REPLACE_VALUE); const replacementArray = await fuzzyReplaceTextInner({ currentCode: currentContent, findText, @@ -43,7 +44,7 @@ const COMMAND_STRUCTURE: CommandSegment[] = [ { name: 'END_REPLACE_ALL', execute: async (currentContent, languageId, params) => { - return params.REPLACE_ALL.replace(/^(?:(?!```).)*```[^\n]*\n(.*?)\n```(?:(?!```).)*$/s, '$1'); + return params.REPLACE_ALL.replace(REPLACE_REGEX, REPLACE_VALUE); }, }, ], @@ -57,8 +58,8 @@ const COMMAND_STRUCTURE: CommandSegment[] = [ { name: 'END_INSERT', execute: async (currentContent, languageId, params) => { - const beforeText = params.BEFORE.replace(/^(?:(?!```).)*```[^\n]*\n(.*?)\n```(?:(?!```).)*$/s, '$1'); - const insertText = params.INSERT.replace(/^(?:(?!```).)*```[^\n]*\n(.*?)\n```(?:(?!```).)*$/s, '$1'); + const beforeText = params.BEFORE.replace(REPLACE_REGEX, REPLACE_VALUE); + const insertText = params.INSERT.replace(REPLACE_REGEX, REPLACE_VALUE); const replacementArray = await fuzzyReplaceTextInner({ currentCode: currentContent, findText: beforeText, @@ -87,40 +88,6 @@ const COMMAND_STRUCTURE: CommandSegment[] = [ }, ], }, - - { - name: 'RENAME', - params: ['from', 'to'], - followedBy: [ - { - name: 'END_RENAME', - execute: async (currentContent) => { - //function params: languageId, params - // const context = params.RENAME.trim(); - - return currentContent; - - /* - - TODO: - const document = editor.document; - const position = editor.selection.active; - - const oldFunctionName = "oldFunction"; - const newFunctionName = "newFunction"; - - vscode.commands.executeCommand( - "editor.action.rename", - document.uri, - position, - { - newName: newFunctionName, - } - );*/ - }, - }, - ], - }, ]; export async function applyModificationProcedure(originalCode: string, modificationProcedure: string, languageId: string) { diff --git a/src/minionTasks/mutators/mutateCreateModificationProcedure.ts b/src/minionTasks/mutators/mutateCreateModificationProcedure.ts index 6110229..b74d864 100644 --- a/src/minionTasks/mutators/mutateCreateModificationProcedure.ts +++ b/src/minionTasks/mutators/mutateCreateModificationProcedure.ts @@ -45,5 +45,4 @@ export async function mutateCreateModificationProcedure(task: MinionTask) { } mutateAppendToLog(task, ''); - mutateAppendToLog(task, ''); } diff --git a/src/minionTasks/mutators/mutateStageStarting.ts b/src/minionTasks/mutators/mutateStageStarting.ts index 9435f7f..24d492b 100644 --- a/src/minionTasks/mutators/mutateStageStarting.ts +++ b/src/minionTasks/mutators/mutateStageStarting.ts @@ -15,5 +15,5 @@ export async function mutateStageStarting(task: MinionTask) { mutateAppendToLog(task, 'Task: ' + task.userQuery + ''); mutateAppendToLog(task, ''); - mutateGenerateShortName(task); // Intentionally no await + mutateGenerateShortName(task); } diff --git a/src/stepEvolve/calc/CalcEnv.ts b/src/stepEvolve/calc/CalcEnv.ts deleted file mode 100644 index 1cc1fd0..0000000 --- a/src/stepEvolve/calc/CalcEnv.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { calculateWithoutCaching } from './calculation'; -import { type Expression } from './expression'; -import { calculateFilterWithoutCaching } from './filterCalculations'; -import { type FilterExpression } from './filterExpressions'; -import { type Mutable } from './Mutable'; - -export abstract class CalcEnv { - readonly obj: T; - - constructor(obj: T) { - this.obj = obj; - } - - abstract copy(obj?: T): CalcEnv; - - edit(makeChanges: (obj: T) => void): CalcEnv { - const newObj = this.obj.copy() as T; - makeChanges(newObj); - newObj.seal(); - const newEnv = this.copy(newObj); - return newEnv; - } - - calculate(expression: Expression): number { - return this.obj.hitCache(expression.id, () => calculateWithoutCaching(this, expression)); - } - - calculateFilter(e: FilterExpression): boolean { - return this.obj.hitCache('fexp:' + e.id, () => calculateFilterWithoutCaching(this, e)); - } -} - -export class NodeCalcEnv extends CalcEnv { - constructor(obj: T) { - super(obj); - } - - copy(obj?: T): CalcEnv { - return new NodeCalcEnv(obj != null ? obj : this.obj); - } -} - -export class RootCalcEnv extends CalcEnv { - public iteration = 0; - - constructor(obj: T, iteration = 0, history: string[] = []) { - super(obj); - this.iteration = iteration; - } - - copy(obj?: T): CalcEnv { - return new RootCalcEnv(obj != null ? obj : this.obj, this.iteration); - } -} diff --git a/src/stepEvolve/calc/Distribution.ts b/src/stepEvolve/calc/Distribution.ts deleted file mode 100644 index ce6462f..0000000 --- a/src/stepEvolve/calc/Distribution.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { sum, withDefault } from '../../utils/utils'; -import { uniqueWeightedRandomElements } from '../../utils/random/uniqueWeightedRandomElements'; -import { weightedRandomElements } from '../../utils/random/weightedRandomElements'; -import { weightedRandomElement } from '../../utils/random/weightedRandomElement'; -import { getRandomSubarray } from '../../utils/random/getRandomSubarray'; -import { getRandomElement } from '../../utils/random/getRandomElement'; - -export type DistributionValue = number | string; - -export interface Distribution { - at(value: DistributionValue): number; - get domain(): string[]; - - readonly counts: { count: number; weight: number }[]; - - randomElement(): string; - randomElements(count?: number): string[]; -} - -export class ValuesDistribution { - readonly mapping: { [key: DistributionValue]: number }; - readonly entries: { value: T; weight: number }[]; - readonly counts: { count: number; weight: number }[]; - readonly allowDuplicates: boolean; - - normalize() { - const total = sum(this.entries, (e) => e.weight); - return new ValuesDistribution({ - values: this.entries.map(({ value, weight }) => { - return { value, weight: weight / total }; - }), - domain: this.domain, - counts: this.counts, - allowDuplicates: this.allowDuplicates, - }); - } - - humanReadable() { - const r = []; - const total = sum(this.entries, (e) => e.weight); - const entries = this.entries.slice(); - entries.sort((e1, e2) => e2.weight - e1.weight); - for (const { value, weight } of entries) { - r.push(`${((weight / total) * 100).toFixed(1)}% ${value}`); - } - return r; - } - - at(value: DistributionValue) { - return this.mapping[value]; - } - - randomElement() { - return weightedRandomElement(this.entries, 'weight')!.value; - } - - randomElements(_count?: number) { - let count = _count; - if (count === undefined) { - count = weightedRandomElement(this.counts, 'weight')?.count; - if (count === undefined || count < 0 || !Number.isInteger(count)) throw new Error('Invalid number of elements: ' + count); - } - if (this.allowDuplicates) { - return weightedRandomElements(this.entries, 'weight', count).map((e) => e.value); - } else { - return uniqueWeightedRandomElements(this.entries, 'weight', count).map((e) => e.value); - } - } - - filter(predicate: (value: DistributionValue) => boolean) { - return new ValuesDistribution({ - values: this.entries.filter((e) => predicate(e.value)), - domain: this.domain, - counts: this.counts, - allowDuplicates: this.allowDuplicates, - }); - } - - get domain() { - return Object.keys(this.mapping); - } - - constructor({ - values, - domain, - counts = [{ count: 1, weight: 1 }], - allowDuplicates = true, - }: { - values: (DistributionValue | { value: DistributionValue; weight: number })[]; - domain?: DistributionValue[]; - counts?: { count: number; weight: number }[]; - allowDuplicates?: boolean; - }) { - this.mapping = {}; - - if (domain != null) { - domain.forEach((v) => (this.mapping[v] = 0)); - } - - values.forEach((v) => { - const value = (typeof v === 'number' || typeof v === 'string' ? v : v.value).toString(); - const weight = typeof v === 'number' || typeof v === 'string' ? 1 : v.weight; - - if (this.mapping[value] == null) { - if (domain != null) { - throw new Error(`Value ${value} not found in ${domain}`); - } - - this.mapping[value] = weight; - } else { - this.mapping[value] += weight; - } - }); - - this.entries = Object.entries(this.mapping).map(([k, v]) => { - return { value: k as T, weight: v }; - }); - this.counts = counts; - this.allowDuplicates = allowDuplicates; - } -} - -export class FunctionDistribution implements Distribution { - readonly counts: { count: number; weight: number }[] = [{ count: 1, weight: 1 }]; - - at(value: string): number { - return this.fun(value); - } - - randomElement(): string { - return getRandomElement(this.domain); - } - - randomElements(count = 1): string[] { - return getRandomSubarray(this.domain, count); - } - - constructor( - public fun: (value: DistributionValue) => number, - public domain: string[] = [], - ) {} -} - -export class UniformDistribution implements Distribution { - readonly counts: { count: number; weight: number }[] = [{ count: 1, weight: 1 }]; - - at(value: string): number { - return 1 / this.domain.length; - } - - randomElement(): string { - return getRandomElement(this.domain); - } - - randomElements(count = 1): string[] { - return getRandomSubarray(this.domain, count); - } - - constructor(public domain: string[] = []) {} -} - -export function residualError(value: string, distribution: Distribution, referenceDistribution: Distribution, deadZone = 0) { - const error = withDefault(referenceDistribution.at(value), 0) - withDefault(distribution.at(value), 0); - if (Math.abs(error) > deadZone) { - return error; - } else { - return 0; - } -} - -export function residualSquare(value: string, distribution: Distribution, referenceDistribution: Distribution, deadZone = 0) { - const re = residualError(value, distribution, referenceDistribution, deadZone); - return re * re; -} - -export function residualSumOfSquares(distribution: Distribution, distributionWithDomain: Distribution, deadZone = 0, _domain: string[] = []) { - let domain = _domain; - if (distributionWithDomain?.domain != null) { - domain = distributionWithDomain.domain; - } - return sum(domain, (k) => residualSquare(k, distribution, distributionWithDomain, deadZone)); -} diff --git a/src/stepEvolve/calc/EvenValueDistribution.ts b/src/stepEvolve/calc/EvenValueDistribution.ts deleted file mode 100644 index 934b7cd..0000000 --- a/src/stepEvolve/calc/EvenValueDistribution.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { sum } from '../../utils/utils'; - -export class EvenValueDistribution { - desiredDistribution: { [key: string]: number } = {}; - currentDistribution: { [key: string]: number } = {}; - orginalObjects: { [key: string]: T } = {}; - - constructor( - public totalDecks: number, - referenceDistribution: [T, number][], - ) { - this.desiredDistribution = {}; - this.currentDistribution = {}; - this.orginalObjects = {}; - - if (totalDecks <= 0) throw new Error(`totalDecks must be positive, got ${totalDecks}`); - if (referenceDistribution.length === 0) throw new Error(`referenceDistribution must not be empty`); - - const sumValues = sum(referenceDistribution, ([k, v]) => v); - - for (const [obj, value] of referenceDistribution) { - this.desiredDistribution[obj.id] = (totalDecks * value) / sumValues; - this.currentDistribution[obj.id] = 0; - this.orginalObjects[obj.id] = obj; - } - } - - reportItem(obj: T) { - this.currentDistribution[obj.id] += 1; - } - - getPending() { - //First fill in all the floor, and then fill ceil, just for this to be more even. - for (const mode of ['FLOOR', 'CEIL']) { - const pending = []; - - for (const [id, currentNum] of Object.entries(this.currentDistribution)) { - let desiredNum = this.desiredDistribution[id]; - if (mode === 'CEIL') desiredNum = Math.ceil(desiredNum); - if (desiredNum >= currentNum + 1) { - pending.push({ - item: this.orginalObjects[id], - weight: desiredNum - currentNum, - }); - } - } - - if (pending.length !== 0) { - return pending; - } - } - - throw new Error('Should never get here'); - } -} diff --git a/src/stepEvolve/calc/Fixes.ts b/src/stepEvolve/calc/Fixes.ts deleted file mode 100644 index 0076af3..0000000 --- a/src/stepEvolve/calc/Fixes.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { weightedRandomIndex } from '../../utils/random/weightedRandomIndex'; -import { type CalcEnv } from './CalcEnv'; -import { type Mutable } from './Mutable'; -import { issueReporter } from './issueReporter'; - -export const NULL_FIX = () => undefined; -export const UNIMPLEMENTED_FIX = () => { - throw new Error('Fix is not implemented'); -}; - -export function applyOneOfFixes( - obj: CalcEnv, - ..._fixes: { fix: (obj: CalcEnv) => CalcEnv; weight: number }[] | ((obj: CalcEnv) => CalcEnv)[] -): CalcEnv { - let fixes = _fixes; - if (fixes.length > 0 && typeof fixes[0] === 'function') { - fixes = (fixes as ((obj: CalcEnv) => CalcEnv)[]).map((f) => { - return { fix: f, weight: 1 }; - }); - } - - let currentFixes = fixes as { - fix: (obj: CalcEnv) => CalcEnv; - weight: number; - }[]; - while (currentFixes.length > 0) { - const fixIndex = weightedRandomIndex(currentFixes, 'weight'); - if (fixIndex == null) { - issueReporter.reportIssue('Fixes table empty'); - return obj; - } - const fix = currentFixes[fixIndex].fix; - const ret = fix(obj); - if (ret !== obj) return ret; - currentFixes = [...currentFixes.slice(0, fixIndex), ...currentFixes.slice(fixIndex + 1)]; - } - - return obj; -} - -export function sequenceOfFixes(obj: T, ...fixes: ((obj: T) => T | undefined)[]): T | undefined { - let anyFixApplied = false; - let currentObj = obj; - - for (const fix of fixes) { - console.assert(currentObj != null); - - const afterFix = fix(obj); - anyFixApplied = anyFixApplied || afterFix != null; - currentObj = afterFix != null ? afterFix : currentObj; - } - - return anyFixApplied ? currentObj : undefined; -} - -export function repeatFix({ - obj, - fix, - target, - repeatProbability = 0.6, -}: { - obj: CalcEnv; - target?: number; - fix: (obj: CalcEnv, target?: number) => CalcEnv; - repeatProbability: number; -}): CalcEnv { - let repetitions = 0; - - let currentObj = obj; - do { - const newObj = fix(currentObj, target); - if (newObj === currentObj) break; - currentObj = newObj; - repetitions++; - } while (Math.random() < repeatProbability); - - if (repetitions > 0) { - return currentObj; - } else { - return obj; - } -} diff --git a/src/stepEvolve/calc/Mutable.ts b/src/stepEvolve/calc/Mutable.ts deleted file mode 100644 index a699192..0000000 --- a/src/stepEvolve/calc/Mutable.ts +++ /dev/null @@ -1,95 +0,0 @@ -export const computed = 'computed'; - -function getOwnPropertyDescriptorThroughInheritance(prototype: unknown, name: string): PropertyDescriptor { - const descriptor = Object.getOwnPropertyDescriptor(prototype, name); - - if (descriptor) { - return descriptor; - } else { - return getOwnPropertyDescriptorThroughInheritance(Object.getPrototypeOf(prototype), name); - } -} - -/** - * Basis for mutation algorithms to work with - */ -export interface Mutable { - id: string; - - addToHistory(log: string): void; - copy(): Mutable; - assertEditing(): void; - assertSealed(): void; - seal(): void; - hitCache(key: string, calculate: () => R): R; -} - -export abstract class BaseMutable implements Mutable { - private __calc: { [key: string]: unknown } = {}; - private __varCache: { [key: string]: any } = {}; - - id: string; - - abstract addToHistory(log: string): void; - - abstract copy(): Mutable; - - hitCache(key: string, calculate: () => R): R { - let result = this.__varCache[key]; - - if (result == null) { - result = calculate(); - this.__varCache[key] = result; - } - - return result; - } - - private editing = false; - - assertEditing() { - if (!this.editing) { - throw new Error('Not in edit mode'); - } - } - - assertSealed() { - if (this.editing) { - throw new Error('Not sealed'); - } - } - - seal() { - this.editing = false; - - //TODO: Any of those should not basically be filled with anything at this stage ... would be good to verify that - this.__calc = {}; - this.__varCache = {}; - } - - constructor(id: string, annotations: { [key in keyof BaseMutable]?: any } = {}) { - this.editing = true; - - //this.__varCache = copyFrom == null ? this.__varCache : {...this.__varCache, ...copyFrom.__varCache}; - - for (const [name, info] of Object.entries(annotations)) { - const originalGet = getOwnPropertyDescriptorThroughInheritance(Object.getPrototypeOf(this), name).get; - - if (originalGet == null) { - throw new Error(`No get found in ${name}`); - } - - Object.defineProperty(this, name, { - get() { - if (this.__calc[name] == null) { - this.__calc[name] = originalGet.apply(this); - } - - return this.__calc[name]; - }, - }); - } - - this.id = id; - } -} diff --git a/src/stepEvolve/calc/calculation.ts b/src/stepEvolve/calc/calculation.ts deleted file mode 100644 index f762ee6..0000000 --- a/src/stepEvolve/calc/calculation.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { shouldNeverGetHere } from '../../utils/typescript/shouldNeverGetHere'; -import { withDefault } from '../../utils/utils'; -import { type CalcEnv } from './CalcEnv'; -import { - ClampComboExpression, - ClampExpression, - ConstExpression, - DefsExpression, - DivExpression, - ExpExpression, - GetExpression, - makeSureIsExp, - MinExpression, - MinusExpression, - MulExpression, - PlusExpression, - ToNumberExpression, - type Expression, -} from './expression'; -import { type Mutable } from './Mutable'; - -export function exponentialErrorEscalationFunction(x: number) { - return Math.pow(2, x) - 1; -} - -export function polynominalErrorEscalationFunction(exponent: number) { - return (x: number) => Math.pow(x, exponent); -} - -export function quadricErrorEscalationFunction() { - return (x: number) => x * x; -} - -export function linearErrorEscalationFunction(x: number) { - return x; -} - -export const DEFAULT_PENALITY = 10; -export const NAN_PENALITY = DEFAULT_PENALITY * 100; - -export function calculateClamp(env: CalcEnv, expression: ClampExpression): number { - const valueThis = expression.v; - const params = expression.params; - const target = params.target != null ? makeSureIsExp(params.target) : null; - const deadZone = params.deadZone != null ? params.deadZone : 0; - const min = makeSureIsExp(params.min != null ? params.min : target != null ? target.minus(deadZone) : undefined); - const max = makeSureIsExp(params.max != null ? params.max : target != null ? target.plus(deadZone) : undefined); - const penalty = params.penalty != null ? params.penalty : DEFAULT_PENALITY; - let minPenalty = withDefault(params.minPenalty, penalty); - let maxPenalty = withDefault(params.maxPenalty, penalty); - - const value = env.calculate(valueThis); - - const minValue = min != null ? env.calculate(min) : undefined; - const maxValue = max != null ? env.calculate(max) : undefined; - - minPenalty = - typeof minPenalty === 'number' - ? { - penalty: minPenalty, - scale: 1, - errorEscalationFunction: polynominalErrorEscalationFunction(1.2), - } - : minPenalty; - maxPenalty = - typeof maxPenalty === 'number' - ? { - penalty: maxPenalty, - scale: 1, - errorEscalationFunction: polynominalErrorEscalationFunction(1.2), - } - : maxPenalty; - - if (isNaN(value)) { - return -NAN_PENALITY; - } - - if (minValue != null && value < minValue) { - if (minPenalty == null) throw new Error('Minimum penalties not specified'); - - return minPenalty.errorEscalationFunction((minValue - value) / minPenalty.scale) * -minPenalty.penalty; - } - - if (maxValue != null && value > maxValue) { - if (maxPenalty == null) throw new Error('Maximum penalties not specified'); - - return maxPenalty.errorEscalationFunction((value - maxValue) / maxPenalty.scale) * -maxPenalty.penalty; - } - - return 0; -} - -/** - * @returns The number of cards that this combo is missing to be valid - */ -export function calculateClampCombo(env: CalcEnv, expression: ClampComboExpression): number { - const valueThis = expression.v; - const params = expression.params; - const mode = params.mode; - const mode2 = params.mode2; - const value2 = makeSureIsExp(params.value2); - - if (mode.type === 'EXACTLY') { - if (mode2.type === 'AT_LEAST') { - return env.calculate(value2) * mode.num >= env.calculate(valueThis) * mode2.num - ? 0 - : Math.abs(env.calculate(valueThis) * mode2.num - env.calculate(value2) * mode.num); - } else if (mode2.type === 'EXACTLY') { - return Math.abs(env.calculate(valueThis) * mode2.num - env.calculate(value2) * mode.num); - } else { - shouldNeverGetHere(mode2); - } - } else if (mode.type === 'AT_LEAST') { - if (mode2.type === 'AT_LEAST') { - return env.calculate(valueThis) >= mode.num !== env.calculate(value2) >= mode2.num - ? Math.min(Math.abs(env.calculate(valueThis) - mode.num) + 1, Math.abs(env.calculate(value2) - mode2.num) + 1) - : 0; //MAYBE: More continious fitness - } else if (mode2.type === 'EXACTLY') { - return calculateClampCombo( - env, - new ClampComboExpression({ - id: expression.id + 'Reversed', - v: value2, - params: { value2: valueThis, mode: mode2, mode2: mode }, - }), - ); - } else { - shouldNeverGetHere(mode2); - } - } else { - shouldNeverGetHere(mode); - } -} - -export function calculateWithoutCaching(env: CalcEnv, e: Expression): number { - switch (e.constructor) { - case ConstExpression: { - const constExpression = e as ConstExpression; - return constExpression.c; - } - case ExpExpression: { - const expExpression = e as ExpExpression; - return env.calculate(expExpression.base) ** env.calculate(expExpression.exponent); - } - case DivExpression: { - const divExpression = e as DivExpression; - const result = env.calculate(divExpression.a) / env.calculate(divExpression.b); - - if (result === Number.POSITIVE_INFINITY) return 100000000; - if (result === Number.NEGATIVE_INFINITY) return -100000000; - if (isNaN(result)) return 0; - - return result; - } - case GetExpression: { - const getExpression = e as GetExpression; - return getExpression.getter(env); - } - case PlusExpression: { - const plusExpression = e as PlusExpression; - return plusExpression.vars.reduce((acc, v) => acc + env.calculate(v), 0); - } - case MinusExpression: { - const minusExpression = e as MinusExpression; - return env.calculate(minusExpression.a) - env.calculate(minusExpression.b); - } - case MulExpression: { - const mulExpression = e as MulExpression; - return mulExpression.vars.reduce((acc, v) => acc * env.calculate(v), 1); - } - case MinExpression: { - const minExpression = e as MinExpression; - return Math.min(...minExpression.vars.map((v) => env.calculate(v))); - } - case ClampExpression: { - const clampExpression = e as ClampExpression; - return calculateClamp(env, clampExpression); - } - case ClampComboExpression: { - const clampComboExpression = e as ClampComboExpression; - return calculateClampCombo(env, clampComboExpression); - } - case DefsExpression: { - const defsExpression = e as DefsExpression; - return defsExpression.defs.reduce((acc, def) => acc + env.calculate(def.fitness), 0); - } - case ToNumberExpression: { - const toNumberExpression = e as ToNumberExpression; - return env.calculateFilter(toNumberExpression.f) ? 1 : 0; - } - default: { - if (calculationHandlers[e.constructor.name] != null) { - return calculationHandlers[e.constructor.name](e, env); - } - throw new Error('Unknown expression: ' + e.constructor.name); - } - } -} - -const calculationHandlers: { - [key: string]: (e: any, env: CalcEnv) => number; -} = {}; - -export function registerCalculationHandler>(cls: typeof Expression, handler: (e: E, env: CalcEnv) => number) { - if (calculationHandlers[cls.name] != null) throw new Error('Already registered handler for ' + cls.name); - calculationHandlers[cls.name] = handler; -} diff --git a/src/stepEvolve/calc/expression.ts b/src/stepEvolve/calc/expression.ts deleted file mode 100644 index b973a59..0000000 --- a/src/stepEvolve/calc/expression.ts +++ /dev/null @@ -1,376 +0,0 @@ -import { randomBytes } from 'crypto'; - -import { type Mutable } from './Mutable'; -import { type FilterExpression } from './filterExpressions'; -import { type CalcEnv } from './CalcEnv'; - -export type ExpressionInitializer = { id?: string }; -export abstract class Expression { - public id: string; - - constructor({ id }: ExpressionInitializer) { - this.id = id !== undefined ? id : `${this.constructor.name}-${randomBytes(6).toString('hex')}`; - } - - abstract copy(copyParams?: ExpressionInitializer): Expression; - - named(id: string) { - return this.copy({ id }); - } - - mul(...vars: (Expression | number)[]): MulExpression { - return new MulExpression({ - vars: [this as unknown as Expression, ...vars], - }); - } - - plus(...vars: (Expression | number)[]): PlusExpression { - return new PlusExpression({ - vars: [this as unknown as Expression, ...vars], - }); - } - - minus(b: Expression | number): MinusExpression { - return new MinusExpression({ a: this as Expression, b }); - } - - div(b: Expression | number): DivExpression { - return new DivExpression({ a: this as Expression, b }); - } - - exp(exponent: Expression | number): ExpExpression { - return new ExpExpression({ - base: this as unknown as Expression, - exponent, - }); - } - - clamp(params: ClampParams): ClampExpression { - return new ClampExpression({ v: this as Expression, params }); - } - - clampCombo(params: ClampComboParams): ClampComboExpression { - return new ClampComboExpression({ - v: this as unknown as Expression, - params, - }); - } - - per(num: number) { - return { - atLeast: (num2: number, exp: Expression) => - new ClampComboExpression({ - v: this, - params: { - mode: { type: 'EXACTLY', num }, - value2: exp, - mode2: { type: 'AT_LEAST', num: num2 }, - }, - }), - exactly: (num2: number, exp: Expression) => - new ClampComboExpression({ - v: this, - params: { - mode: { type: 'EXACTLY', num }, - value2: exp, - mode2: { type: 'EXACTLY', num: num2 }, - }, - }), - }; - } - - ifAtLeast(num: number) { - return { - atLeast: (num2: number, exp: Expression) => - new ClampComboExpression({ - v: this, - params: { - mode: { type: 'AT_LEAST', num }, - value2: exp, - mode2: { type: 'AT_LEAST', num: num2 }, - }, - }), - exactly: (num2: number, exp: Expression) => - new ClampComboExpression({ - v: this, - params: { - mode: { type: 'AT_LEAST', num }, - value2: exp, - mode2: { type: 'EXACTLY', num: num2 }, - }, - }), - }; - } -} - -export type ConstExpressionInitializer = ExpressionInitializer & { - c: number; -}; -export class ConstExpression extends Expression { - public c: number; - - constructor({ c, ...rest }: ConstExpressionInitializer) { - super({ id: c.toString(), ...rest }); - - this.c = c; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new ConstExpression({ ...rest, ...copyParams }); - } -} - -export type DivExpressionInitializer = ExpressionInitializer & { - a: Expression | number; - b: Expression | number; -}; -export class DivExpression extends Expression { - public a: Expression; - public b: Expression; - - constructor({ a, b, ...rest }: DivExpressionInitializer) { - const mappedA = makeSureIsExp(a); - const mappedB = makeSureIsExp(b); - super({ id: `${mappedA.id} / ${mappedB.id}`, ...rest }); - this.a = mappedA; - this.b = mappedB; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new DivExpression({ ...rest, ...copyParams }); - } -} - -export type ExpExpressionInitializer = ExpressionInitializer & { - base: Expression | number; - exponent: Expression | number; -}; -export class ExpExpression extends Expression { - public base: Expression; - public exponent: Expression; - - constructor({ base, exponent, ...rest }: ExpExpressionInitializer) { - const mappedBase = makeSureIsExp(base); - const mappedExp = makeSureIsExp(exponent); - super({ id: `${mappedBase.id} ** ${mappedExp.id}`, ...rest }); - this.base = mappedBase; - this.exponent = mappedExp; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new ExpExpression({ ...rest, ...copyParams }); - } -} - -export type GetExpressionInitializer = ExpressionInitializer & { - getter: (env: CalcEnv) => number; -}; -export class GetExpression extends Expression { - public getter: (env: CalcEnv) => number; - - constructor({ getter, ...rest }: GetExpressionInitializer) { - super({ ...rest }); - this.getter = getter; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new GetExpression({ ...rest, ...copyParams }); - } -} - -export type PlusExpressionInitializer = ExpressionInitializer & { - vars: (Expression | number)[]; -}; -export class PlusExpression extends Expression { - public vars: Expression[]; - - constructor({ vars, ...rest }: PlusExpressionInitializer) { - const mappedVars = vars.map((v) => makeSureIsExp(v)); - super({ id: `${mappedVars.map((v) => v.id).join(' + ')}`, ...rest }); - this.vars = mappedVars; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new PlusExpression({ ...rest, ...copyParams }); - } -} - -export type MinusExpressionInitializer = ExpressionInitializer & { - a: Expression | number; - b: Expression | number; -}; -export class MinusExpression extends Expression { - public a: Expression; - public b: Expression; - - constructor({ a, b, ...rest }: MinusExpressionInitializer) { - const mappedA = makeSureIsExp(a); - const mappedB = makeSureIsExp(b); - super({ id: `${mappedA.id} - ${mappedB.id}`, ...rest }); - this.a = mappedA; - this.b = mappedB; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new MinusExpression({ ...rest, ...copyParams }); - } -} - -export type MulExpressionInitializer = ExpressionInitializer & { - vars: (Expression | number)[]; -}; -export class MulExpression extends Expression { - public vars: Expression[]; - - constructor({ vars, ...rest }: MulExpressionInitializer) { - const mappedVars = vars.map((v) => makeSureIsExp(v)); - super({ id: `${mappedVars.map((v) => v.id).join(' * ')}`, ...rest }); - this.vars = mappedVars; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new MulExpression({ ...rest, ...copyParams }); - } -} - -export type MinExpressionInitializer = ExpressionInitializer & { - vars: (Expression | number)[]; -}; -export class MinExpression extends Expression { - public vars: Expression[]; - - constructor({ vars, ...rest }: MinExpressionInitializer) { - const mappedVars = vars.map((v) => makeSureIsExp(v)); - super({ id: `min(${mappedVars.map((v) => v.id).join(', ')})`, ...rest }); - this.vars = mappedVars; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new MinExpression({ ...rest, ...copyParams }); - } -} - -export type DefsExpressionInitializer = ExpressionInitializer & { - defs: { name: string; base: Expression; fitness: Expression }[]; -}; -export class DefsExpression extends Expression { - public defs: { name: string; base: Expression; fitness: Expression }[]; - - constructor({ defs, ...rest }: DefsExpressionInitializer) { - super({ ...rest }); - this.defs = defs; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new DefsExpression({ ...rest, ...copyParams }); - } -} - -export type ToNumberExpressionInitializer = ExpressionInitializer & { - f: FilterExpression; -}; -export class ToNumberExpression extends Expression { - public f: FilterExpression; - - constructor({ f, ...rest }: ToNumberExpressionInitializer) { - super({ id: `${f.id}`, ...rest }); - this.f = f; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new ToNumberExpression({ ...rest, ...copyParams }); - } -} - -export type ErrorEscalationFunction = (x: number) => number; - -export type ComplexPenality = { - penalty: number; - scale: number; - errorEscalationFunction: ErrorEscalationFunction; -}; - -export type ClampParams = { - target?: number | Expression; - deadZone?: number; - min?: number | Expression; - max?: number | Expression; - minPenalty?: number | ComplexPenality; - maxPenalty?: number | ComplexPenality; - penalty?: number | ComplexPenality; -}; -export type ClampExpressionInitializer = ExpressionInitializer & { - v: Expression; - params: ClampParams; -}; -export class ClampExpression extends Expression { - public v: Expression; - public params: ClampParams; - - constructor({ v, params, ...rest }: ClampExpressionInitializer) { - // ?INFO previous id, and why id was so complicated? - // super({ id: `clamp[${JSON.stringify(params)}](${v.id})`, ...rest }); - super({ id: v.id, ...rest }); - this.v = v; - this.params = params; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new ClampExpression({ ...rest, ...copyParams }); - } -} - -export type ComboMode = { type: 'EXACTLY'; num: number } | { type: 'AT_LEAST'; num: number }; - -export type ClampComboParams = { - mode: ComboMode; - value2: Expression | number; - mode2: ComboMode; -}; -export type ClampComboExpressionInitializer = ExpressionInitializer & { - v: Expression; - params: ClampComboParams; -}; -export class ClampComboExpression extends Expression { - public v: Expression; - public params: ClampComboParams; - - constructor({ v, params, ...rest }: ClampComboExpressionInitializer) { - // ?INFO previous id, and why id was so complicated? - // super({ id: `${v.id}[clampCombo]${JSON.stringify(params)})]`, ...rest }); - super({ id: v.id, ...rest }); - - this.v = v; - this.params = params; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new ClampComboExpression({ ...rest, ...copyParams }); - } -} - -export function makeSureIsExp(v: number | Expression): Expression; -export function makeSureIsExp(v: number | Expression | undefined | null): Expression | undefined; -export function makeSureIsExp(v: number | Expression | undefined | null) { - if (v === null || v === undefined) return undefined; - return typeof v === 'number' ? new ConstExpression({ c: v }) : v; -} - -/* -export function createCheck>(id: string, collection: CollectionName, check: (c:C) => boolean) { - return new ArrayExpression({collection, source: undefined}).filterExp( - new Filter({ id: `[check(${id})]`, check }) - ).named(id) -}*/ diff --git a/src/stepEvolve/calc/filterCalculations.ts b/src/stepEvolve/calc/filterCalculations.ts deleted file mode 100644 index 141610e..0000000 --- a/src/stepEvolve/calc/filterCalculations.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { type CalcEnv } from './CalcEnv'; -import { AndExpression, False, type FilterExpression, FuncFilterExpression, NotExpression, OrExpression, True } from './filterExpressions'; -import { type Mutable } from './Mutable'; - -export function calculateFilterWithoutCaching(env: CalcEnv, e: FilterExpression): boolean { - switch (e.constructor) { - case AndExpression: - return (e as AndExpression).exps.every((f) => env.calculateFilter(f)); - case OrExpression: - return (e as OrExpression).exps.some((f) => env.calculateFilter(f)); - case NotExpression: - return !env.calculateFilter((e as NotExpression).exp); - case FuncFilterExpression: - return (e as FuncFilterExpression).check(env); - case False: - return false; - case True: - return true; - default: - throw new Error(`Unknown filter type: ${e.constructor.name}`); - } -} diff --git a/src/stepEvolve/calc/filterExpressions.ts b/src/stepEvolve/calc/filterExpressions.ts deleted file mode 100644 index a4d8974..0000000 --- a/src/stepEvolve/calc/filterExpressions.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { type CalcEnv } from './CalcEnv'; -import { type Mutable } from './Mutable'; - -export type FilterExpressionInitializer = { id: string }; -export abstract class FilterExpression { - public id: string; - - constructor({ id }: FilterExpressionInitializer) { - this.id = id; - } - - abstract copy(copyParams?: FilterExpressionInitializer): FilterExpression; - - named(id: string) { - return this.copy({ id }); - } - - and(exp: FilterExpression): FilterExpression { - if (this instanceof True) { - return exp; - } - - if (exp instanceof True) { - return this; - } - - return new AndExpression({ exps: [this, exp] }); - } - - or(exp: FilterExpression): FilterExpression { - if (this instanceof True) { - return this; - } - - if (exp instanceof True) { - return exp; - } - - return new OrExpression({ exps: [this, exp] }); - } - - not(): FilterExpression { - if (this instanceof True) { - return new False(); - } - - if (this instanceof False) { - return new True(); - } - - return new NotExpression({ exp: this }); - } -} - -export type TrueInitializer = Partial; -export class True extends FilterExpression { - constructor({ ...rest }: TrueInitializer = {}) { - super({ id: 'true', ...rest }); - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new True({ ...rest, ...copyParams }); - } -} - -export type FalseInitializer = Partial; -export class False extends FilterExpression { - constructor({ ...rest }: FalseInitializer = {}) { - super({ id: 'false', ...rest }); - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new False({ ...rest, ...copyParams }); - } -} - -export type FuncFilterExpressionInitializer = Partial & { - check: (env: CalcEnv) => boolean; -}; -export class FuncFilterExpression extends FilterExpression { - readonly check: (env: CalcEnv) => boolean; - - constructor({ check, ...rest }: FuncFilterExpressionInitializer) { - super({ id: `check()`, ...rest }); - this.check = check; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new FuncFilterExpression({ ...rest, ...copyParams }); - } -} - -export type AndExpressionInitializer = Partial & { exps: FilterExpression[] }; -export class AndExpression extends FilterExpression { - public readonly exps: FilterExpression[]; - - constructor({ exps, ...rest }: AndExpressionInitializer) { - super({ id: exps.map((e) => e.id).join(' & '), ...rest }); - this.exps = exps; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new AndExpression({ ...rest, ...copyParams }); - } -} - -export type OrExpressionInitializer = Partial & { - exps: FilterExpression[]; -}; -export class OrExpression extends FilterExpression { - public readonly exps: FilterExpression[]; - - constructor({ exps, ...rest }: OrExpressionInitializer) { - super({ id: exps.map((e) => e.id).join(' | '), ...rest }); - this.exps = exps; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new OrExpression({ ...rest, ...copyParams }); - } -} - -export type NotExpressionInitializer = Partial & { exp: FilterExpression }; -export class NotExpression extends FilterExpression { - public readonly exp: FilterExpression; - - constructor({ exp, ...rest }: NotExpressionInitializer) { - super({ id: `!${exp.id}`, ...rest }); - this.exp = exp; - } - - copy(copyParams: Partial> = {}) { - const { id, ...rest } = this; - return new NotExpression({ ...rest, ...copyParams }); - } -} diff --git a/src/stepEvolve/calc/fixess.ts b/src/stepEvolve/calc/fixess.ts deleted file mode 100644 index dd789d2..0000000 --- a/src/stepEvolve/calc/fixess.ts +++ /dev/null @@ -1,365 +0,0 @@ -import { type Expression } from './expression'; -import { type Mutable } from './Mutable'; - -export type Target = number | undefined; - -/** - * @returns changed object, undefined if no changes were made - */ -export type Fix = (expression: Expression, target: Target, obj: T) => T | undefined; - -export function changeSoItMatchesFilter(o: T, check: (o: T) => boolean): T | undefined { - return o; -} - -export function exponentialErrorEscalationFunction(x: number) { - return Math.pow(2, x) - 1; -} - -export function polynominalErrorEscalationFunction(exponent: number) { - return (x: number) => Math.pow(x, exponent); -} - -export function quadricErrorEscalationFunction() { - return (x: number) => x * x; -} - -export function linearErrorEscalationFunction(x: number) { - return x; -} - -export const DEFAULT_PENALITY = 10; -export const NAN_PENALITY = DEFAULT_PENALITY * 100; - -/* -export abstract class Fixer { - abstract customFix(expression: Expression, target: Target, obj: unknown): unknown | undefined; - - fix(e: Expression, target: Target, obj: T): T | undefined { - - let fixed = this.customFix(e as Expression, target, obj); - if (fixed != null) return fixed as T; - - switch (e.constructor) { - case ConstExpression: - return undefined; - case GetExpression: - issueReporter.reportIssue(`No fix for a get expression ${e.id}`); - return undefined; - case ExpExpression: { - let expExpression = e as ExpExpression; - - return applyOneOfFixes(obj, - (obj: T) => this.fix( - expExpression.base, - target != null ? target ** 1/calculate(expExpression.base, obj) : undefined, - obj - ), - (obj: T) => this.fix( - expExpression.exponent, - target != null ? Math.log(target) / Math.log(calculate(expExpression.base, obj)) : undefined, - obj - ), - ) - } - case DivExpression: { - let divExpression = e as DivExpression; - return applyOneOfFixes(obj, - (obj: T) => this.fix( - divExpression.a, - target != null ? calculate(divExpression.b, obj) * target : undefined, - obj - ), - (obj: T) => this.fix( - divExpression.b, - target != null ? calculate(divExpression.a, obj) / target: undefined, - obj - ) - ); - } - - case PlusExpression: { - let plusExpression = e as PlusExpression; - let resolveVars = (obj: T, vars: Expression[]) => vars.map(v => calculate(v, obj)).reduce((a, value) => a + value, 1) - - return applyOneOfFixes(obj, - ...plusExpression.vars.map( - v => (obj: T) => this.fix( - e, - target != null ? target - resolveVars(obj, plusExpression.vars.filter(otherValue => otherValue != v)) : undefined, - obj - ) - ) - ); - } - case MulExpression: { - let mulExpression = e as MulExpression; - let resolveVars = (obj: T, vars: Expression[]) => vars.map(v => calculate(v, obj)).reduce((a, value) => a * value, 1) - - return applyOneOfFixes(obj, - ...mulExpression.vars.map( - v => (obj: T) => this.fix( - e, - target != null ? target / resolveVars(obj, mulExpression.vars.filter(otherValue => otherValue != v)) : undefined, - obj - ) - ) - ); - } - case MinExpression: - let minExpression = e as MinExpression; - //MAYBE: If target > current min, then maybe fix both? or just lower? We don't have an usecase yet like that - //TODO: This is sheeity - return this.fix( - getRandomElement(minExpression.vars.map(v => v)), - target, - obj - ) - case ClampExpression: { - let clampExpression = e as ClampExpression; - let params = clampExpression.params; - let targetParam = params.target != null ? makeSureIsExp(params.target) : null; - let deadZone = params.deadZone != null ? params.deadZone : 0; - let min = params.min != null ? makeSureIsExp(params.min) : (targetParam != null ? targetParam.plus(-deadZone) : undefined) - let max = params.max != null ? makeSureIsExp(params.max) : (targetParam != null ? targetParam.plus(deadZone) : undefined) - - let originalValue = calculate(clampExpression.v, obj); - - if (isNaN(originalValue)) throw new Error(`NaN value`) - if (target == null || target !== 0) throw new Error(`Non-Zero target value for clamp`) - - if (min != null && originalValue < calculate(min, obj)) { - return this.fix( - clampExpression.v, - calculate(min, obj), - obj - ) - } - - if (max != null && originalValue > calculate(max, obj)) { - return this.fix( - clampExpression.v, - calculate(max, obj), - obj - ) - } - - throw new Error(`Misconfigured clamp '${clampExpression.id}', fix running without a need.`) - } - - case ClampComboExpression: { - let clampComboExpression = e as ClampComboExpression; - let params = clampComboExpression.params; - let mode = params.mode; - let mode2 = params.mode2; - let value2 = makeSureIsExp(params.value2) - let penality = params.penality != null ? params.penality : 10; - let minVal1 = mode == ComboMode.AT_LEAST_TWO ? 2 : 1; - let minVal2 = mode2 == ComboMode.AT_LEAST_TWO ? 2 : 1; - - if (mode == ComboMode.PER_ONE) { - if (mode2 === ComboMode.AT_LEAST_ONE || mode2 === ComboMode.AT_LEAST_TWO) { - return applyOneOfFixes(obj, - (obj: T) => this.fix(clampComboExpression.v, calculate(clampComboExpression.v, obj) - 1, obj), - (obj: T) => this.fix(value2, calculate(clampComboExpression.v, obj) * minVal2, obj) - ) - } else if (mode2 === ComboMode.PER_ONE) { - return applyOneOfFixes(obj, - (obj: T) => this.fix(clampComboExpression.v, calculate(value2, obj), obj), - (obj: T) => this.fix(value2, calculate(clampComboExpression.v, obj), obj) - ) - } else { - shouldNeverGetHere(mode2); - } - } else if (mode == ComboMode.AT_LEAST_ONE || mode == ComboMode.AT_LEAST_TWO) { - if (mode2 === ComboMode.AT_LEAST_ONE || mode2 === ComboMode.AT_LEAST_TWO) { - - return applyOneOfFixes(obj, - (obj: T) => this.fix(clampComboExpression.v, minVal1, obj), - (obj: T) => this.fix(value2, minVal2, obj) - ) - } else if (mode2 === ComboMode.PER_ONE) { - let reversed = value2.clampCombo({ value2: clampComboExpression.v, mode: mode2, mode2: mode, penality: penality }); - return this.fix(reversed, target, obj); - } else { - shouldNeverGetHere(mode2); - } - } else { - shouldNeverGetHere(mode); - } - } - case CountExpression: { - let countExpression = e as CountExpression>; - let currentCount = calculate(countExpression, obj); - - return repeatFix({ - obj, - repeatProbability: 0.9, - fix: (obj: T, target?: number) => { - let fixes: ((obj: T) => (T | undefined))[] = []; - - if (target == null || target >= currentCount) { - fixes.push((obj: T) => pickChildAndFix>({ - parent: obj, - collection: countExpression.v.collection, - collectionFilter: ((o) => calculateFilter(countExpression.v.filterExp, o)), - fix: (o) => changeSoItMatchesFilter(o, (o) => !calculateFilter(countExpression.v.filterExp, o)) - })) - } - - if (target == null || target <= currentCount) { - fixes.push((obj: T) => pickChildAndFix>({ - parent: obj, - collection: countExpression.v.collection, - collectionFilter: (o) => !calculateFilter(countExpression.v.filterExp, o), - fix: (o) => changeSoItMatchesFilter(o, (o) => calculateFilter(countExpression.v.filterExp, o)), - })) - } - - return applyOneOfFixes(obj, ...fixes) - } - }) - } - case AvgExpression: { - let avgExpression = e as AvgExpression>; - let weightFunc = (o: Mutable) => target == null ? 1 : pow2(Math.abs(target - calculate(avgExpression.e, o))); - - return applyOneOfFixes(obj, - // Pick a random child and move it so it balances other deviations from average - (obj: T) => pickChildAndFix({ - parent: obj, - collection: avgExpression.v.collection, - collectionWeights: weightFunc, - collectionFilter: (o) => calculateFilter(avgExpression.v.filterExp, obj), - fix: (o) => { - return this.fix( - avgExpression.e, - target == null ? undefined : target + (target - calculate(avgExpression.e, o)), - o, - ) - } - }), - // Pick a random child and move it towards target - (obj: T) => pickChildAndFix({ - parent: obj, - collection: avgExpression.v.collection, - collectionFilter: (obj) => calculateFilter(avgExpression.v.filterExp, obj), - collectionWeights: weightFunc, - fix: (o) => { - return this.fix( - avgExpression.e, - target, - o, - ) - } - }), - // Pick a random child and try to change it so it's no longer in filter - (obj: T) => { - if (avgExpression.v.filterExp instanceof True) return undefined; - - return pickChildAndFix({ - parent: obj, - collection: avgExpression.v.collection, - collectionFilter: (obj) => calculateFilter(avgExpression.v.filterExp, obj), - collectionWeights: (o: Mutable) => 1, - fix: (o) => { - //filter: negateFilter(thisVarArray.selectedItemsFilter!), - return this.fix( - avgExpression.e, - undefined, - o, - ) - } - }) - }, - // Pick a child outside of filter and change it to be in the filter and move it towards average - (obj: T) => pickChildAndFix({ - parent: obj, - collection: avgExpression.v.collection, - collectionFilter: (obj) => !calculateFilter(avgExpression.v.filterExp, obj), - collectionWeights: weightFunc, - fix: (o) => { - return this.fix( - avgExpression.e, //filter thisVarArray.selectedItemsFilter, - target, - o, - ) - } - }), - ) - } - case SumExpression: { - let sumExpression = e as SumExpression>; - - let diff = (target: number, current: number) => { - if (target == null) throw new Error ("targetValue must be set") - if (current == null) throw new Error ("currentValue must be set") - - return (target - current); - } - - return applyOneOfFixes(obj, - // change it so target is met - (obj: T) => { - if (target == null) return undefined; - - return pickChildAndFix>({ - parent: obj, - collection: sumExpression.v.collection, - collectionFilter: (obj) => calculateFilter(sumExpression.v.filterExp, obj), - fix: (o) => { - return this.fix( - sumExpression.e, - calculate(sumExpression.e, o) + diff(target, calculate(sumExpression, obj)), - o, - ) - }, - }) - }, - - // remove from array - (obj: T) => pickChildAndFix>({ - parent: obj, - collection: sumExpression.v.collection, - collectionFilter: (obj) => calculateFilter(sumExpression.v.filterExp, obj), - fix: (o) => changeSoItMatchesFilter(o, (o) => !calculateFilter(sumExpression.v.filterExp, obj)), - }), - - // add to array - (obj: T) => { - if (target == null) return undefined; - - return pickChildAndFix>({ - parent: obj, - collection: sumExpression.v.collection, - collectionFilter: (obj) => !calculateFilter(sumExpression.v.filterExp, obj), - fix: (o) => changeSoItMatchesFilter(o, (o) => calculateFilter(sumExpression.v.filterExp, obj)),//target: diff(fc), - }) - }, - ) - } - case DefsExpression: { - let defsExpression = e as DefsExpression; - - return applyOneOfFixesWithWeight(obj, ...defsExpression.defs.map(({base, fitness}) => { - return { - weight: -calculate(fitness, obj), - fix: (obj: T) => { - let newObj = this.fix(fitness, 0, obj) - if (newObj == null) { - issueReporter.reportIssue(`Unable to fix with ${fitness.id}`) - //newObj = fitness.fix(fc) - return; - } - newObj.addToHistory(`Mutated with ${fitness.id}`) - return newObj - } - } - })) - } - default: - throw new Error("Unknown expression type: " + e.constructor.name); - } - } -} -*/ diff --git a/src/stepEvolve/calc/issueReporter.ts b/src/stepEvolve/calc/issueReporter.ts deleted file mode 100644 index a07f295..0000000 --- a/src/stepEvolve/calc/issueReporter.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { writeFileSync } from 'fs'; -import path from 'path'; - -class IssueReporter { - private issueCounts: { [key: string]: number } = {}; - - reportIssue(issue: string) { - if (!this.issueCounts[issue]) { - this.issueCounts[issue] = 1; - } else { - this.issueCounts[issue]++; - } - } - - dumpIssueStatistics(workingDir: string) { - const sortedKeys: string[] = Object.keys(this.issueCounts).sort((a, b) => this.issueCounts[b] - this.issueCounts[a]); - const sortedObj: { [key: string]: number } = {}; - for (const key of sortedKeys) { - sortedObj[key] = this.issueCounts[key]; - } - writeFileSync(path.join(workingDir, 'issues.json'), JSON.stringify(sortedObj, null, 2)); - } -} - -export const issueReporter = new IssueReporter(); diff --git a/src/stepEvolve/calc/lazy.ts b/src/stepEvolve/calc/lazy.ts deleted file mode 100644 index f107c5f..0000000 --- a/src/stepEvolve/calc/lazy.ts +++ /dev/null @@ -1,17 +0,0 @@ -export interface Lazy { - (): T; - isLazy: boolean; -} - -export const lazy = (getter: () => T): Lazy => { - let evaluated = false; - let _res: T; - const res = >function (): T { - if (evaluated) return _res; - _res = getter(); - evaluated = true; - return _res; - }; - res.isLazy = true; - return res; -}; diff --git a/src/utils/playSound.ts b/src/utils/playSound.ts index 9fc6253..171ce53 100644 --- a/src/utils/playSound.ts +++ b/src/utils/playSound.ts @@ -40,29 +40,36 @@ async function playSound(path: string, volume = 0.5) { */ const volumeAdjustedByOS = process.platform === 'darwin' ? Math.min(2, volume * 2) : volume; + if (!process.platform) { + throw Error('OS not detected'); + } + let playCommand; + const filePath = path; + const escapedFilePath = filePath.replace(/"/g, '\\"'); + switch (process.platform) { case 'aix': - playCommand = aixPlayCommand(path, volume); + playCommand = aixPlayCommand(escapedFilePath, volume); break; case 'darwin': - playCommand = darwinPlayCommand(path, volumeAdjustedByOS); + playCommand = darwinPlayCommand(escapedFilePath, volumeAdjustedByOS); break; case 'freebsd': - playCommand = freebsdPlayCommand(path, volume); + playCommand = freebsdPlayCommand(escapedFilePath, volume); break; case 'linux': - playCommand = linuxPlayCommand(path, volume); + playCommand = linuxPlayCommand(escapedFilePath, volume); break; case 'openbsd': - playCommand = openbsdPlayCommand(path, volume); + playCommand = openbsdPlayCommand(escapedFilePath, volume); break; case 'sunos': - playCommand = sunosPlayCommand(path, volume); + playCommand = sunosPlayCommand(escapedFilePath, volume); break; case 'win32': default: - playCommand = win32PlayCommand(path, volumeAdjustedByOS); + playCommand = win32PlayCommand(escapedFilePath, volumeAdjustedByOS); break; } diff --git a/src/utils/string/stringUtils.ts b/src/utils/string/stringUtils.ts index b1fff8b..97ea5a7 100644 --- a/src/utils/string/stringUtils.ts +++ b/src/utils/string/stringUtils.ts @@ -38,10 +38,6 @@ export function commonStringEndArray(indents: string[]) { return commonIndent; } -export function removeEmptyLines(slice: string[]) { - return slice.filter((line) => line.trim().length > 0); -} - export function removeIndent(slice: string[], indent?: string) { if (indent === undefined) { const indents = slice.map((line) => line.match(/(^\s*)/)?.[1] || ''); @@ -65,24 +61,6 @@ export function applyIndent(slice: string[], indent: string[] | string) { }); } -export function jaccardSimilarityIndex(a: string, b: string): number { - // Step 1: Convert each input string into a set of characters - const setA = new Set(a); - const setB = new Set(b); - - // Step 2: Calculate the intersection of the two sets - const intersection = new Set([...setA].filter((x) => setB.has(x))); - - // Step 3: Calculate the union of the two sets - const union = new Set([...setA, ...setB]); - - // Step 4: Calculate the Jaccard similarity index by dividing the intersection size by the union size - const similarityIndex = intersection.size / union.size; - - // Step 5: Return the Jaccard similarity index as the result - return similarityIndex; -} - /** * minimum number of single-character edits to change one to another */ @@ -124,35 +102,6 @@ export function levenshteinDistanceSimilarity(a: string, b: string): number { return 1 - levenshteinDistance(a, b) / len; } -export function sorensenDiceCoefficient(first: string, second: string) { - first = first.replace(/\s+/g, ''); - second = second.replace(/\s+/g, ''); - - if (first === second) return 1; // identical or empty - if (first.length < 2 || second.length < 2) return 0; // if either is a 0-letter or 1-letter string - - const firstBigrams = new Map(); - for (let i = 0; i < first.length - 1; i++) { - const bigram = first.substring(i, i + 2); - const count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) + 1 : 1; - - firstBigrams.set(bigram, count); - } - - let intersectionSize = 0; - for (let i = 0; i < second.length - 1; i++) { - const bigram = second.substring(i, i + 2); - const count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) : 0; - - if (count > 0) { - firstBigrams.set(bigram, count - 1); - intersectionSize++; - } - } - - return (2.0 * intersectionSize) / (first.length + second.length - 2); -} - export function equalsStringSimilarity(a: string, b: string): number { let matchingChars = 0; @@ -173,37 +122,6 @@ export function equalsStringSimilarity(a: string, b: string): number { return matchingChars / max; } -export function trimEmptyLinesAtTheBeginingAndEnd(textLines: string[]): string[] { - let start = 0; - let end = textLines.length - 1; - - while (start < end && textLines[start].trim().length === 0) { - start++; - } - - while (end > start && textLines[end].trim().length === 0) { - end--; - } - - return textLines.slice(start, end + 1); -} - -export function longestCommonSubsequenceLength(s1: string, s2: string): number { - const dp = Array.from({ length: s1.length + 1 }, () => new Array(s2.length + 1).fill(0)); - - for (let i = 1; i <= s1.length; i++) { - for (let j = 1; j <= s2.length; j++) { - if (s1[i - 1] === s2[j - 1]) { - dp[i][j] = dp[i - 1][j - 1] + 1; - } else { - dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); - } - } - } - - return dp[s1.length][s2.length]; -} - export function normalizeWhiteSpace(s: string): string { return s.trim().replace(/\s+/g, ' '); } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index eca429a..a56562c 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,212 +1,4 @@ -export function replaceText(string: string, text: string, replacement: any) { - return string.substr(0, string.indexOf(text)) + replacement.toString() + string.substr(string.indexOf(text) + text.length); -} +export const sum = (array: T[], query?: (obj: T) => number): number => + query ? array.reduce((a, b) => a + query(b), 0) : (array as number[]).reduce((a, b) => a + b, 0); -export function arraysEqual(a: T[], b: T[]) { - if (a === b) return true; - if (a == null || b == null) return false; - if (a.length !== b.length) return false; - - const sortedA = a.slice().sort(); - const sortedB = b.slice().sort(); - - for (let i = 0; i < sortedA.length; ++i) { - if (sortedA[i] !== sortedB[i]) return false; - } - - return true; -} - -export function onlyUnique(value: T, index: number, self: T[]) { - return self.indexOf(value) === index; -} - -export function findDuplicates(arr: string[]): string[]; -export function findDuplicates(arr: T[], key: (t: T) => string): T[]; -export function findDuplicates(arr: T[], key: (t: T) => string = (t: T) => String(t)): T[] { - const sortedArr = arr.slice().sort((a, b) => key(a).localeCompare(key(b))); - const results: T[] = []; - for (let i = 0; i < sortedArr.length - 1; i++) { - if (key(sortedArr[i + 1]) === key(sortedArr[i])) { - results.push(sortedArr[i]); - } - } - return results; -} - -export function count(array: T[], query: T | ((obj: T) => boolean)): number { - if (query instanceof Function) { - let count = 0; - for (let i = 0; i < array.length; i++) if (query(array[i])) count++; - return count; - } else { - let count = 0; - for (let i = 0; i < array.length; i++) if (array[i] === query) count++; - return count; - } -} - -export function min(array: number[]): number; -export function min(array: T[], query: (obj: T) => number): number; -export function min(array: any[], query?: (obj: T) => number): number { - if (query == null) { - return (array as number[]).reduce((a, b) => (a < b ? a : b), 0); - } else { - return array.reduce((a, b) => { - const bCalculated = query(b); - return a < bCalculated ? a : bCalculated; - }, 0); - } -} - -export function max(array: number[]): number; -export function max(array: T[], query: (obj: T) => number): number; -export function max(array: any[], query?: (obj: T) => number): number { - if (query == null) { - return (array as number[]).reduce((a, b) => (a > b ? a : b), 0); - } else { - return array.reduce((a, b) => { - const bCalculated = query(b); - return a > bCalculated ? a : bCalculated; - }, 0); - } -} - -export function sum(array: number[]): number; -export function sum(array: T[], query: (obj: T) => number): number; -export function sum(array: any[], query?: (obj: T) => number): number { - if (query == null) { - return (array as number[]).reduce((a, b) => a + b, 0); - } else { - return array.reduce((a, b) => a + query(b), 0); - } -} - -export function average(array: number[]): number; -export function average(array: T[], query: (obj: T) => number): number; -export function average(array: any[], query?: (obj: T) => number): number { - if (array.length === 0) { - return 0; - } - - if (query == null) { - return sum(array) / array.length; - } else { - return sum(array, query) / array.length; - } -} - -export function median(array: T[], query: (obj: T) => number): number { - const values = array.map((v) => query(v)); - - if (values.length === 0) throw new Error('No inputs'); - - values.sort(function (a, b) { - return a - b; - }); - - const half = Math.floor(values.length / 2); - - if (values.length % 2) return values[half]; - - return (values[half - 1] + values[half]) / 2.0; -} - -export function removeFirst(array: T[], match: (obj: T, i: number) => boolean) { - for (let i = 0; i < array.length; i++) { - if (match(array[i], i)) return array.splice(i, 1)[0]; - } -} - -export function matchesId(obj: T) { - return (otherObj: T) => otherObj.id === obj.id; -} - -export function containsId(array: T[], obj: T | string) { - if (typeof obj === 'string') { - return array.some((otherObj: T) => otherObj.id === obj); - } else { - return array.some(matchesId(obj)); - } -} - -export function removeItemByIndex(arr: T[], index: number): T[] { - /* - Removes an item from the array at the specified index. - Returns a new array without the removed item. - */ - if (index < 0 || index >= arr.length) { - throw new Error('Index out of range.'); - } - const newArray: T[] = [...arr.slice(0, index), ...arr.slice(index + 1)]; - return newArray; -} - -export function ordinalSuffixOf(i: number) { - const j = i % 10; - const k = i % 100; - if (j === 1 && k !== 11) { - return i + 'st'; - } - if (j === 2 && k !== 12) { - return i + 'nd'; - } - if (j === 3 && k !== 13) { - return i + 'rd'; - } - return i + 'th'; -} - -export function sequence(total: number) { - const seq: number[] = []; - - for (let i = 0; i < total; i++) { - seq.push(i); - } - - return seq; -} - -export function withDefault(value: T | null | undefined, defaultValue: T) { - return value == null ? defaultValue : value; -} - -export function notEmpty(value: T | null | undefined) { - if (value == null) throw new Error(`Empty value ${value}`); - return value; -} - -export function pow2(x: number) { - return x * x; -} - -export function safeWhileTrue(code: () => T | undefined | null, maxNumIterations = 1000000): T { - let i = 0; - while (true) { - if (i > maxNumIterations) throw new Error('Infinite loop detected'); - const r = code(); - if (r != null) return r; - i++; - } -} - -export function haveOverlap(arr1: T[], arr2: T[]) { - return arr1.some((element) => arr2.includes(element)); -} - -export function flatten(arr: T[][]): T[] { - return ([] as T[]).concat(...arr); -} - -export function spliceSlice(str: string, _index: number, count: number, add?: string) { - let index = _index; - // We cannot pass negative indexes directly to the 2nd slicing operation. - if (index < 0) { - index = str.length + index; - if (index < 0) { - index = 0; - } - } - - return str.slice(0, index) + (add || '') + str.slice(index + count); -} +export const withDefault = (value: T | null | undefined, defaultValue: T) => (value === null ? defaultValue : value); From 8de3b965595836c0b5f3da761cb3d4a5539fe8a7 Mon Sep 17 00:00:00 2001 From: Maciej Topor Date: Mon, 25 Sep 2023 18:52:54 +0200 Subject: [PATCH 2/2] Fixing review issues #2 --- .eslintrc.js | 1 + .../runLLMCustomTaskWithStepEvolve.ts | 9 +- package.json | 3 +- score/initTestMinionTask.ts | 8 +- score/runScore.ts | 21 +- scripts/version.sh | 5 +- src/CLI/setupCLISystems.ts | 17 +- src/gpt/createFullPromptFromSections.ts | 34 +- src/gpt/gptExecute.ts | 14 + src/gpt/processOpenAIResponseStream.ts | 12 +- src/managers/AnalyticsManager.ts | 1 - src/minionTasks/advancedCodeChangeStrategy.ts | 8 +- src/utils/code/fuzzyReplaceText.ts | 74 +- .../createProcedure/replaceProcedure.test.ts | 12 +- .../replaceProcedure/replaceProcedure.test.ts | 14 +- tsconfig.json | 4 +- yarn.lock | 877 +++++++++--------- 17 files changed, 601 insertions(+), 513 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e5e002d..0493a6a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,6 +21,7 @@ module.exports = { semi: 'off', '@typescript-eslint/no-empty-function': 'off', 'prettier/prettier': 'warn', + 'no-return-await': 'warn', }, ignorePatterns: ['out', 'dist', '**/*.d.ts'], }; diff --git a/examples/runLLMCustomTaskWithStepEvolve/runLLMCustomTaskWithStepEvolve.ts b/examples/runLLMCustomTaskWithStepEvolve/runLLMCustomTaskWithStepEvolve.ts index 075b175..6cf9773 100644 --- a/examples/runLLMCustomTaskWithStepEvolve/runLLMCustomTaskWithStepEvolve.ts +++ b/examples/runLLMCustomTaskWithStepEvolve/runLLMCustomTaskWithStepEvolve.ts @@ -1,4 +1,5 @@ -import { mkdirSync, readFileSync, writeFileSync } from 'fs'; +import { mkdirSync, readFileSync } from 'fs'; +import { writeFile } from 'node:fs/promises'; import path from 'path'; import { initCLISystems } from '../../src/CLI/setupCLISystems'; import { SolutionWithMeta } from '../../src/stepEvolve/FitnessFunction'; @@ -159,9 +160,7 @@ const EXAMPLE_KNOWLEDGE: Knowledge[] = [ }), ); } - const initialSolutions = await Promise.all(initialSolutionsPromises); - const finalSolution = await stepEvolve({ initialSolutions, threshold: THRESHOLD, @@ -175,8 +174,8 @@ const EXAMPLE_KNOWLEDGE: Knowledge[] = [ task, 'Initial solution is: ' + solutionWithMeta.solution + ' ' + solutionWithMeta.totalFitness + ' (' + solutionWithMeta.createdWith + ')' + '.', ); + writeFile(path.join(__dirname, 'logs', `${iteration}.json`), JSON.stringify({ iteration, solutionsWithMeta }, null, 2), 'utf8'); } - writeFileSync(path.join(__dirname, 'logs', `${iteration}.json`), JSON.stringify({ iteration, solutionsWithMeta }, null, 2)); }, onProgressMade: async ( oldSolutionsWithMeta: SolutionWithMeta[], @@ -185,7 +184,7 @@ const EXAMPLE_KNOWLEDGE: Knowledge[] = [ newSolutions: SolutionWithMeta[], iteration: number, ) => { - writeFileSync(path.join(__dirname, 'logs', `${iteration}.json`), JSON.stringify({ iteration, accepted, rejected, newSolutions }, null, 2)); + writeFile(path.join(__dirname, 'logs', `${iteration}.json`), JSON.stringify({ iteration, accepted, rejected, newSolutions }, null, 2), 'utf8'); //mutateAppendToLog(task, `Solutions ${oldSolutionsWithMeta.map((s) => s.solution).join(', ')}`); for (const solutionWithMeta of accepted) { diff --git a/package.json b/package.json index 679e2b5..ce4cb5f 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,13 @@ "dependencies": { "async-lock": "^1.4.0", "dotenv": "^16.3.1", - "firebase": "^9.22.2", + "firebase": "^9.9.2", "firebase-admin": "^11.9.0", "gpt-tokenizer": "^2.1.1", "jsonschema": "^1.4.1", "node-fetch": "^3.3.1", "openai": "^3.2.1", + "protobufjs": "^6.11.4", "zod": "^3.21.4", "zod-to-json-schema": "^3.21.4" }, diff --git a/score/initTestMinionTask.ts b/score/initTestMinionTask.ts index fbe2a8f..24a8a07 100644 --- a/score/initTestMinionTask.ts +++ b/score/initTestMinionTask.ts @@ -1,8 +1,8 @@ import path from 'path'; -import fs from 'fs'; +import { existsSync } from 'fs'; +import { readFile } from 'node:fs/promises'; import { MinionTask } from '../src/minionTasks/MinionTask'; import { getEditorManager } from '../src/managers/EditorManager'; -import { WorkspaceFilesKnowledge } from '../src/minionTasks/generateDescriptionForWorkspaceFiles'; export interface Selection { start: { line: number; character: number }; @@ -14,8 +14,8 @@ export const initMinionTask = async (userQuery: string, filePath: string, select let readSelectedText = ''; if (fileName) { const checkPath = path.join(__dirname, 'score', `${fileName}/selectedText.txt`); // Path to the selectedText file - const selectedTextExists = fs.existsSync(checkPath); // Check if selectedText file exists - readSelectedText = selectedTextExists ? fs.readFileSync(checkPath, 'utf8') : ''; // Read the selectedText file if it exists, else "". + const selectedTextExists = existsSync(checkPath); // Check if selectedText file exists + readSelectedText = selectedTextExists ? await readFile(checkPath, 'utf-8') : ''; // Read the selectedText file if it exists, else "". } let start = { line: 0, character: 0 }; diff --git a/score/runScore.ts b/score/runScore.ts index 9623523..c04c4a7 100644 --- a/score/runScore.ts +++ b/score/runScore.ts @@ -1,7 +1,8 @@ import { mapLimit } from 'async'; import chalk from 'chalk'; import { OptionValues, program } from 'commander'; -import fs from 'fs'; +import { existsSync, unlinkSync } from 'fs'; +import { readFile, writeFile } from 'node:fs/promises'; import * as glob from 'glob'; import { Validator } from 'jsonschema'; // Imported the jsonschema library import path from 'path'; @@ -37,7 +38,7 @@ async function runTest({ iterations?: number; testQueueName?: string; }): Promise { - const tests: TestDefinition[] = JSON.parse(fs.readFileSync(path.join(__dirname, 'score', `${fileName}/tests.json`), 'utf8')); + const tests: TestDefinition[] = JSON.parse(await readFile(path.join(__dirname, 'score', `${fileName}/tests.json`), 'utf8')); // Create a validator instance const validator = new Validator(); @@ -52,12 +53,12 @@ async function runTest({ } } const testPath = path.join(__dirname, 'score', fileName); - const userQuery = fs.readFileSync(path.join(testPath, `userQuery.txt`), 'utf8'); + const userQuery = await readFile(path.join(testPath, `userQuery.txt`), 'utf8'); const knowledegePath = path.resolve(__dirname, testPath, 'knowledge.json'); let knowledge: WorkspaceFilesKnowledge[] = []; - if (fs.existsSync(knowledegePath)) { - knowledge = JSON.parse(fs.readFileSync(knowledegePath, 'utf8')); + if (existsSync(knowledegePath)) { + knowledge = JSON.parse(await readFile(knowledegePath, 'utf8')); } const statistics = { @@ -69,14 +70,14 @@ async function runTest({ console.log(`Running test for '${fileName} (${iterations} iterations)'`); const directoryPath = path.resolve(__dirname, `score/${fileName}/temp.txt`); const testInfoPath = path.resolve(__dirname, `score/${fileName}/testInfo.json`); - const originalFileContent = fs.readFileSync(path.join(__dirname, 'score', `${fileName}/original.txt`), 'utf8'); - const testInfo = JSON.parse(fs.readFileSync(path.join(__dirname, 'score', `${fileName}/testInfo.json`), 'utf8')); + const originalFileContent = await readFile(path.join(__dirname, 'score', `${fileName}/original.txt`), 'utf8'); + const testInfo = JSON.parse(await readFile(path.join(__dirname, 'score', `${fileName}/testInfo.json`), 'utf8')); for (let i = 0; i < iterations; i++) { setupCLISystemsForTest(); logToFile(`Iteration ${i + 1} of ${iterations}`); console.log('ITERATION: ', i, ` of ${fileName}`); - fs.writeFileSync(directoryPath, originalFileContent); + writeFile(directoryPath, originalFileContent, 'utf8'); const minionTaskFilePath = path.join(__dirname, 'score', `${fileName}/temp.txt`); const { execution } = await initMinionTask(userQuery, minionTaskFilePath, undefined, fileName); execution.relevantKnowledge = knowledge; @@ -97,7 +98,7 @@ async function runTest({ statistics.passed++; } - fs.unlinkSync(directoryPath); + unlinkSync(directoryPath); } const score = ((100 * statistics.passed) / statistics.total).toFixed(); @@ -111,7 +112,7 @@ async function runTest({ iterations, }, ]; - fs.writeFileSync(testInfoPath, JSON.stringify(testInfo)); + writeFile(testInfoPath, JSON.stringify(testInfo), 'utf8'); console.log(`'${chalk.green(fileName)}' score: ${score}%`); logToFile(`'${fileName}' score: ${score}%`); diff --git a/scripts/version.sh b/scripts/version.sh index 997e519..88d32b7 100755 --- a/scripts/version.sh +++ b/scripts/version.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash +# Get the new version without 'v' NEW_VERSION="${1//v}" -CURRENT_VERSION="$(jq -r '.version' package.json)" +jq ".version = \"$NEW_VERSION\"" package.json > package.json.tmp -sed -i "s/$CURRENT_VERSION/$NEW_VERSION/g" package.json +mv package.json.tmp package.json \ No newline at end of file diff --git a/src/CLI/setupCLISystems.ts b/src/CLI/setupCLISystems.ts index 9b2725c..d376146 100644 --- a/src/CLI/setupCLISystems.ts +++ b/src/CLI/setupCLISystems.ts @@ -34,8 +34,21 @@ export function initCLISystems() { setAnalyticsManager(analyticsManager); - setLogProvider(undefined); - setOriginalContentProvider(undefined); + const reportChange = (uri: string) => { + // TODO: add functionality to report change in logs + }; + + const reportChangeInTask = (id: string) => { + // TODO: add functionality to report change in task + }; + + setLogProvider({ + reportChangeInTask, + }); + + setOriginalContentProvider({ + reportChange, + }); setEditorManager(new CLIEditorManager()); } diff --git a/src/gpt/createFullPromptFromSections.ts b/src/gpt/createFullPromptFromSections.ts index 7ff684f..aba65cb 100644 --- a/src/gpt/createFullPromptFromSections.ts +++ b/src/gpt/createFullPromptFromSections.ts @@ -9,24 +9,26 @@ export function createFullPromptFromSections({ sections: { [key: string]: string }; sectionMarker?: string; }) { - //replace all section markers in intro, sections and outro - intro = intro.replace(new RegExp(sectionMarker, 'g'), ''); - outro = outro?.replace(new RegExp(sectionMarker, 'g'), ''); - sections = Object.fromEntries(Object.entries(sections).map(([name, section]) => [name, section.replace(new RegExp(sectionMarker, 'g'), '')])); + // Remove section markers from intro and outro + const cleanedIntro = intro.replaceAll(sectionMarker, ''); + const cleanedOutro = outro?.replaceAll(sectionMarker, ''); - return ` -${intro} + // Remove section markers from each section + const cleanedSections = Object.fromEntries(Object.entries(sections).map(([name, section]) => [name, section.replaceAll(sectionMarker, '')])); + + // Create the full prompt + const sectionPrompts = Object.entries(cleanedSections) + .map(([name, section]) => { + return ` + ${sectionMarker} ${name} ${sectionMarker} + ${section}`.trim(); + }) + .join('\n\n'); -${Object.entries(sections) - .map(([name, section]) => { - return ` -${sectionMarker} ${name} ${sectionMarker} -${section} -`.trim(); - }) - .join('\n\n')} + return ` + ${cleanedIntro} + ${sectionPrompts} -${outro ?? ''} -`.trim(); + ${cleanedOutro ?? ''}`.trim(); } diff --git a/src/gpt/gptExecute.ts b/src/gpt/gptExecute.ts index 939b419..1d5bbe6 100644 --- a/src/gpt/gptExecute.ts +++ b/src/gpt/gptExecute.ts @@ -17,6 +17,20 @@ export function setOpenAIApiKey(apiKey: string) { openAIApiKey = apiKey; } +function convertResult(result: string, outputSchema: OutputTypeSchema): z.infer { + if (isZodString(outputSchema)) { + return result as z.infer; + } else { + const parseResult = outputSchema.safeParse(JSON.parse(result)); + if (parseResult.success) { + return parseResult.data; + } else { + console.log('RESULT', result); + console.log('SCHEMA', outputSchema); + throw new Error(`Could not parse result: ${result}`); + } + } +} export async function gptExecute({ fullPrompt, onChunk = async () => {}, diff --git a/src/gpt/processOpenAIResponseStream.ts b/src/gpt/processOpenAIResponseStream.ts index 187dec8..ed1de93 100644 --- a/src/gpt/processOpenAIResponseStream.ts +++ b/src/gpt/processOpenAIResponseStream.ts @@ -23,8 +23,12 @@ export async function processOpenAIResponseStream({ let fullContent = ''; let chunkBuffer = ''; - return await new Promise((resolve, reject) => { - stream?.on('data', async (value) => { + return new Promise((resolve, reject) => { + if (!stream) { + return reject('No stream'); + } + + stream.on('data', async (value) => { try { if (isCancelled() || controller.signal.aborted) { stream.removeAllListeners(); @@ -60,7 +64,7 @@ export async function processOpenAIResponseStream({ } }); - stream?.on('end', () => { + stream.on('end', () => { if (isCancelled() || controller.signal.aborted) { stream.removeAllListeners(); reject(CANCELED_STAGE_NAME); @@ -69,7 +73,7 @@ export async function processOpenAIResponseStream({ resolve(fullContent); }); - stream?.on('error', (err) => { + stream.on('error', (err) => { console.error('Error: ', err); reject(err); }); diff --git a/src/managers/AnalyticsManager.ts b/src/managers/AnalyticsManager.ts index 878d2d8..b7173b9 100644 --- a/src/managers/AnalyticsManager.ts +++ b/src/managers/AnalyticsManager.ts @@ -6,7 +6,6 @@ import { serializeMinionTask } from '../minionTasks/SerializedMinionTask'; import * as crypto from 'crypto'; -//TODO: consider put it to env file before open source const firebaseConfig = { apiKey: 'AIzaSyCM95vbb8kEco1Tyq23wd_7ryVgbzQiCqk', authDomain: 'minions-diagnostics.firebaseapp.com', diff --git a/src/minionTasks/advancedCodeChangeStrategy.ts b/src/minionTasks/advancedCodeChangeStrategy.ts index 4b70147..fd40acd 100644 --- a/src/minionTasks/advancedCodeChangeStrategy.ts +++ b/src/minionTasks/advancedCodeChangeStrategy.ts @@ -1,4 +1,5 @@ -import fs, { writeFileSync } from 'fs'; +import fs from 'fs'; +import { writeFile } from 'node:fs/promises'; import path from 'path'; import { SolutionWithMeta } from '../stepEvolve/FitnessFunction'; import { createSolutionWithMetaWithFitness } from '../stepEvolve/createSolutionWithMetaWithFitness'; @@ -104,9 +105,10 @@ export const advancedCodeChangeStrategy = async (task: MinionTask, test?: boolea if (!fs.existsSync(logsPath)) { fs.mkdirSync(logsPath, { recursive: true }); } - writeFileSync( + writeFile( path.join(__dirname, 'logs', `${iteration}-${dtFormat(new Date(), 'YYYY-MM-DD_HH-mm-ss')}.json`), JSON.stringify({ iteration, solutionsWithMeta }, null, 2), + 'utf8', ); }, onProgressMade: async ( @@ -116,7 +118,7 @@ export const advancedCodeChangeStrategy = async (task: MinionTask, test?: boolea newSolutions: MinionTaskSolutionWithMeta[], iteration: number, ) => { - writeFileSync(path.join(__dirname, 'logs', `${iteration}.json`), JSON.stringify({ iteration, accepted, rejected, newSolutions }, null, 2)); + writeFile(path.join(__dirname, 'logs', `${iteration}.json`), JSON.stringify({ iteration, accepted, rejected, newSolutions }, null, 2), 'utf8'); mutateAppendToLog(task, `Solutions ${oldSolutionsWithMeta.map((s) => s.solution).join(', ')}`); for (const solutionWithMeta of accepted) { diff --git a/src/utils/code/fuzzyReplaceText.ts b/src/utils/code/fuzzyReplaceText.ts index 748ee94..a38016b 100644 --- a/src/utils/code/fuzzyReplaceText.ts +++ b/src/utils/code/fuzzyReplaceText.ts @@ -112,39 +112,47 @@ export function exactLinesSimilarityAndMap( originalSimilarityLines++; }, }, - ...[1].map((skippedOriginalLines) => ({ - condition: () => originalLine + skippedOriginalLines < original.length && findLine < find.length, - simiarity: () => lineSimilarityFunction(original[originalLine + skippedOriginalLines], find[findLine]), - skippedOriginalLines: () => skippedOriginalLines, - skippedFindLines: () => 0, - apply: () => { - mappedFind.push(mapFindLine(original[originalLine + skippedOriginalLines], find[findLine])); - - originalLine++; - findLine++; - originalSimilarityLines++; - - originalLine += skippedOriginalLines; - }, - })), - ...[1].map((skippedFindLines) => ({ - condition: () => originalLine < original.length && findLine + skippedFindLines < find.length, - simiarity: () => lineSimilarityFunction(original[originalLine], find[findLine + skippedFindLines]), - skippedOriginalLines: () => 0, - skippedFindLines: () => skippedFindLines, - apply: () => { - for (let i = 0; i < skippedFindLines; i++) { - mappedFind.push(mapFindLine(undefined, find[findLine + i])); - } - mappedFind.push(mapFindLine(original[originalLine], find[findLine + skippedFindLines])); - - originalLine++; - findLine++; - originalSimilarityLines++; - - findLine += skippedFindLines; - }, - })), + (() => { + const skippedOriginalLines = 1; + + return { + condition: () => originalLine + skippedOriginalLines < original.length && findLine < find.length, + simiarity: () => lineSimilarityFunction(original[originalLine + skippedOriginalLines], find[findLine]), + skippedOriginalLines: () => skippedOriginalLines, + skippedFindLines: () => 0, + apply: () => { + mappedFind.push(mapFindLine(original[originalLine + skippedOriginalLines], find[findLine])); + + originalLine++; + findLine++; + originalSimilarityLines++; + + originalLine += skippedOriginalLines; + }, + }; + })(), + (() => { + const skippedFindLines = 1; + + return { + condition: () => originalLine < original.length && findLine + skippedFindLines < find.length, + simiarity: () => lineSimilarityFunction(original[originalLine], find[findLine + skippedFindLines]), + skippedOriginalLines: () => 0, + skippedFindLines: () => skippedFindLines, + apply: () => { + for (let i = 0; i < skippedFindLines; i++) { + mappedFind.push(mapFindLine(undefined, find[findLine + i])); + } + mappedFind.push(mapFindLine(original[originalLine], find[findLine + skippedFindLines])); + + originalLine++; + findLine++; + originalSimilarityLines++; + + findLine += skippedFindLines; + }, + }; + })(), { condition: () => originalLine < original.length && findLine >= find.length, simiarity: () => 0, diff --git a/tests/createProcedure/replaceProcedure.test.ts b/tests/createProcedure/replaceProcedure.test.ts index 5c19976..2ea181a 100644 --- a/tests/createProcedure/replaceProcedure.test.ts +++ b/tests/createProcedure/replaceProcedure.test.ts @@ -1,6 +1,6 @@ import * as assert from 'assert'; -import * as fs from 'fs'; -import { readFileSync } from 'fs'; +import { writeFile } from 'node:fs/promises'; +import { existsSync, lstatSync, readFileSync } from 'fs'; import * as glob from 'glob'; import * as path from 'path'; import { setupCLISystemsForTest } from '../../src/CLI/setupCLISystems'; @@ -13,7 +13,7 @@ suite('Create procedure test suite', () => { const baseDir = path.resolve(__dirname); const allPaths = glob.sync(path.resolve(baseDir, '*')); - const testDirs = allPaths.filter((path) => fs.lstatSync(path).isDirectory()); + const testDirs = allPaths.filter((path) => lstatSync(path).isDirectory()); setupCLISystemsForTest(); @@ -31,7 +31,7 @@ suite('Create procedure test suite', () => { const knowledegePath = path.resolve(baseDir, testDir, 'knowledge.json'); let knowledge: WorkspaceFilesKnowledge[] = []; - if (fs.existsSync(knowledegePath)) { + if (existsSync(knowledegePath)) { knowledge = JSON.parse(readFileSync(knowledegePath, 'utf8')); } @@ -44,7 +44,7 @@ suite('Create procedure test suite', () => { knowledge, ); - fs.writeFileSync(path.resolve(baseDir, testDir, 'procedure.txt'), procedure); + writeFile(path.resolve(baseDir, testDir, 'procedure.txt'), procedure, 'utf-8'); let modifiedContent; try { @@ -56,7 +56,7 @@ suite('Create procedure test suite', () => { // This is helper for creating and review test for developer - dont remove it // if (modifiedContent) { - // fs.writeFileSync(path.resolve(baseDir, testDir, 'modifiedContent.txt'), modifiedContent); + // writeFile(path.resolve(baseDir, testDir, 'modifiedContent.txt'), modifiedContent, 'utf-8'); // } assert.strictEqual(modifiedContent, expectedOutput); }); diff --git a/tests/replaceProcedure/replaceProcedure.test.ts b/tests/replaceProcedure/replaceProcedure.test.ts index 0a12b4b..7224ddf 100644 --- a/tests/replaceProcedure/replaceProcedure.test.ts +++ b/tests/replaceProcedure/replaceProcedure.test.ts @@ -1,21 +1,21 @@ import * as assert from 'assert'; -import * as fs from 'fs'; -import { readFileSync } from 'fs'; +import { writeFile, readFile } from 'node:fs/promises'; import * as glob from 'glob'; import * as path from 'path'; import { applyModificationProcedure } from '../../src/minionTasks/applyModificationProcedure'; +import { lstatSync } from 'fs'; suite('Replace Procedure Test Suite', () => { const baseDir = path.resolve(__dirname); const allPaths = glob.sync(path.resolve(baseDir, '*')); - const testDirs = allPaths.filter((path) => fs.lstatSync(path).isDirectory()); + const testDirs = allPaths.filter((path) => lstatSync(path).isDirectory()); for (const testDir of testDirs) { test(path.basename(testDir), async () => { - const currentCode = readFileSync(path.resolve(baseDir, testDir, 'original.txt'), 'utf8'); - const procedure = readFileSync(path.resolve(baseDir, testDir, 'procedure.txt'), 'utf8'); - const expectedOutput = readFileSync(path.resolve(baseDir, testDir, 'result.txt'), 'utf8'); + const currentCode = await readFile(path.resolve(baseDir, testDir, 'original.txt'), 'utf8'); + const procedure = await readFile(path.resolve(baseDir, testDir, 'procedure.txt'), 'utf8'); + const expectedOutput = await readFile(path.resolve(baseDir, testDir, 'result.txt'), 'utf8'); let modifiedContent; try { @@ -27,7 +27,7 @@ suite('Replace Procedure Test Suite', () => { } // This is helper to creating and review test for developer - dont remove it // if (modifiedContent) { - // fs.writeFileSync(path.resolve(baseDir, testDir, 'modifiedContent.txt'), modifiedContent); + // writeFile(path.resolve(baseDir, testDir, 'modifiedContent.txt'), modifiedContent, 'utf-8'); // } assert.strictEqual(modifiedContent, expectedOutput); diff --git a/tsconfig.json b/tsconfig.json index 9ca92bb..69b887d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,8 +2,8 @@ "compilerOptions": { "module": "commonjs", "moduleResolution": "node", - "target": "ES2020", - "lib": ["ES2020", "DOM"], + "target": "ESNext", + "lib": ["ESNext", "DOM"], "sourceMap": true, "strict": true, "jsx": "react", diff --git a/yarn.lock b/yarn.lock index 6b1f099..e914bce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,143 +8,119 @@ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@babel/parser@^7.20.15": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== - -"@esbuild-kit/cjs-loader@^2.4.2": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.2.tgz#cb4dde00fbf744a68c4f20162ea15a8242d0fa54" - integrity sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg== - dependencies: - "@esbuild-kit/core-utils" "^3.0.0" - get-tsconfig "^4.4.0" - -"@esbuild-kit/core-utils@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz#49945d533dbd5e1b7620aa0fc522c15e6ec089c5" - integrity sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw== - dependencies: - esbuild "~0.17.6" - source-map-support "^0.5.21" - -"@esbuild-kit/esm-loader@^2.5.5": - version "2.5.5" - resolved "https://registry.yarnpkg.com/@esbuild-kit/esm-loader/-/esm-loader-2.5.5.tgz#b82da14fcee3fc1d219869756c06f43f67d1ca71" - integrity sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw== - dependencies: - "@esbuild-kit/core-utils" "^3.0.0" - get-tsconfig "^4.4.0" - -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== + version "7.22.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== + +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -153,15 +129,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.1.tgz#0b371c118b8e4ebf9dbddb56120ab4befd791211" - integrity sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" + integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -173,10 +149,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== +"@eslint/js@8.50.0": + version "8.50.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484" + integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ== "@fastify/busboy@^1.2.1": version "1.2.1" @@ -618,9 +594,9 @@ "@types/node" ">=12.12.47" "@grpc/grpc-js@~1.8.0": - version "1.8.18" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.8.18.tgz#fdbf2728064fd3db7e72e970372db28bd0f6fafb" - integrity sha512-2uWPtxhsXmVgd8WzDhfamSjHpZDXfMjMDciY6VRTq4Sn7rFzazyf0LLDa0oav+61UHIoEZb4KKaAV6S7NuJFbQ== + version "1.8.21" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.8.21.tgz#d282b122c71227859bf6c5866f4c40f4a2696513" + integrity sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg== dependencies: "@grpc/proto-loader" "^0.7.0" "@types/node" ">=12.12.47" @@ -637,20 +613,19 @@ yargs "^16.2.0" "@grpc/proto-loader@^0.7.0": - version "0.7.8" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.8.tgz#c050bbeae5f000a1919507f195a1b094e218036e" - integrity sha512-GU12e2c8dmdXb7XUlOgYWZ2o2i+z9/VeACkxTA/zzAe2IjclC5PnVL0lpgjhrqfpDYHzM8B1TF6pqWegMYAzlA== + version "0.7.10" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.10.tgz#6bf26742b1b54d0a473067743da5d3189d06d720" + integrity sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ== dependencies: - "@types/long" "^4.0.1" lodash.camelcase "^4.3.0" - long "^4.0.0" + long "^5.0.0" protobufjs "^7.2.4" yargs "^17.7.2" -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -667,23 +642,23 @@ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@inquirer/checkbox@^1.3.4": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-1.3.5.tgz#47cdc68b0534b97b262fcac52a5254527f42d607" - integrity sha512-ZznkPU+8XgNICKkqaoYENa0vTw9jeToEHYyG5gUKpGmY+4PqPTsvLpSisOt9sukLkYzPRkpSCHREgJLqbCG3Fw== + version "1.3.11" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-1.3.11.tgz#3926d8def3142e54bcc621f7f61eace439bf2966" + integrity sha512-SaQBDr7niZQzoP5Mqzak5pQY7476mvf4Sj2V8VFrbFHWHsavy3nKGKEOgijNHy151bEgqDog1829g/pKa9Qcrw== dependencies: - "@inquirer/core" "^3.0.0" - "@inquirer/type" "^1.1.1" + "@inquirer/core" "^5.0.0" + "@inquirer/type" "^1.1.4" ansi-escapes "^4.3.2" chalk "^4.1.2" figures "^3.2.0" "@inquirer/confirm@^2.0.4", "@inquirer/confirm@^2.0.5": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-2.0.6.tgz#0fd041511c64a89ca3067e18d6085af2abc21514" - integrity sha512-1lPtPRq/1so8wmND43QTIn+hg5WIPpy2u3b8G2MveQ6B1Y2pm6/2Q5DEEt2ndi0kfidjPwQEjfGMlUNcXzQQVw== + version "2.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-2.0.12.tgz#d9fe9d5ce82907f956bd1c7d297ef11fc7a94c3f" + integrity sha512-Oxz3L0ti+0nWYHPPUIrPkxA2KnQZUGBHnk56yF5RjKqPGFrwvgLZdIXNe/w4I/OtdLeOBqHCrJ+kCvNvHVdk9g== dependencies: - "@inquirer/core" "^3.0.0" - "@inquirer/type" "^1.1.1" + "@inquirer/core" "^5.0.0" + "@inquirer/type" "^1.1.4" chalk "^4.1.2" "@inquirer/core@^2.3.1": @@ -706,62 +681,63 @@ strip-ansi "^6.0.1" wrap-ansi "^6.0.1" -"@inquirer/core@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-3.0.0.tgz#7664d99e4d2b8507738892f39691706081bee27e" - integrity sha512-zJzvndV5wrzspiRq7kwXxdKQtcPjl0QzCf6+GoV6BDPkTQoYfUoOnYQlzi7QdEBEgS/sM9Wz225w6tRqafFOuA== +"@inquirer/core@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-5.0.0.tgz#0b4b4eb9c076aca7b2cf7d040fbae0eaf98321b5" + integrity sha512-q2o4BcANKFyuUI5V6ejmPs1f9SdbJxfnLmhQVb72Fj7hOudoKsJpByJZ0imv9a/rpKDogA+93vtBBMqsnS7/Fg== dependencies: - "@inquirer/type" "^1.1.1" + "@inquirer/type" "^1.1.4" "@types/mute-stream" "^0.0.1" - "@types/node" "^20.4.2" + "@types/node" "^20.6.0" "@types/wrap-ansi" "^3.0.0" ansi-escapes "^4.3.2" chalk "^4.1.2" - cli-spinners "^2.8.0" - cli-width "^4.0.0" + cli-spinners "^2.9.0" + cli-width "^4.1.0" figures "^3.2.0" mute-stream "^1.0.0" run-async "^3.0.0" - string-width "^4.2.3" + signal-exit "^4.1.0" strip-ansi "^6.0.1" - wrap-ansi "^6.0.1" + wrap-ansi "^6.2.0" "@inquirer/editor@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-1.2.4.tgz#11da59db4e5af7637b3a4cfdda2b261133e8bcc2" - integrity sha512-ygTTYJ2Y6HMhC180Y7/Oem4Cx0vjfvCQTLvMwUWPv5wxAgizWF129n8u4k8NqavKxV2dybjxa8+0uyv40397jA== + version "1.2.10" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-1.2.10.tgz#7792e241b4f2b0dbc373b8983a89fb2c8f4df7a5" + integrity sha512-aluYpazbxIdM54L+xNmVHzOjoXGwkliTCvHxhtPg6itmqDGMVmU1z+T2akHt6Xnx9RyrTpbumFB4xn1iI0UfnA== dependencies: - "@inquirer/core" "^3.0.0" - "@inquirer/type" "^1.1.1" + "@inquirer/core" "^5.0.0" + "@inquirer/type" "^1.1.4" chalk "^4.1.2" - external-editor "^3.0.3" + external-editor "^3.1.0" "@inquirer/expand@^1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-1.1.5.tgz#c90feb2f8c3ceb68bbf269998e635345e2741273" - integrity sha512-dMXTMxNjqg57JPf6q0vZ12+0LBEXz5vo7xBprpVODIPL2cL4X6khipy/rRun4Iil28/k05QeEIBl6WsLfYN/Lw== + version "1.1.11" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-1.1.11.tgz#7ae46bb3f7e4d8611af341485e28efed871bcd90" + integrity sha512-GSZJbYKPBniyXgWeFLsqiv7TSK9QjpQqCr+i/85Yts3wwixXTrAeoqM3TVVgHO/3j+xeFcuhOm1wy/F2QY5aEg== dependencies: - "@inquirer/core" "^3.0.0" - "@inquirer/type" "^1.1.1" + "@inquirer/core" "^5.0.0" + "@inquirer/type" "^1.1.4" chalk "^4.1.2" figures "^3.2.0" -"@inquirer/input@^1.2.4", "@inquirer/input@^1.2.5": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-1.2.5.tgz#25b503d51e9178c662368e58d7416f0b830684a7" - integrity sha512-/zugbgdH5jjbfwau+SgWhJSxwc+QvIGScfQ2qa4Nx/SPwMNKdlaJl9q8xfwkVQ5PM39UXAvUNAnbbftTyUfgUQ== +"@inquirer/input@^1.2.11", "@inquirer/input@^1.2.4": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-1.2.11.tgz#7d2f1f58f69eb7dc33078b35c5ec463344b32a21" + integrity sha512-sV1nO6+RxMFTHAznmxMkbMkjGQ8NGMWr0mvXjU35YQ0OFEL+YlD+DPbNd9s3ltnswODZAcnM1yFvdko3S/Kj/w== dependencies: - "@inquirer/core" "^3.0.0" - "@inquirer/type" "^1.1.1" + "@inquirer/core" "^5.0.0" + "@inquirer/type" "^1.1.4" chalk "^4.1.2" "@inquirer/password@^1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-1.1.5.tgz#7d6cb41a0fb0d3c9f3dec14db0bf011c65e20f9e" - integrity sha512-fT4Q/UFazDS6LfThXtS3tPjQgxUhXOCPpltGEcQ9yLR2zoC5EpXaBYVvOJvWxAHnc0fBO70ed2flR+qyTQKvBw== + version "1.1.11" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-1.1.11.tgz#086ab3c9018a34b644922bffb5f84928afa1d41c" + integrity sha512-r2eiLMlTuY+k+yJf6XLbnAEz7EDyWdjOrgVAWjSKoEDBc3T9/rq2I+7WiY9FUFArYY/1LxmsNWavs5NuMICx8Q== dependencies: - "@inquirer/input" "^1.2.5" - "@inquirer/type" "^1.1.1" + "@inquirer/input" "^1.2.11" + "@inquirer/type" "^1.1.4" + ansi-escapes "^4.3.2" chalk "^4.1.2" "@inquirer/prompts@^2.3.0": @@ -780,29 +756,29 @@ "@inquirer/select" "^1.2.4" "@inquirer/rawlist@^1.2.4": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-1.2.5.tgz#2b8f8b8d544ecb3fb9f763167d7a270d187b2e1b" - integrity sha512-QKo1hIyKgKrCFaBhvtRn9xkjbyzjATWDn10LxVadh1lwSuQyplHbcwOpMUa8TaB/xMtm2fnec3TIez7NB5Rqlg== + version "1.2.11" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-1.2.11.tgz#3a75a7ab231f61be7af7d48872e995d5c65d2dba" + integrity sha512-4S2t2pCCR3VgyB3lbPKoiJ9020HHAi9g4M+DIyXHYwGE++7wURAwKkzb6v78fS0yKfCbyFt3BTcL2UffQRQ9Fg== dependencies: - "@inquirer/core" "^3.0.0" - "@inquirer/type" "^1.1.1" + "@inquirer/core" "^5.0.0" + "@inquirer/type" "^1.1.4" chalk "^4.1.2" "@inquirer/select@^1.2.3", "@inquirer/select@^1.2.4": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-1.2.5.tgz#858e65f9b25b60a7741bc33c843322b2371cc831" - integrity sha512-MPoqecOtxLMGyWQNBmjmVIHQPkTpIJcdAo+K7kvowCymb8dnuuTu+fzYZoRolnszsj4C1mMezirDo3yhCpj40Q== + version "1.2.11" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-1.2.11.tgz#4a99edadd23f398bf51838b89383d3d0cfd80a05" + integrity sha512-LH2wzAsWfu/+wcapeht07zTDefuvGTpv0+9dCAQ68QigF+4gHzpWq5+AbBLbxzuH2Wz4WlHcti85nFUPPM1t3A== dependencies: - "@inquirer/core" "^3.0.0" - "@inquirer/type" "^1.1.1" + "@inquirer/core" "^5.0.0" + "@inquirer/type" "^1.1.4" ansi-escapes "^4.3.2" chalk "^4.1.2" figures "^3.2.0" -"@inquirer/type@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.1.1.tgz#d92259b8ed866768396b0dce6b4d065be6957784" - integrity sha512-ACc2N1AnIYtg+bfnitna0OJ1rptWqa8apdDDRQnRWb0R5MEPGAgvqWaDbZahATXOnglqKDRIeHFEQfqxhM6p/g== +"@inquirer/type@^1.1.1", "@inquirer/type@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.1.4.tgz#8ef3d3d638a59253fbbe4b0297035cddc227eaed" + integrity sha512-a6+RCiXBQEbiA73RT1pBfwiH2I+MPcoZoGKuuUYFkws+6ud7nb5kUQGHFGUSBim25IyVMT/mqbWIrkxetcIb/w== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -930,29 +906,29 @@ integrity sha512-2+rYSaWrpdbQG3SA0LmMT6YxWLrI81AqpMlSkw3QtFc2HGDufkweQSn30Eiev7x9LL0oyFrBqk1PXOnB9IEgKg== "@types/async@^3.2.20": - version "3.2.20" - resolved "https://registry.yarnpkg.com/@types/async/-/async-3.2.20.tgz#53517caaa68c94f99da1c4e986cf7f2954981515" - integrity sha512-6jSBQQugzyX1aWto0CbvOnmxrU9tMoXfA9gc4IrLEtvr3dTwSg5GLGoWiZnGLI6UG/kqpB3JOQKQrqnhUWGKQA== + version "3.2.21" + resolved "https://registry.yarnpkg.com/@types/async/-/async-3.2.21.tgz#470b06c25fc104c169e80a9c91866e8204e91175" + integrity sha512-msYM0OYxzkwpiDJZZDo7XsYuFIpiAOh+o3hygudSpSzeW+R0DAEKZvdQriHYT95m9CvscLDg5s0Mxlrlhoy2qw== "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + version "1.19.3" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" + integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== dependencies: "@types/connect" "*" "@types/node" "*" "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.36" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== dependencies: "@types/node" "*" "@types/express-serve-static-core@^4.17.33": - version "4.17.35" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" - integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + version "4.17.37" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz#7e4b7b59da9142138a2aaa7621f5abedce8c7320" + integrity sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -960,9 +936,9 @@ "@types/send" "*" "@types/express@^4.17.14": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + version "4.17.18" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.18.tgz#efabf5c4495c1880df1bdffee604b143b29c4a95" + integrity sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -978,26 +954,26 @@ "@types/node" "*" "@types/http-errors@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" - integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" + integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== "@types/jsonwebtoken@^9.0.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#9eeb56c76dd555039be2a3972218de5bd3b8d83e" - integrity sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q== + version "9.0.3" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#1f22283b8e1f933af9e195d720798b64b399d84c" + integrity sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA== dependencies: "@types/node" "*" "@types/linkify-it@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" - integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.3.tgz#15a0712296c5041733c79efe233ba17ae5a7587b" + integrity sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g== "@types/long@^4.0.0", "@types/long@^4.0.1": version "4.0.2" @@ -1044,20 +1020,20 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^20.4.2": - version "20.4.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.4.tgz#c79c7cc22c9d0e97a7944954c9e663bcbd92b0cb" - integrity sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew== +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^20.4.2", "@types/node@^20.6.0": + version "20.6.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.5.tgz#4c6a79adf59a8e8193ac87a0e522605b16587258" + integrity sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w== "@types/node@18.x": - version "18.17.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.0.tgz#35d44267a33dd46b49ee0f73d31b05fd7407e290" - integrity sha512-GXZxEtOxYGFchyUzxvKI14iff9KZ2DI+A6a37o6EQevtg6uO9t+aUZKcaC1Te5Ng1OnLM7K9NVVj+FbecD9cJg== + version "18.17.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.19.tgz#80c9b8a89d3648d9e6098f4a7184e03833fee3c5" + integrity sha512-+pMhShR3Or5GR0/sp4Da7FnhVmTalWm81M6MkEldbwjETSaPalw138Z4KdpQaistvqQxLB7Cy4xwYdxpbSOs9Q== "@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== "@types/range-parser@*": version "1.2.4" @@ -1073,9 +1049,9 @@ "@types/node" "*" "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.2" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" + integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== "@types/send@*": version "0.17.1" @@ -1184,14 +1160,14 @@ eslint-visitor-keys "^3.3.0" "@vscode/test-electron@^2.3.0": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.3.3.tgz#e648700d5848eccfda99efa5d839356cfbe8cd4e" - integrity sha512-hgXCkDP0ibboF1K6seqQYyHAzCURgTwHS/6QU7slhwznDLwsRwg9bhfw1CZdyUEw8vvCmlrKWnd7BlQnI0BC4w== + version "2.3.4" + resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.3.4.tgz#d0ed1de72d347221cdf71426b0c7e21136f4791f" + integrity sha512-eWzIqXMhvlcoXfEFNWrVu/yYT5w6De+WZXR/bafUQhAp8+8GkQo95Oe14phwiRUPv8L+geAKl/QM2+PoT3YW3g== dependencies: http-proxy-agent "^4.0.1" https-proxy-agent "^5.0.0" jszip "^3.10.1" - semver "^7.3.8" + semver "^7.5.2" abort-controller@^3.0.0: version "3.0.0" @@ -1217,7 +1193,7 @@ agent-base@6: dependencies: debug "4" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1329,9 +1305,9 @@ big-integer@^1.6.44: integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== bignumber.js@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: version "2.2.0" @@ -1444,15 +1420,15 @@ chokidar@3.5.3: optionalDependencies: fsevents "~2.3.2" -cli-spinners@^2.8.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== +cli-spinners@^2.8.0, cli-spinners@^2.9.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" + integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== -cli-width@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.0.0.tgz#a5622f6a3b0a9e3e711a25f099bf2399f608caf6" - integrity sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw== +cli-width@^4.0.0, cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== cliui@^7.0.2: version "7.0.4" @@ -1528,9 +1504,9 @@ data-uri-to-buffer@^4.0.0: integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== date-and-time@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-3.0.2.tgz#c2231ef98e7702b93cde1505d2d93f4fe602f0b6" - integrity sha512-MOqlRertOQmQI7ySbz6dKLM7Rxm9dgcPuBI9IL7NVe0UGqHPK+6hWSKVhLrVHxlSgQQtocE2R7+HFOf5aMz8vw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-3.0.3.tgz#a571a2ca7a47ce08bfe3403d1507530bc432ba02" + integrity sha512-CmHCeTixc3KA5pcLTVs9JCFhmJMFTBsmSsgHnNed4YDNw9yUOrjjRn3zALy8eMgqmTO+4U8k5jl1peC7IoezfA== debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" @@ -1650,33 +1626,33 @@ entities@~2.1.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== -esbuild@~0.17.6: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== +esbuild@~0.18.20: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" escalade@^3.1.1: version "3.1.1" @@ -1711,9 +1687,9 @@ escodegen@^1.13.0: source-map "~0.6.1" eslint-config-prettier@^8.9.0: - version "8.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.9.0.tgz#094b6254b2804b0544f7cee535f802b6d29ee10b" - integrity sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA== + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-plugin-prettier@^5.0.0: version "5.0.0" @@ -1731,40 +1707,40 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.1.tgz#936821d3462675f25a18ac5fd88a67cc15b393bd" - integrity sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.39.0: - version "8.45.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.45.0.tgz#bab660f90d18e1364352c0a6b7c6db8edb458b78" - integrity sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw== + version "8.50.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2" + integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.50.0" + "@humanwhocodes/config-array" "^0.11.11" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -1787,7 +1763,7 @@ eslint@^8.39.0: strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^9.0.0, espree@^9.6.0: +espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== @@ -1870,7 +1846,7 @@ extend@^3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: +external-editor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== @@ -1916,9 +1892,9 @@ fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== fast-xml-parser@^4.2.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.6.tgz#30ad37b014c16e31eec0e01fbf90a85cedb4eacf" - integrity sha512-Xo1qV++h/Y3Ng8dphjahnYe+rGHaaNdsYOBWL9Y9GCPKpNKilJtilvWkLcI9f9X2DoKTLsZsGYAls5+JL5jfLA== + version "4.3.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.1.tgz#4f89c31e4c392d6e3d68b299733cad0c2d50d495" + integrity sha512-viVv3xb8D+SiS1W4cv4tva3bni08kAkx0gQnWrykMM8nXPc1FxqZPU00dCEVjkiCg4HoXd2jC4x29Nzg/l2DAA== dependencies: strnum "^1.0.5" @@ -1990,7 +1966,7 @@ firebase-admin@^11.9.0: "@google-cloud/firestore" "^6.6.0" "@google-cloud/storage" "^6.9.5" -firebase@^9.22.2: +firebase@^9.9.2: version "9.23.0" resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.23.0.tgz#71fea60d704bfed8e92162911544fd6564a04d0e" integrity sha512-/4lUVY0lUvBDIaeY1q6dUYhS8Sd18Qb9CgWkPZICUo9IXpJNCEagfNZXBBFCkMTTN5L5gx2Hjr27y21a9NzUcA== @@ -2023,11 +1999,12 @@ firebase@^9.22.2: "@firebase/util" "1.9.3" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^3.1.0" + flatted "^3.2.7" + keyv "^4.5.3" rimraf "^3.0.2" flat@^5.0.2: @@ -2035,15 +2012,15 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flatted@^3.2.7: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== follow-redirects@^1.14.8: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== foreground-child@^3.1.0: version "3.1.1" @@ -2074,10 +2051,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== functional-red-black-tree@^1.0.1: version "1.0.1" @@ -2112,10 +2089,10 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-tsconfig@^4.4.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" - integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== +get-tsconfig@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== dependencies: resolve-pkg-maps "^1.0.0" @@ -2146,9 +2123,9 @@ glob@7.2.0: path-is-absolute "^1.0.0" glob@^10.2.5: - version "10.3.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b" - integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw== + version "10.3.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.7.tgz#d5bd30a529c8c9b262fb4b217941f64ad90e25ac" + integrity sha512-wCMbE1m9Nx5yD9LYtgsVWq5VhHlk5WzJirw594qZR6AIvQYuHrdDtIktUVjQItalD53y7dqoedu9xP0u0WaxIQ== dependencies: foreground-child "^3.1.0" jackspeak "^2.0.3" @@ -2180,9 +2157,9 @@ glob@^8.0.0, glob@^8.1.0: once "^1.3.0" globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.22.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" + integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== dependencies: type-fest "^0.20.2" @@ -2465,18 +2442,18 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + version "2.3.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.3.tgz#95e4cbcc03b3eb357bf6bcce14a903fb3d1151e1" + integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jose@^4.10.4: - version "4.14.4" - resolved "https://registry.yarnpkg.com/jose/-/jose-4.14.4.tgz#59e09204e2670c3164ee24cbfe7115c6f8bff9ca" - integrity sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g== + version "4.14.6" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.14.6.tgz#94dca1d04a0ad8c6bff0998cdb51220d473cc3af" + integrity sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ== js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" @@ -2520,6 +2497,11 @@ json-bigint@^1.0.0: dependencies: bignumber.js "^9.0.0" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2536,14 +2518,20 @@ jsonschema@^1.4.1: integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== jsonwebtoken@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145" - integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg== + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== dependencies: jws "^3.2.2" - lodash "^4.17.21" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" ms "^2.1.1" - semver "^7.3.8" + semver "^7.5.4" jszip@^3.10.1: version "3.10.1" @@ -2601,6 +2589,13 @@ jws@^4.0.0: jwa "^2.0.0" safe-buffer "^5.0.1" +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + klaw@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" @@ -2660,11 +2655,46 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -2696,9 +2726,9 @@ lru-cache@^6.0.0: yallist "^4.0.0" "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== lru-cache@~4.0.0: version "4.0.2" @@ -2821,9 +2851,9 @@ minimist@^1.2.0: integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e" - integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA== + version "7.0.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" + integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== mkdirp@^1.0.4: version "1.0.4" @@ -2900,16 +2930,16 @@ node-fetch@2.6.7: whatwg-url "^5.0.0" node-fetch@^2.6.1, node-fetch@^2.6.9: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-fetch@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" - integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: data-uri-to-buffer "^4.0.0" fetch-blob "^3.1.4" @@ -3099,9 +3129,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" - integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== process-nextick-args@~2.0.0: version "2.0.1" @@ -3136,7 +3166,7 @@ protobufjs-cli@1.1.1: tmp "^0.2.1" uglify-js "^3.7.7" -protobufjs@7.2.4, protobufjs@^7.0.0, protobufjs@^7.2.4: +protobufjs@7.2.4: version "7.2.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== @@ -3154,10 +3184,10 @@ protobufjs@7.2.4, protobufjs@^7.0.0, protobufjs@^7.2.4: "@types/node" ">=13.7.0" long "^5.0.0" -protobufjs@^6.11.3: - version "6.11.3" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" - integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== +protobufjs@^6.11.3, protobufjs@^6.11.4: + version "6.11.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -3173,6 +3203,24 @@ protobufjs@^6.11.3: "@types/node" ">=13.7.0" long "^4.0.0" +protobufjs@^7.0.0, protobufjs@^7.2.4: + version "7.2.5" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" + integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== + 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/node" ">=13.7.0" + long "^5.0.0" + pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -3317,7 +3365,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@^7.1.2, semver@^7.3.7, semver@^7.3.8: +semver@^7.1.2, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3353,10 +3401,10 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== slash@^3.0.0: version "3.0.0" @@ -3538,15 +3586,10 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tslib@^2.5.0, tslib@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" - integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== +tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsutils@^3.21.0: version "3.21.0" @@ -3556,15 +3599,15 @@ tsutils@^3.21.0: tslib "^1.8.1" tsx@^3.12.7: - version "3.12.7" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.12.7.tgz#b3b8b0fc79afc8260d1e14f9e995616c859a91e9" - integrity sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw== + version "3.13.0" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.13.0.tgz#f860e511b33fcb41d74df87d7ba239a0b4012dbb" + integrity sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A== dependencies: - "@esbuild-kit/cjs-loader" "^2.4.2" - "@esbuild-kit/core-utils" "^3.0.0" - "@esbuild-kit/esm-loader" "^2.5.5" + esbuild "~0.18.20" + get-tsconfig "^4.7.2" + source-map-support "^0.5.21" optionalDependencies: - fsevents "~2.3.2" + fsevents "~2.3.3" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -3591,9 +3634,9 @@ type-fest@^0.21.3: integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== typescript@^5.0.4: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -3633,9 +3676,9 @@ uuid@^8.0.0: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== web-streams-polyfill@^3.0.3: version "3.2.1" @@ -3695,7 +3738,7 @@ workerpool@6.2.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.0.1: +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== @@ -3800,6 +3843,6 @@ zod-to-json-schema@^3.21.4: integrity sha512-fjUZh4nQ1s6HMccgIeE0VP4QG/YRGPmyjO9sAh890aQKPEk3nqbfUXhMFaC+Dr5KvYBm8BCyvfpZf2jY9aGSsw== zod@^3.21.4: - version "3.21.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" - integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== + version "3.22.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.2.tgz#3add8c682b7077c05ac6f979fea6998b573e157b" + integrity sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==