From 7dfcce54f41ae1493465983c133a89fe6e735736 Mon Sep 17 00:00:00 2001 From: jalal246 Date: Wed, 6 Sep 2023 21:38:17 +0300 Subject: [PATCH 1/6] init --- .../src/LayoutManager/DFlexDnDStore.ts | 110 +++++++++++++++--- .../src/Mutation/DFlexIDGarbageCollector.ts | 56 +++++++-- .../dflex-dnd/src/Mutation/DFlexMutations.ts | 4 +- .../__snapshots__/layoutManager.test.tsx.snap | 1 + packages/dflex-dom-gen/src/Generator.ts | 30 +++-- packages/dflex-store/src/DFlexBaseStore.ts | 14 +-- packages/dflex-utils/src/FeatureFlags.ts | 2 + playwright.config.ts | 2 +- 8 files changed, 170 insertions(+), 49 deletions(-) diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts index 4366e20c7..d0e90ecbc 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts @@ -137,6 +137,8 @@ class DFlexDnDStore extends DFlexBaseStore { mutationObserverMap: Map; + deletedElements: WeakSet; + listeners: DFlexListenerPlugin; migration: DFlexCycle; @@ -166,7 +168,12 @@ class DFlexDnDStore extends DFlexBaseStore { this.containers = new Map(); this.scrolls = new Map(); this.unifiedContainerDimensions = {}; + + // Observers. + this.mutationObserverMap = new Map(); + this._terminatedDOMiDs = new Set(); + this.deletedElements = new WeakSet(); [this._unregisterSchedule] = DFlexCreateTimeout(0); // @ts-ignore- `null` until we have element to drag. @@ -176,9 +183,6 @@ class DFlexDnDStore extends DFlexBaseStore { [this._resizeThrottle] = DFlexCreateTimeout(100); - // Observers. - this.mutationObserverMap = new Map(); - this.isComposing = false; this.isUpdating = false; this.deferred = []; @@ -442,28 +446,66 @@ class DFlexDnDStore extends DFlexBaseStore { ); } + deleteFromRegistry(id: string): void { + super.unregister(id); + } + unregister(id: string): void { - // This is not supposed to happen. - // But in React/Next case, it triggers the cleanup in the ueeEffect before the registration. + if (__DEV__) { + if (featureFlags.enableMutationDebugger) { + // eslint-disable-next-line no-console + console.log(`Received id (${id}) to unregister`); + } + } + if (!this.registry.has(id)) { + if (__DEV__) { + if (featureFlags.enableMutationDebugger) { + // eslint-disable-next-line no-console + console.warn( + "Ignoring unregister: Registration process still ongoing.", + ); + } + } + return; } if (this.isComposing) { + if (__DEV__) { + if (featureFlags.enableMutationDebugger) { + // eslint-disable-next-line no-console + console.warn( + "Ignoring unregister: Registering siblings still active.", + ); + } + } + + return; + } + + if (this._terminatedDOMiDs.has(id)) { + if (__DEV__) { + if (featureFlags.enableMutationDebugger) { + // eslint-disable-next-line no-console + console.warn("Ignoring unregister: triggered more than once."); + } + } + return; } this._terminatedDOMiDs.add(id); - // Don't execute immediately to prevent race condition with mutation observer. - // Instead reschedule and then check observer flag. + // Delay execution to prevent a race condition with the mutation observer. + // Instead, reschedule and then check the observer flag. this._unregisterSchedule(() => { - // Abort & clear pending ids. Leave it to the observer. + // Abort and clear pending IDs, allowing the observer to handle them. if (hasMutationsInProgress()) { this._terminatedDOMiDs.clear(); if (__DEV__) { - if (featureFlags.enableRegisterDebugger) { + if (featureFlags.enableMutationDebugger) { // eslint-disable-next-line no-console console.log( "Aborting unregister. Cleanup handling will be performed by the mutation observer.", @@ -560,9 +602,37 @@ class DFlexDnDStore extends DFlexBaseStore { ): void { const container = this.containers.get(SK)!; const scroll = this.scrolls.get(SK)!; + + if (__DEV__) { + if (!container) { + throw new Error(`Container is not defined for element with SK: ${SK}`); + } + + if (!scroll) { + throw new Error( + `Scroll container is not defined for element with SK: ${SK}`, + ); + } + } + const branch = this.getElmSiblingsByKey(SK); + + if (__DEV__) { + if (branch.length === 0) { + throw new Error(`No sibling elements found for SK: ${SK}`); + } + } + const parentDOM = this.interactiveDOM.get(container.id)!; + if (__DEV__) { + if (!(parentDOM instanceof HTMLElement)) { + throw new Error( + `Parent DOM element is not of type HTMLElement for container with ID: ${container.id}`, + ); + } + } + scheduler( this, () => { @@ -731,33 +801,33 @@ class DFlexDnDStore extends DFlexBaseStore { return [parentID, parentDOM]; } - deleteElm(id: string, BK: string): void { - this.DOMGen.removeIDFromBranch(id, BK); + // deleteElm(id: string, BK: string): void { + // this.DOMGen.removeIDFromBranch(id, BK); - super.unregister(id); - } + // super.unregister(id); + // } deleteSiblings(SK: string, BK: string, depth: number): void { - this.DOMGen.destroySiblings(SK, BK, depth); - const scroll = this.scrolls.get(SK)!; if (__DEV__) { - if (!scroll) { + if (!scroll && depth === 0) { throw new Error( `deleteSiblings: Scroll container with SK: ${SK} doesn't exists`, ); } } - scroll.destroy(); + if (scroll) { + scroll.destroy(); - this.scrolls.delete(SK); + this.scrolls.delete(SK); + } const deletedContainer = this.containers.delete(SK); if (__DEV__) { - if (!deletedContainer) { + if (!deletedContainer && depth === 0) { throw new Error( `deleteSiblings: Container with SK: ${SK} doesn't exists`, ); @@ -782,6 +852,8 @@ class DFlexDnDStore extends DFlexBaseStore { } }); + this.DOMGen.destroySiblings(SK, BK, depth); + if (__DEV__) { if (featureFlags.enableRegisterDebugger) { // eslint-disable-next-line no-console diff --git a/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts b/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts index 1a645d0d2..21cb93712 100644 --- a/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts +++ b/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts @@ -24,7 +24,7 @@ function recomposeSiblings( if (index !== dflexElm.VDOMOrder.self) { dflexElm.updateIndex(store.interactiveDOM.get(elmID)!, index); - if (featureFlags.enableRegisterDebugger) { + if (featureFlags.enableMutationDebugger) { // eslint-disable-next-line no-console console.log(`cleanupLeaves: updating index for ${elmID} to ${index}`); } @@ -33,7 +33,7 @@ function recomposeSiblings( } if (__DEV__) { - if (featureFlags.enableRegisterDebugger) { + if (featureFlags.enableMutationDebugger) { // eslint-disable-next-line no-console console.log( `cleanupSiblings: Found ${connectedNodesID.length} connected`, @@ -43,6 +43,10 @@ function recomposeSiblings( } if (connectedNodesID.length > 0) { + terminatedDOMiDs.forEach((id) => { + store.DOMGen.removeIDFromBranch(id, BK); + }); + store.DOMGen.mutateSiblings(SK, connectedNodesID); } else { store.deleteSiblings(SK, BK, depth); @@ -58,22 +62,52 @@ function DFlexIDGarbageCollector( const SKeys = new Map(); terminatedDOMiDs.forEach((id) => { + const [dflexElm, DOM] = store.getElmWithDOM(id); + + // hasAlreadyBeenRemoved + if (!DOM || !dflexElm) { + if (featureFlags.enableMutationDebugger) { + // eslint-disable-next-line no-console + console.log( + `Element with id: (${id}) has already been removed from registry`, + ); + } + + return; + } + const { keys: { SK, BK }, depth, - } = store.registry.get(id)!; + } = dflexElm; - store.deleteElm(id, BK); + // This function handles calls from two sources: the observer and unregister. + // To prevent triggering the process twice, we check if it's the first time + // or if it's already been deleted. + const hasAlreadyBeenRemoved = store.deletedElements.has(DOM); - if (__DEV__) { - if (featureFlags.enableRegisterDebugger) { - // eslint-disable-next-line no-console - console.log(`DFlexIdGC: removing ${id} from registry`); + if (!hasAlreadyBeenRemoved) { + store.deletedElements.add(DOM); + + store.deleteFromRegistry(id); + + if (__DEV__) { + if (featureFlags.enableMutationDebugger) { + // eslint-disable-next-line no-console + console.log(`DFlexIdGC: removing ${id} from registry`); + } } - } - if (!SKeys.has(SK)) { - SKeys.set(SK, { BK, depth }); + if (!SKeys.has(SK)) { + SKeys.set(SK, { BK, depth }); + } + } else if (__DEV__) { + if (featureFlags.enableMutationDebugger) { + // eslint-disable-next-line no-console + console.log( + `Element with id: (${id}) has already been removed from registry`, + ); + } } }); diff --git a/packages/dflex-dnd/src/Mutation/DFlexMutations.ts b/packages/dflex-dnd/src/Mutation/DFlexMutations.ts index 2286279b2..58675e3f5 100644 --- a/packages/dflex-dnd/src/Mutation/DFlexMutations.ts +++ b/packages/dflex-dnd/src/Mutation/DFlexMutations.ts @@ -105,13 +105,13 @@ function addObserver( initMutationObserver(store, id); if (__DEV__) { - if (featureFlags.enableRegisterDebugger) { + if (featureFlags.enableMutationDebugger) { // eslint-disable-next-line no-console console.log(`addObserver: ${id}`); } } } else if (__DEV__) { - if (featureFlags.enableRegisterDebugger) { + if (featureFlags.enableMutationDebugger) { // eslint-disable-next-line no-console console.log(`addObserver: ${id} already exist`); } diff --git a/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap b/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap index cf47a237f..55a5aa921 100644 --- a/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap +++ b/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap @@ -156,6 +156,7 @@ DFlexDnDStore { }, }, "deferred": [], + "deletedElements": WeakSet {}, "globals": { "removeContainerWhenEmpty": false, }, diff --git a/packages/dflex-dom-gen/src/Generator.ts b/packages/dflex-dom-gen/src/Generator.ts index dc8282079..d46b00ba5 100644 --- a/packages/dflex-dom-gen/src/Generator.ts +++ b/packages/dflex-dom-gen/src/Generator.ts @@ -329,21 +329,21 @@ class Generator { // Assert uniqueness for new branches. if (isNewBranch) { if (uniqueKeysDev.has(uniqueSK)) { - throw new Error( - `SK: ${SK} with ${siblingsIndex} already exist.\n This combination supposed to be unique for each branch.`, - ); + // throw new Error( + // `SK: ${SK} with ${siblingsIndex} already exist.\n This combination supposed to be unique for each branch.`, + // ); } if (uniqueKeysDev.has(SK)) { - throw new Error( - `SK: ${SK} already exist.\n This combination supposed to be unique for each branch.`, - ); + // throw new Error( + // `SK: ${SK} already exist.\n This combination supposed to be unique for each branch.`, + // ); } if (uniqueKeysDev.has(PK)) { - throw new Error( - `PK: ${PK} already exist.\n This combination supposed to be unique for each branch.`, - ); + // throw new Error( + // `PK: ${PK} already exist.\n This combination supposed to be unique for each branch.`, + // ); } uniqueKeysDev.add(SK); @@ -523,6 +523,18 @@ class Generator { this._SKByBranch[BK] = this._SKByBranch[BK].map((v) => v ? (v.SK !== SK ? v : null) : null, ); + + if (this._SKByBranch[BK].every((item) => item === null)) { + delete this._SKByBranch[BK]; + + if (__DEV__) { + // eslint-disable-next-line no-console + console.log(`Deleted branch: ${BK}`); + } + + this._siblingsCount = {}; + this._prevPK = ""; + } } private _removeSKFromDepth(SK: string, depth: number): void { diff --git a/packages/dflex-store/src/DFlexBaseStore.ts b/packages/dflex-store/src/DFlexBaseStore.ts index 5a17ed1bb..c7a94142a 100644 --- a/packages/dflex-store/src/DFlexBaseStore.ts +++ b/packages/dflex-store/src/DFlexBaseStore.ts @@ -579,16 +579,16 @@ class DFlexBaseStore { * @returns */ getElmWithDOM(id: string): GetElmWithDOMOutput { - if (__DEV__) { - if (!(this.registry.has(id) && this.interactiveDOM.has(id))) { - throw new Error(`getElmWithDOM: Unable to find element with ID: ${id}`); - } - } + // if (__DEV__) { + // if (!(this.registry.has(id) && this.interactiveDOM.has(id))) { + // throw new Error(`getElmWithDOM: Unable to find element with ID: ${id}`); + // } + // } - const elm = this.registry.get(id)!; + const dflexElm = this.registry.get(id)!; const DOM = this.interactiveDOM.get(id)!; - return [elm, DOM]; + return [dflexElm, DOM]; } /** diff --git a/packages/dflex-utils/src/FeatureFlags.ts b/packages/dflex-utils/src/FeatureFlags.ts index 49da7dda7..2fed58e55 100644 --- a/packages/dflex-utils/src/FeatureFlags.ts +++ b/packages/dflex-utils/src/FeatureFlags.ts @@ -19,3 +19,5 @@ export const enableMechanismDebugger = false; export const enableScrollDebugger = false; export const enableVisibilityDebugger = false; + +export const enableMutationDebugger = false; diff --git a/playwright.config.ts b/playwright.config.ts index 4acd2efb3..6e19f219e 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -11,7 +11,7 @@ const baseURL = "http://localhost:3001"; const config: PlaywrightTestConfig = { forbidOnly: IS_CI, retries: IS_CI ? 4 : 1, - timeout: 60000, + timeout: 30000, use: { video: "retain-on-failure", navigationTimeout: 30000, From 79a625a4bd19961251e865adb484fbe9257947c8 Mon Sep 17 00:00:00 2001 From: Jalal Date: Sat, 9 Sep 2023 14:08:11 +0300 Subject: [PATCH 2/6] Extract Element Management to `DFlexDOMManager` (#696) --- .../src/LayoutManager/DFlexDnDStore.ts | 3 - .../src/Mutation/DFlexIDGarbageCollector.ts | 4 +- .../__snapshots__/layoutManager.test.tsx.snap | 2 +- packages/dflex-store/src/DFlexBaseStore.ts | 94 ++----------------- packages/dflex-store/src/DFlexDOMManager.ts | 88 +++++++++++++++++ packages/dflex-store/src/utils.ts | 49 ++++++++++ 6 files changed, 150 insertions(+), 90 deletions(-) create mode 100644 packages/dflex-store/src/DFlexDOMManager.ts create mode 100644 packages/dflex-store/src/utils.ts diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts index d0e90ecbc..745fb4e5c 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts @@ -137,8 +137,6 @@ class DFlexDnDStore extends DFlexBaseStore { mutationObserverMap: Map; - deletedElements: WeakSet; - listeners: DFlexListenerPlugin; migration: DFlexCycle; @@ -173,7 +171,6 @@ class DFlexDnDStore extends DFlexBaseStore { this.mutationObserverMap = new Map(); this._terminatedDOMiDs = new Set(); - this.deletedElements = new WeakSet(); [this._unregisterSchedule] = DFlexCreateTimeout(0); // @ts-ignore- `null` until we have element to drag. diff --git a/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts b/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts index 21cb93712..25ea2be87 100644 --- a/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts +++ b/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts @@ -84,10 +84,10 @@ function DFlexIDGarbageCollector( // This function handles calls from two sources: the observer and unregister. // To prevent triggering the process twice, we check if it's the first time // or if it's already been deleted. - const hasAlreadyBeenRemoved = store.deletedElements.has(DOM); + const hasAlreadyBeenRemoved = store.deletedDOM.has(DOM); if (!hasAlreadyBeenRemoved) { - store.deletedElements.add(DOM); + store.deletedDOM.add(DOM); store.deleteFromRegistry(id); diff --git a/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap b/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap index 55a5aa921..f06ff06d3 100644 --- a/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap +++ b/packages/dflex-dnd/test/__snapshots__/layoutManager.test.tsx.snap @@ -156,7 +156,7 @@ DFlexDnDStore { }, }, "deferred": [], - "deletedElements": WeakSet {}, + "deletedDOM": WeakSet {}, "globals": { "removeContainerWhenEmpty": false, }, diff --git a/packages/dflex-store/src/DFlexBaseStore.ts b/packages/dflex-store/src/DFlexBaseStore.ts index c7a94142a..5dcf0abd4 100644 --- a/packages/dflex-store/src/DFlexBaseStore.ts +++ b/packages/dflex-store/src/DFlexBaseStore.ts @@ -10,12 +10,12 @@ import { featureFlags, getAnimationOptions, getParentElm, - PREFIX_TRACKER_ID, setFixedDimensions, setRelativePosition, TaskQueue, - tracker, } from "@dflex/utils"; +import DFlexDOMManager from "./DFlexDOMManager"; +import { getElmDOMOrThrow, assignElementID } from "./utils"; type DeepRequired = { [K in keyof T]-?: T[K] extends object @@ -81,8 +81,6 @@ export type DFlexGlobalConfig = { removeContainerWhenEmpty: boolean; }; -type GetElmWithDOMOutput = [DFlexElement, HTMLElement]; - type BranchComposedCallBackFunction = ( // eslint-disable-next-line no-unused-vars childrenSK: string, @@ -94,28 +92,6 @@ type BranchComposedCallBackFunction = ( type HighestContainerComposedCallBack = () => void; -function getElmDOMOrThrow(id: string): HTMLElement | null { - let DOM = document.getElementById(id); - - if (!DOM) { - if (__DEV__) { - throw new Error( - `Element with ID: ${id} is not found.This could be due wrong ID or missing DOM element.`, - ); - } - } - - if (!DOM || DOM.nodeType !== Node.ELEMENT_NODE) { - if (__DEV__) { - throw new Error(`Invalid HTMLElement ${DOM} is passed to registry.`); - } - - DOM = null; - } - - return DOM; -} - /** * Does the element share the same parent with the previous element in the same depth? * @@ -241,17 +217,6 @@ function submitToRegistry( return keys; } -function assignElementId(DOM: HTMLElement) { - let { id } = DOM; - - if (!id) { - id = tracker.newTravel(PREFIX_TRACKER_ID); - DOM.id = id; - } - - return id; -} - function submitContainerChildren( parentDOM: HTMLElement, depth: number, @@ -265,7 +230,7 @@ function submitContainerChildren( parentDOM.childNodes.forEach((DOM, i) => { if (DOM instanceof HTMLElement) { - const id = assignElementId(DOM); + const id = assignElementID(DOM); if (!store.registry.has(id)) { const elm: RegisterInputProcessed = { @@ -299,13 +264,9 @@ const REGISTER_Q = "registerQ"; const CB_Q = "submitQ"; -class DFlexBaseStore { +class DFlexBaseStore extends DFlexDOMManager { globals: DFlexGlobalConfig; - registry: Map; - - interactiveDOM: Map; - DOMGen: Generator; private _lastDOMParent: HTMLElement | null; @@ -313,13 +274,13 @@ class DFlexBaseStore { private _taskQ: TaskQueue; constructor() { + super(); + this.globals = { removeContainerWhenEmpty: false, }; this._lastDOMParent = null; this._taskQ = new TaskQueue(); - this.registry = new Map(); - this.interactiveDOM = new Map(); this.DOMGen = new Generator(); } @@ -391,7 +352,7 @@ class DFlexBaseStore { } const getParentElmCallback = (parentDOM: HTMLElement) => { - const parentID = assignElementId(parentDOM); + const parentID = assignElementID(parentDOM); const isParentRegistered = this.registry.has(parentID); @@ -572,35 +533,6 @@ class DFlexBaseStore { getParentElm(DOM, getParentElmCallback); } - /** - * Gets DFlex element from the store along with its DOM element. - * - * @param id - * @returns - */ - getElmWithDOM(id: string): GetElmWithDOMOutput { - // if (__DEV__) { - // if (!(this.registry.has(id) && this.interactiveDOM.has(id))) { - // throw new Error(`getElmWithDOM: Unable to find element with ID: ${id}`); - // } - // } - - const dflexElm = this.registry.get(id)!; - const DOM = this.interactiveDOM.get(id)!; - - return [dflexElm, DOM]; - } - - /** - * True when the element is registered. - * - * @param id - * @returns - */ - has(id: string): boolean { - return this.interactiveDOM.has(id) && this.registry.has(id); - } - /** * Gets all element IDs Siblings in given node represented by sibling key. * @@ -631,14 +563,8 @@ class DFlexBaseStore { this.DOMGen.mutateSiblings(SK, newSiblings); } - /** - * Removes an element from the store. - * - * @param id - element id. - */ unregister(id: string): void { - this.registry.delete(id); - this.interactiveDOM.delete(id); + this.dispose(id); } /** @@ -647,11 +573,11 @@ class DFlexBaseStore { */ destroy(): void { this.DOMGen.clear(); - this.interactiveDOM.clear(); - this.registry.clear(); this._taskQ.clear(); this._lastDOMParent = null; + super.destroy(); + if (__DEV__) { // eslint-disable-next-line no-console console.info("DFlexBaseStore destroyed."); diff --git a/packages/dflex-store/src/DFlexDOMManager.ts b/packages/dflex-store/src/DFlexDOMManager.ts new file mode 100644 index 000000000..2395283d7 --- /dev/null +++ b/packages/dflex-store/src/DFlexDOMManager.ts @@ -0,0 +1,88 @@ +import { DFlexElement } from "@dflex/core-instance"; + +/** + * DFlexDOMManager manages the elements registered in the DFlex framework. + */ +class DFlexDOMManager { + /** + * Map to store DFlex elements by their unique IDs. + */ + registry: Map; + + /** + * Map to associate DFlex element IDs with their corresponding DOM elements. + */ + interactiveDOM: Map; + + /** + * Set to track deleted DOM elements weakly. + */ + deletedDOM: WeakSet; + + /** + * Constructs a new DFlexDOMManager instance. + */ + constructor() { + this.registry = new Map(); + this.interactiveDOM = new Map(); + this.deletedDOM = new WeakSet(); + } + + /** + * Retrieves the DFlex element and its associated DOM element by ID. + * @param id - The unique ID of the DFlex element. + * @param {boolean} [shouldThrowIfNotFound=true] - Whether to throw an error if the element is not found. + * @returns A tuple containing the DFlex element and its corresponding DOM element. + */ + getElmWithDOM( + id: string, + shouldThrowIfNotFound: boolean = true, + ): [DFlexElement, HTMLElement] { + if (__DEV__) { + if ( + shouldThrowIfNotFound && + !(this.registry.has(id) && this.interactiveDOM.has(id)) + ) { + throw new Error(`getElmWithDOM: Unable to find element with ID: ${id}`); + } + } + + const dflexElm = this.registry.get(id)!; + const DOM = this.interactiveDOM.get(id)!; + + return [dflexElm, DOM]; + } + + /** + * Checks if an element with a given ID is registered. + * @param id - The unique ID of the DFlex element. + * @returns `true` if the element is registered, otherwise `false`. + */ + has(id: string): boolean { + return this.interactiveDOM.has(id) && this.registry.has(id); + } + + /** + * Removes a DFlex element and its associated DOM element from the registry. + * @param id - The unique ID of the DFlex element. + */ + dispose(id: string): void { + this.registry.delete(id); + this.interactiveDOM.delete(id); + } + + /** + * Destroys the DFlexDOMManager by clearing all stored elements and associated data. + */ + destroy(): void { + this.interactiveDOM.clear(); + this.registry.clear(); + + if (__DEV__) { + // eslint-disable-next-line no-console + console.info("DFlexDOMManager destroyed."); + } + } +} + +export default DFlexDOMManager; diff --git a/packages/dflex-store/src/utils.ts b/packages/dflex-store/src/utils.ts new file mode 100644 index 000000000..2de54b55b --- /dev/null +++ b/packages/dflex-store/src/utils.ts @@ -0,0 +1,49 @@ +import { tracker, PREFIX_TRACKER_ID } from "@dflex/utils"; + +/** + * Assigns an element ID to an HTMLElement if it doesn't already have one. + * + * @param DOM - The HTMLElement to assign an ID to. + * @returns The assigned or existing ID of the element. + */ +function assignElementID(DOM: HTMLElement): string { + let { id } = DOM; + + if (!id) { + id = tracker.newTravel(PREFIX_TRACKER_ID); + DOM.id = id; + } + + return id; +} + +/** + * Retrieves an HTMLElement by its ID or throws an error if not found. + * + * @param id - The ID of the element to retrieve. + * @returns The HTMLElement with the specified ID, or null if not found. + * @throws Error - If the element is not found or is not a valid HTMLElement. + */ +function getElmDOMOrThrow(id: string): HTMLElement | null { + let DOM = document.getElementById(id); + + if (!DOM) { + if (__DEV__) { + throw new Error( + `Element with ID: ${id} is not found.This could be due wrong ID or missing DOM element.`, + ); + } + } + + if (!DOM || DOM.nodeType !== Node.ELEMENT_NODE) { + if (__DEV__) { + throw new Error(`Invalid HTMLElement ${DOM} is passed to registry.`); + } + + DOM = null; + } + + return DOM; +} + +export { assignElementID, getElmDOMOrThrow }; From 89db7233cd522fe56b1ccb56c736f8182c5a869e Mon Sep 17 00:00:00 2001 From: Jalal Date: Sat, 9 Sep 2023 17:09:25 +0300 Subject: [PATCH 3/6] Prevent Shifting After Reconciliation and Prior to Indicator Reset (#697) --- .../src/LayoutManager/DFlexDOMReconciler.ts | 84 ++++++++++++------- .../src/LayoutManager/DFlexDnDStore.ts | 4 +- .../src/Mutation/DFlexIDGarbageCollector.ts | 2 +- 3 files changed, 59 insertions(+), 31 deletions(-) diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts index 52da262c4..84977bcc5 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts @@ -60,25 +60,33 @@ function setElmGridAndAssertPosition( }, 0); } +type ScrollPosTuple = [number, number]; + function switchElmDOMPosition( branchIDs: Readonly, branchDOM: HTMLElement, store: DFlexDnDStore, + scrollTuple: ScrollPosTuple, dflexElm: DFlexElement, elmDOM: HTMLElement, ) { - const VDOMIndex = dflexElm.VDOMOrder.self; - const DOMIndex = dflexElm.DOMOrder.self; + const { self: VDOMIndex } = dflexElm.VDOMOrder; + const { self: DOMIndex } = dflexElm.DOMOrder; + + const isLatElm = VDOMIndex + 1 === branchIDs.length; - // Is it the last element? - if (VDOMIndex + 1 === branchIDs.length) { + if (isLatElm) { branchDOM.appendChild(elmDOM); } else { - const PevElmDOM = store.interactiveDOM.get(branchIDs[VDOMIndex + 1])!; + const PevDOMElm = store.interactiveDOM.get(branchIDs[VDOMIndex + 1])!; - branchDOM.insertBefore(elmDOM, PevElmDOM); + branchDOM.insertBefore(elmDOM, PevDOMElm); } + const [scrollTop, scrollLeft] = scrollTuple; + + dflexElm.refreshIndicators(elmDOM, scrollTop, scrollLeft); + const shiftDirection = VDOMIndex > DOMIndex ? 1 : -1; for (let i = VDOMIndex - 1; i >= DOMIndex; i -= 1) { @@ -90,31 +98,45 @@ function switchElmDOMPosition( dflexElm.DOMOrder.self = VDOMIndex; } -let reconciledElmQueue: [DFlexElement, HTMLElement][] = []; - function commitElm( branchIDs: Readonly, branchDOM: HTMLElement, store: DFlexDnDStore, elmID: string, + reconciledElmQueue: [DFlexElement, HTMLElement][], + scrollTuple: ScrollPosTuple, ): void { - const [dflexElm, elmDOM] = store.getElmWithDOM(elmID); + const elmWithDOm = store.getElmWithDOM(elmID); - if (dflexElm.hasTransformedFromOrigin()) { - if ( + const [dflexElm, elmDOM] = elmWithDOm; + + const hasTransformedFromOrigin = dflexElm.hasTransformedFromOrigin(); + + if (hasTransformedFromOrigin) { + const needsReconciliation = dflexElm.needDOMReconciliation() || // Until the element owns its transformation between containers history we // can't rely only on the local indicators as it only reflects the // elements movement inside the origin container. - store.migration.filter([dflexElm.id], false) - ) { - switchElmDOMPosition(branchIDs, branchDOM, store, dflexElm, elmDOM); + store.migration.filter([dflexElm.id], false); + + if (needsReconciliation) { + switchElmDOMPosition( + branchIDs, + branchDOM, + store, + scrollTuple, + dflexElm, + elmDOM, + ); } - reconciledElmQueue.push([dflexElm, elmDOM]); + reconciledElmQueue.push(elmWithDOm); } } +type ReconciledElementTuple = [DFlexElement, HTMLElement]; + /** * * @param branchIDs @@ -132,22 +154,32 @@ function DFlexDOMReconciler( container: DFlexParentContainer, scroll: DFlexScrollContainer, refreshAllBranchElements: boolean, -): void { +): ReconciledElementTuple[] { + const reconciledElmQueue: ReconciledElementTuple[] = []; + + const { + totalScrollRect: { left, top }, + } = scroll; + + const scrollTuple: ScrollPosTuple = [top, left]; + container.resetIndicators(branchIDs.length); for (let i = branchIDs.length - 1; i >= 0; i -= 1) { - commitElm(branchIDs, branchDOM, store, branchIDs[i]); + commitElm( + branchIDs, + branchDOM, + store, + branchIDs[i], + reconciledElmQueue, + scrollTuple, + ); } let isUpdateElmGrid = true; - const { - totalScrollRect: { left, top }, - } = scroll; - if (refreshAllBranchElements) { isUpdateElmGrid = false; - reconciledElmQueue = []; for (let i = 0; i <= branchIDs.length - 1; i += 1) { const [dflexElm, elmDOM] = store.getElmWithDOM(branchIDs[i]); @@ -167,12 +199,6 @@ function DFlexDOMReconciler( store.setElmGridBridge(container, dflexElm); } } - } else { - while (reconciledElmQueue.length) { - const [dflexElm, elmDOM] = reconciledElmQueue.pop()!; - - dflexElm.refreshIndicators(elmDOM, left, top); - } } if (isUpdateElmGrid) { @@ -193,6 +219,8 @@ function DFlexDOMReconciler( } } } + + return reconciledElmQueue; } export default DFlexDOMReconciler; diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts index 745fb4e5c..4fcbb58fe 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts @@ -42,7 +42,7 @@ import { TerminatedDOMiDs, } from "../Mutation"; -import DOMReconciler from "./DFlexDOMReconciler"; +import DFlexDOMReconciler from "./DFlexDOMReconciler"; import DFlexIDGarbageCollector from "../Mutation/DFlexIDGarbageCollector"; type Containers = Map; @@ -641,7 +641,7 @@ class DFlexDnDStore extends DFlexBaseStore { } } - DOMReconciler( + DFlexDOMReconciler( branch, parentDOM, this, diff --git a/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts b/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts index 25ea2be87..ff7ae424a 100644 --- a/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts +++ b/packages/dflex-dnd/src/Mutation/DFlexIDGarbageCollector.ts @@ -62,7 +62,7 @@ function DFlexIDGarbageCollector( const SKeys = new Map(); terminatedDOMiDs.forEach((id) => { - const [dflexElm, DOM] = store.getElmWithDOM(id); + const [dflexElm, DOM] = store.getElmWithDOM(id, false); // hasAlreadyBeenRemoved if (!DOM || !dflexElm) { From dcc17d2836c727bf444fd4d4253140fc02ed21c9 Mon Sep 17 00:00:00 2001 From: Jalal Date: Mon, 11 Sep 2023 22:14:49 +0300 Subject: [PATCH 4/6] Resolve Latency Issue in Element Reconciliation and Bounding Rect Retrieval (#698) --- .../src/Element/DFlexCoreElement.ts | 26 ++- .../tests/features/resizeWindow.spec.ts | 12 +- .../strict.horizontal.spec.ts | 19 +- .../dflex-dnd/src/Draggable/DraggableAxes.ts | 1 + .../src/LayoutManager/DFlexDOMReconciler.ts | 211 +++++------------ .../LayoutManager/DFlexDnDExportedStore.ts | 2 +- .../src/LayoutManager/DFlexDnDStore.ts | 216 +++++++++--------- .../src/Mechanism/DFlexMechanismController.ts | 1 + .../dflex-utils/src/DFlexCycle/DFlexCycle.ts | 98 ++++++-- packages/dflex-utils/src/FeatureFlags.ts | 2 + packages/dflex-utils/src/collections/index.ts | 2 +- packages/dflex-utils/src/collections/utils.ts | 8 +- packages/dflex-utils/src/index.ts | 1 + playwright.config.ts | 15 +- 14 files changed, 315 insertions(+), 299 deletions(-) diff --git a/packages/dflex-core-instance/src/Element/DFlexCoreElement.ts b/packages/dflex-core-instance/src/Element/DFlexCoreElement.ts index e53172687..ecb09232d 100644 --- a/packages/dflex-core-instance/src/Element/DFlexCoreElement.ts +++ b/packages/dflex-core-instance/src/Element/DFlexCoreElement.ts @@ -217,8 +217,19 @@ function removeCSS(DOM: HTMLElement, css: CSS): void { const TRANSITION_EVENT = "transitionend"; class DFlexCoreElement extends DFlexBaseElement { + /** + * The initial position of the element before any transformations. This value + * is not updated during regular operations, only when the element undergoes + * reconciliation. + */ private _initialPosition: PointNum; + /** + * The bounding box rectangle representing the element's position and + * dimensions. + * This value is updated with each transformation, ensuring it reflects the + * current state, even if the element is not yet reconciled. + */ rect: BoxRect; private _computedDimensions: PointNum | null; @@ -743,11 +754,7 @@ class DFlexCoreElement extends DFlexBaseElement { return this.VDOMOrder.self !== this.DOMOrder.self; } - refreshIndicators( - DOM: HTMLElement, - scrollTop: number, - scrollLeft: number, - ): void { + refreshIndicators(DOM: HTMLElement): void { this._translateHistory = undefined; this.translate.setAxes(0, 0); @@ -760,9 +767,14 @@ class DFlexCoreElement extends DFlexBaseElement { rmEmptyAttr(DOM, "style"); - this.initElmRect(DOM, scrollTop, scrollLeft); - this.DOMGrid.setAxes(0, 0); + + if (__DEV__) { + if (featureFlags.enableReconcileDebugger) { + // eslint-disable-next-line no-console + console.log(`${this.id} indicators has been refreshed`); + } + } } getSerializedInstance(): DFlexSerializedElement { diff --git a/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts b/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts index d02be4135..c6b539b1a 100644 --- a/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts +++ b/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts @@ -109,7 +109,7 @@ test.describe page.setViewportSize({ width: 640, height: 800 }); - await assertConsoleMsg(["c3-1"]); + await assertConsoleMsg(["c2-1", "c2-2", "c3-2", "c2-3", "c2-4", "c2-5"]); }); test("Siblings have the correct order in destination container(C2) including the new merged element (#c3-2)", async () => { @@ -155,7 +155,15 @@ test.describe test("Restore the viewport window triggers reconciliation", async () => { page.setViewportSize(originalViewport); - await assertConsoleMsg([]); + await assertConsoleMsg([ + "c3-1", + "c2-1", + "c2-2", + "c3-2", + "c2-3", + "c2-4", + "c2-5", + ]); }); test("Siblings have the correct order in destination container(C2) including the new merged element (#c3-1)", async () => { diff --git a/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts b/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts index 7120df84e..5683ce541 100644 --- a/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts +++ b/packages/dflex-dnd-playground/tests/multiple-containers/strict.horizontal.spec.ts @@ -99,7 +99,14 @@ test.describe }); test("Trigger key `c` to commit the transformed elements and read the emitted message for mutation caused by (#c3-2)", async () => { - await invokeKeyboardAndAssertEmittedMsg(["c3-1"]); + await invokeKeyboardAndAssertEmittedMsg([ + "c2-1", + "c2-2", + "c3-2", + "c2-3", + "c2-4", + "c2-5", + ]); }); test("Siblings have the correct order in destination container(C2) including the new merged element (#c3-2)", async () => { @@ -144,7 +151,15 @@ test.describe test("Trigger key `c` to commit the transformed elements and read the emitted message for mutation caused by (#c3-1)", async () => { // All elements have been merged into different container. - await invokeKeyboardAndAssertEmittedMsg([]); + await invokeKeyboardAndAssertEmittedMsg([ + "c3-1", + "c2-1", + "c2-2", + "c3-2", + "c2-3", + "c2-4", + "c2-5", + ]); }); test("Siblings have the correct order in destination container(C2) including the new merged element (#c3-1)", async () => { diff --git a/packages/dflex-dnd/src/Draggable/DraggableAxes.ts b/packages/dflex-dnd/src/Draggable/DraggableAxes.ts index 917dc158b..e7599d815 100644 --- a/packages/dflex-dnd/src/Draggable/DraggableAxes.ts +++ b/packages/dflex-dnd/src/Draggable/DraggableAxes.ts @@ -154,6 +154,7 @@ class DraggableAxes extends DFlexBaseDraggable { VDOMOrder.self, this.draggedElm.id, SK, + false, cycleID, // TODO: refactor this to use if the dragged belongs to scroll container or not. false, diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts index 84977bcc5..3712b835c 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDOMReconciler.ts @@ -1,72 +1,13 @@ /* eslint-disable no-console */ -import type { - DFlexElement, - DFlexParentContainer, - DFlexScrollContainer, -} from "@dflex/core-instance"; +import type { DFlexElement } from "@dflex/core-instance"; import type { Siblings } from "@dflex/dom-gen"; -import { assertElmPos, featureFlags } from "@dflex/utils"; +import { featureFlags } from "@dflex/utils"; import type DFlexDnDStore from "./DFlexDnDStore"; -let didThrowError = false; - -function setElmGridAndAssertPosition( - elmID: string, - dflexElm: DFlexElement, - elmIndex: number, - containerDOM: HTMLElement, - store: DFlexDnDStore, - container: DFlexParentContainer, -) { - store.setElmGridBridge(container, dflexElm); - - setTimeout(() => { - if (didThrowError) { - return; - } - - if ( - elmIndex !== dflexElm.DOMOrder.self || - dflexElm.DOMOrder.self !== dflexElm.VDOMOrder.self - ) { - didThrowError = true; - - console.error( - `Error in DOM order reconciliation.\n id: ${dflexElm.id}. Expected DOM order: ${dflexElm.DOMOrder.self} to match VDOM order: ${dflexElm.VDOMOrder.self}`, - ); - } - - if ( - !containerDOM.children[elmIndex].isSameNode( - store.interactiveDOM.get(elmID)!, - ) - ) { - didThrowError = true; - - console.error( - "Error in DOM order reconciliation at Index: ", - elmIndex, - "Container: ", - containerDOM, - ); - console.error("Actually DOM tree has: ", containerDOM.children[elmIndex]); - console.error("While DFlex Store has: ", store.interactiveDOM.get(elmID)); - } - - // dflexElm._initIndicators(store.interactiveDOM.get(elmID)!); - if (featureFlags.enablePositionAssertion) { - assertElmPos(store.interactiveDOM.get(elmID)!, dflexElm.rect); - } - }, 0); -} - -type ScrollPosTuple = [number, number]; - function switchElmDOMPosition( branchIDs: Readonly, branchDOM: HTMLElement, store: DFlexDnDStore, - scrollTuple: ScrollPosTuple, dflexElm: DFlexElement, elmDOM: HTMLElement, ) { @@ -83,10 +24,6 @@ function switchElmDOMPosition( branchDOM.insertBefore(elmDOM, PevDOMElm); } - const [scrollTop, scrollLeft] = scrollTuple; - - dflexElm.refreshIndicators(elmDOM, scrollTop, scrollLeft); - const shiftDirection = VDOMIndex > DOMIndex ? 1 : -1; for (let i = VDOMIndex - 1; i >= DOMIndex; i -= 1) { @@ -96,6 +33,12 @@ function switchElmDOMPosition( } dflexElm.DOMOrder.self = VDOMIndex; + + if (__DEV__) { + if (featureFlags.enableReconcileDebugger) { + console.log(`${dflexElm.id} is reconciled`); + } + } } function commitElm( @@ -103,124 +46,74 @@ function commitElm( branchDOM: HTMLElement, store: DFlexDnDStore, elmID: string, - reconciledElmQueue: [DFlexElement, HTMLElement][], - scrollTuple: ScrollPosTuple, -): void { +): boolean { const elmWithDOm = store.getElmWithDOM(elmID); const [dflexElm, elmDOM] = elmWithDOm; - const hasTransformedFromOrigin = dflexElm.hasTransformedFromOrigin(); - - if (hasTransformedFromOrigin) { - const needsReconciliation = - dflexElm.needDOMReconciliation() || - // Until the element owns its transformation between containers history we - // can't rely only on the local indicators as it only reflects the - // elements movement inside the origin container. - store.migration.filter([dflexElm.id], false); - - if (needsReconciliation) { - switchElmDOMPosition( - branchIDs, - branchDOM, - store, - scrollTuple, - dflexElm, - elmDOM, - ); + const needsReconciliation = dflexElm.hasTransformedFromOrigin(); + + if (needsReconciliation) { + if (__DEV__) { + if (featureFlags.enableReconcileDebugger) { + console.log(`${dflexElm.id} requires reconciliation.`); + } } - reconciledElmQueue.push(elmWithDOm); + switchElmDOMPosition(branchIDs, branchDOM, store, dflexElm, elmDOM); + + dflexElm.refreshIndicators(elmDOM); + + return true; } + + if (__DEV__) { + if (featureFlags.enableReconcileDebugger) { + console.log(`Ignoring: ${dflexElm.id}`); + } + } + + return false; } -type ReconciledElementTuple = [DFlexElement, HTMLElement]; +type ReconciledElementIDs = Set; /** + * Reconciles the DOM elements in a sibling group. * - * @param branchIDs - * @param branchDOM - * @param store - * @param container - * @param refreshAllBranchElements - When true, all element in the reconciled - * brach will update their Rect regardless of their transformation status. - * @returns + * @param siblingIDs - An array of IDs representing the elements in the sibling group. + * @param containerDOM - The DOM element of the sibling group container. + * @param store - The DFlexDnDStore instance. + * @param cb - The callback function. + * @returns An array of tuples containing the reconciled elements and their corresponding DOM elements. */ function DFlexDOMReconciler( - branchIDs: Readonly, - branchDOM: HTMLElement, + siblingsIDs: Readonly, + containerDOM: HTMLElement, + SK: string, store: DFlexDnDStore, - container: DFlexParentContainer, - scroll: DFlexScrollContainer, - refreshAllBranchElements: boolean, -): ReconciledElementTuple[] { - const reconciledElmQueue: ReconciledElementTuple[] = []; - - const { - totalScrollRect: { left, top }, - } = scroll; - - const scrollTuple: ScrollPosTuple = [top, left]; - - container.resetIndicators(branchIDs.length); - - for (let i = branchIDs.length - 1; i >= 0; i -= 1) { - commitElm( - branchIDs, - branchDOM, - store, - branchIDs[i], - reconciledElmQueue, - scrollTuple, - ); - } - - let isUpdateElmGrid = true; - - if (refreshAllBranchElements) { - isUpdateElmGrid = false; +): void { + const reconciledElementIDs: ReconciledElementIDs = new Set(); - for (let i = 0; i <= branchIDs.length - 1; i += 1) { - const [dflexElm, elmDOM] = store.getElmWithDOM(branchIDs[i]); + for (let i = siblingsIDs.length - 1; i >= 0; i -= 1) { + const elmID = siblingsIDs[i]; - dflexElm.refreshIndicators(elmDOM, left, top); + const hasReconciled = commitElm(siblingsIDs, containerDOM, store, elmID); - if (__DEV__) { - setElmGridAndAssertPosition( - branchIDs[i], - dflexElm, - i, - branchDOM, - store, - container, - ); - } else { - store.setElmGridBridge(container, dflexElm); - } + if (hasReconciled) { + reconciledElementIDs.add(elmID); } } - if (isUpdateElmGrid) { - for (let i = 0; i <= branchIDs.length - 1; i += 1) { - const dflexElm = store.registry.get(branchIDs[i])!; - - if (__DEV__) { - setElmGridAndAssertPosition( - branchIDs[i], - dflexElm, - i, - branchDOM, - store, - container, - ); - } else { - store.setElmGridBridge(container, dflexElm); + store.migration.updateReconciledIDs(SK, reconciledElementIDs); + + if (__DEV__) { + if (featureFlags.enableReconcileDebugger) { + if (reconciledElementIDs.size === 0) { + console.warn("Elements are in their positions. Nothing to commit"); } } } - - return reconciledElmQueue; } export default DFlexDOMReconciler; diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDnDExportedStore.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDnDExportedStore.ts index cac090783..e459a6541 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDnDExportedStore.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDnDExportedStore.ts @@ -90,7 +90,7 @@ class DFlexDnDExportedStore { * Commits any pending changes to the DFlex instance. */ commit(): void { - this._base.commit(null); + this._base.commit(); } /** diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts index 4fcbb58fe..63598e571 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts @@ -61,6 +61,11 @@ type UpdatesQueue = [ type Deferred = (() => void)[]; +/** + * Represents the scroll position as a tuple of **left** and **top** coordinates. + */ +type ScrollPosTuple = [number, number]; + function validateCSS(id: string, css?: CSS): void { if (css !== undefined && typeof css !== "string" && typeof css !== "object") { throw new Error( @@ -157,8 +162,6 @@ class DFlexDnDStore extends DFlexBaseStore { private _isInitialized: boolean; - private _refreshAllElmBranchWhileReconcile?: boolean; - private _resizeThrottle: TimeoutFunction; constructor() { @@ -212,7 +215,7 @@ class DFlexDnDStore extends DFlexBaseStore { }); } - setElmGridBridge( + linkElmToContainerGrid( container: DFlexParentContainer, dflexElm: DFlexElement, ): void { @@ -225,26 +228,37 @@ class DFlexDnDStore extends DFlexBaseStore { this.unifiedContainerDimensions[dflexElm.depth], ); + if (__DEV__) { + if (featureFlags.enableReconcileDebugger) { + // eslint-disable-next-line no-console + console.log(`${dflexElm.id} grid is`, JSON.stringify(gridIndex)); + } + } + dflexElm.DOMGrid.clone(gridIndex); } - private _resumeAndInitElmGrid( + private _syncSiblingElmRectsWithGrid( + siblingsIDs: readonly string[], container: DFlexParentContainer, - scroll: DFlexScrollContainer, - id: string, - ): void { - const [dflexElm, DOM] = this.getElmWithDOM(id); + scrollTuple: ScrollPosTuple, + ) { + container.resetIndicators(siblingsIDs.length); - const { - totalScrollRect: { left, top }, - } = scroll; + for (let i = 0; i <= siblingsIDs.length - 1; i += 1) { + const elmID = siblingsIDs[i]; - dflexElm.initElmRect(DOM, left, top); + const [dflexElm, DOM] = this.getElmWithDOM(elmID); - this.setElmGridBridge(container, dflexElm); + const [scrollLeft, scrollTop] = scrollTuple; - if (__DEV__) { - updateElmDatasetGrid(DOM, dflexElm.DOMGrid); + dflexElm.initElmRect(DOM, scrollLeft, scrollTop); + + this.linkElmToContainerGrid(container, dflexElm); + + if (__DEV__) { + updateElmDatasetGrid(DOM, dflexElm.DOMGrid); + } } } @@ -325,13 +339,13 @@ class DFlexDnDStore extends DFlexBaseStore { this.containers.set(SK, container); - const initElmGrid = this._resumeAndInitElmGrid.bind( - this, - container, - scroll, - ); + const { + totalScrollRect: { left, top }, + } = scroll; + + const scrollTuple: ScrollPosTuple = [left, top]; - siblings.forEach(initElmGrid); + this._syncSiblingElmRectsWithGrid(siblings, container, scrollTuple); updateSiblingsVisibilityLinearly(this, SK); } @@ -518,41 +532,29 @@ class DFlexDnDStore extends DFlexBaseStore { }, true); } - private _updateContainerRect( - container: DFlexParentContainer, - containerKy: string, - siblings: string[], - ) { - const scroll = this.scrolls.get(containerKy)!; - - const { - totalScrollRect: { left, top }, - } = scroll; - - container.resetIndicators(siblings.length); + private _refreshBranchesRect() { + this.containers.forEach((container, SK) => { + const hasContainerMigrated = this.migration.getMigrationBySK(SK); - siblings.forEach((elmID) => { - const [dflexElm, elmDOM] = this.getElmWithDOM(elmID); + // Ig migrated then the reconciler will trigger `_syncSiblingElmRectsWithGrid`. + if (!hasContainerMigrated) { + const scroll = this.scrolls.get(SK)!; + const siblings = this.getElmSiblingsByKey(SK); - dflexElm.initElmRect(elmDOM, left, top); + const { + totalScrollRect: { left, top }, + } = scroll; - container.register( - dflexElm.rect, - this.unifiedContainerDimensions[dflexElm.depth], - ); - }); - } - - private _refreshBranchesRect(excludeMigratedContainers: boolean) { - this.containers.forEach((container, containerKy) => { - const shouldExcludeContainer = - excludeMigratedContainers && - this.migration.containerKeys.has(containerKy); - - if (!shouldExcludeContainer) { - const siblings = this.getElmSiblingsByKey(containerKy); + const scrollTuple: ScrollPosTuple = [left, top]; - this._updateContainerRect(container, containerKy, siblings); + this._syncSiblingElmRectsWithGrid(siblings, container, scrollTuple); + } else if (__DEV__) { + if (featureFlags.enableReconcileDebugger) { + // eslint-disable-next-line no-console + console.log( + `Container ${SK} is being passed for synchronization during reconciliation.`, + ); + } } }); } @@ -565,6 +567,20 @@ class DFlexDnDStore extends DFlexBaseStore { }); } + private _isEmptyMigration() { + const isEmptyMigration = + this.migration === null || this.migration.SKs.length === 0; + + if (isEmptyMigration) { + if (__DEV__) { + // eslint-disable-next-line no-console + console.warn("Migration is empty. Nothing to commit."); + } + } + + return isEmptyMigration; + } + private _windowResizeHandler() { this._forEachContainerDOM((DOM) => { removeStyleProperty(DOM, "width"); @@ -581,22 +597,19 @@ class DFlexDnDStore extends DFlexBaseStore { this._resizeThrottle(throttleCB, true); - this._refreshAllElmBranchWhileReconcile = true; - - if (this.migration === null || this.migration.containerKeys.size === 0) { - this._refreshBranchesRect(false); + if (this._isEmptyMigration()) { + this._refreshBranchesRect(); return; } - // Reconcile then update Rects. - this.commit(() => this._refreshBranchesRect(true)); + const commitCB = () => this._refreshBranchesRect(); + + // Reconcile then update the rest of Rects. + this._commitChangesToDOM(commitCB); } - private _reconcileBranch( - SK: string, - refreshAllBranchElements: boolean, - ): void { + private _reconcileSiblings(SK: string): void { const container = this.containers.get(SK)!; const scroll = this.scrolls.get(SK)!; @@ -612,12 +625,17 @@ class DFlexDnDStore extends DFlexBaseStore { } } - const branch = this.getElmSiblingsByKey(SK); + const siblings = this.getElmSiblingsByKey(SK); - if (__DEV__) { - if (branch.length === 0) { - throw new Error(`No sibling elements found for SK: ${SK}`); + if (siblings.length === 0) { + if (__DEV__) { + // eslint-disable-next-line no-console + console.warn( + `No sibling elements found for SK: ${SK}. Nothing to reconcile.`, + ); } + + return; } const parentDOM = this.interactiveDOM.get(container.id)!; @@ -630,44 +648,35 @@ class DFlexDnDStore extends DFlexBaseStore { } } + const { + totalScrollRect: { left, top }, + } = scroll; + + const scrollTuple: ScrollPosTuple = [left, top]; + scheduler( this, () => { - if (__DEV__) { - if (!parentDOM) { - throw new Error( - `Unable to commit: No DOM found for ${container.id}`, - ); - } - } - - DFlexDOMReconciler( - branch, - parentDOM, - this, - container, - scroll, - refreshAllBranchElements, - ); + DFlexDOMReconciler(siblings, parentDOM, SK, this); + }, + { + onUpdate: () => { + this._syncSiblingElmRectsWithGrid(siblings, container, scrollTuple); + }, }, - null, { type: "mutation", status: "committed", payload: { target: parentDOM, - ids: branch, + ids: siblings, }, }, ); } - /** - * - * @returns - */ - commit(callback: (() => void) | null = null): void { - if (this.migration === null || this.migration.containerKeys.size === 0) { + private _commitChangesToDOM(callback: (() => void) | null = null): void { + if (this._isEmptyMigration()) { if (__DEV__) { // eslint-disable-next-line no-console console.warn("Migration is empty. Nothing to commit."); @@ -678,12 +687,6 @@ class DFlexDnDStore extends DFlexBaseStore { this.isComposing = true; - const refreshAllBranchElements = - this._refreshAllElmBranchWhileReconcile === undefined - ? // If more than one container involved reset all. - this.migration.containerKeys.size > 1 - : this._refreshAllElmBranchWhileReconcile; - if (__DEV__) { if (featureFlags.enableCommit) { if (this.migration === null) { @@ -695,14 +698,14 @@ class DFlexDnDStore extends DFlexBaseStore { console.warn("Executing commit for zero depth layer."); this.getSiblingKeysByDepth(0).forEach((k) => - this._reconcileBranch(k, refreshAllBranchElements), + this._reconcileSiblings(k), ); return; } - this.migration.containerKeys.forEach((k) => { - this._reconcileBranch(k, refreshAllBranchElements); + this.migration.SKs.forEach((k) => { + this._reconcileSiblings(k); }); return; @@ -711,8 +714,8 @@ class DFlexDnDStore extends DFlexBaseStore { disconnectObservers(this); - this.migration.containerKeys.forEach((k) => { - this._reconcileBranch(k, refreshAllBranchElements); + this.migration.SKs.forEach((k) => { + this._reconcileSiblings(k); }); scheduler(this, callback, { @@ -722,12 +725,15 @@ class DFlexDnDStore extends DFlexBaseStore { this.migration.clear(); - this._refreshAllElmBranchWhileReconcile = undefined; this.isComposing = false; }, }); } + commit(callback?: () => void): void { + this._commitChangesToDOM(callback); + } + getSerializedElm(id: string): DFlexSerializedElement | null { if (__DEV__) { if (!this.registry.has(id)) { @@ -798,12 +804,6 @@ class DFlexDnDStore extends DFlexBaseStore { return [parentID, parentDOM]; } - // deleteElm(id: string, BK: string): void { - // this.DOMGen.removeIDFromBranch(id, BK); - - // super.unregister(id); - // } - deleteSiblings(SK: string, BK: string, depth: number): void { const scroll = this.scrolls.get(SK)!; diff --git a/packages/dflex-dnd/src/Mechanism/DFlexMechanismController.ts b/packages/dflex-dnd/src/Mechanism/DFlexMechanismController.ts index 7dee17640..1b1c0df42 100644 --- a/packages/dflex-dnd/src/Mechanism/DFlexMechanismController.ts +++ b/packages/dflex-dnd/src/Mechanism/DFlexMechanismController.ts @@ -303,6 +303,7 @@ class DFlexMechanismController extends DFlexScrollableElement { NaN, draggedElm.id, newSK, + true, cycleID, store.scrolls.get(newSK)!.hasOverflow.isOneTruthy(), ); diff --git a/packages/dflex-utils/src/DFlexCycle/DFlexCycle.ts b/packages/dflex-utils/src/DFlexCycle/DFlexCycle.ts index 4875e755a..5e6f4334c 100644 --- a/packages/dflex-utils/src/DFlexCycle/DFlexCycle.ts +++ b/packages/dflex-utils/src/DFlexCycle/DFlexCycle.ts @@ -1,5 +1,7 @@ /* eslint-disable max-classes-per-file */ +import { noopSet } from "../collections"; + class AbstractDFlexCycle { /** Transitioning element ID. */ id: string; @@ -10,6 +12,8 @@ class AbstractDFlexCycle { /** Transition siblings key. */ SK: string; + reconciledIDs: Set; + cycleID: string; hasScroll: boolean; @@ -34,6 +38,7 @@ class AbstractDFlexCycle { this.id = id; this.cycleID = cycleID; this.hasScroll = hasScroll; + this.reconciledIDs = new Set(); this.numberOfTransformedELm = 0; // TODO: Replace this with PointNum. @@ -49,7 +54,7 @@ class AbstractDFlexCycle { class DFlexCycle { private _migrations: AbstractDFlexCycle[]; - containerKeys: Set; + SKs: string[]; /** Only true when transitioning. */ isTransitioning!: boolean; @@ -61,10 +66,16 @@ class DFlexCycle { cycleID: string, hasScroll: boolean, ) { - this._migrations = [ - new AbstractDFlexCycle(index, id, SK, cycleID, hasScroll), - ]; - this.containerKeys = new Set([SK]); + const dflexCycle = new AbstractDFlexCycle( + index, + id, + SK, + cycleID, + hasScroll, + ); + + this._migrations = [dflexCycle]; + this.SKs = [SK]; this.complete(); } @@ -95,6 +106,15 @@ class DFlexCycle { : this._migrations.filter((_) => cycleIDs.find((i) => i === _.id)); } + /** + * Delete keys from the SKs array. + * + * @param keysToDelete - A set of keys to be deleted. + */ + private _deleteKeysFromSKs(keysToDelete: Set): void { + this.SKs = this.SKs.filter((key) => !keysToDelete.has(key)); + } + flush(cycleIDs: string[]): void { const removedKeys = new Set(); @@ -120,9 +140,7 @@ class DFlexCycle { return false; }); - removedKeys.forEach((ky) => { - this.containerKeys.delete(ky); - }); + this._deleteKeysFromSKs(removedKeys); } /** @@ -147,24 +165,74 @@ class DFlexCycle { } /** - * Add new migration. + * Add a new migration. * - * @param index - * @param SK - * @param cycleID - * @param hasScroll + * @param index - The index of the migration. + * @param id - The ID of the element. + * @param SK - The sibling key. + * @param isAddOperation - Indicates whether the operation is an "add" operation. + * @param cycleID - The cycle ID. + * @param hasScroll - Indicates whether the element has a scroll container. */ add( index: number, id: string, SK: string, + isAddOperation: boolean, cycleID: string, hasScroll: boolean, ): void { this._migrations.push( new AbstractDFlexCycle(index, id, SK, cycleID, hasScroll), ); - this.containerKeys.add(SK); + + // The following logic ensures that addition operations are prioritized at + // the beginning of the array, while removal operations are placed towards + // the end. This arrangement ensures that when iterating through the array, + // you start from the most recently added containers and proceed to those + // containing omitted elements. + + if (isAddOperation) { + // If it's an "add" operation, place the sibling key at the beginning of the SKs array. + this.SKs.unshift(SK); + } else { + // If it's not an "add" operation (i.e., it's a "remove" operation), + // append the sibling key to the end of the SKs array. + this.SKs.push(SK); + } + } + + updateReconciledIDs(sk: string, reconciledIDs: Set): void { + const migration = this._migrations.find((m) => m.SK === sk); + + if (migration) { + migration.reconciledIDs.clear(); + reconciledIDs.forEach((id) => migration.reconciledIDs.add(id)); + } else if (__DEV__) { + throw new Error(`Migration with SK: ${sk} not found.`); + } + } + + getMigrationBySK(sk: string): AbstractDFlexCycle | undefined { + return this._migrations.find((m) => m.SK === sk); + } + + /** + * Get reconciled IDs by sibling key (SK). + * + * @param sk - The sibling key for which to retrieve reconciled IDs. + * @returns A Set of reconciled IDs for the specified sibling key. + */ + getReconciledIDsBySK(sk: string): Set { + const migration = this._migrations.find((m) => m.SK === sk); + + if (__DEV__) { + if (!migration) { + throw new Error(`Migration with SK: ${sk} not found.`); + } + } + + return migration ? migration.reconciledIDs : noopSet; } /** @@ -186,7 +254,7 @@ class DFlexCycle { clear(): void { this._migrations = []; - this.containerKeys.clear(); + this.SKs = []; } } diff --git a/packages/dflex-utils/src/FeatureFlags.ts b/packages/dflex-utils/src/FeatureFlags.ts index 2fed58e55..304da1f8e 100644 --- a/packages/dflex-utils/src/FeatureFlags.ts +++ b/packages/dflex-utils/src/FeatureFlags.ts @@ -21,3 +21,5 @@ export const enableScrollDebugger = false; export const enableVisibilityDebugger = false; export const enableMutationDebugger = false; + +export const enableReconcileDebugger = false; diff --git a/packages/dflex-utils/src/collections/index.ts b/packages/dflex-utils/src/collections/index.ts index 291b17932..46aca3a57 100644 --- a/packages/dflex-utils/src/collections/index.ts +++ b/packages/dflex-utils/src/collections/index.ts @@ -2,7 +2,7 @@ export { default as combineKeys } from "./combineKeys"; export { default as warnOnce } from "./warnOnce"; export { default as assertElmPos } from "./assertElmPos"; export { default as getAnimationOptions } from "./getAnimationOptions"; -export { default as noop } from "./utils"; +export { noopSet, noop } from "./utils"; export { getDimensionTypeByAxis, diff --git a/packages/dflex-utils/src/collections/utils.ts b/packages/dflex-utils/src/collections/utils.ts index 938cfa5c3..e33619ca8 100644 --- a/packages/dflex-utils/src/collections/utils.ts +++ b/packages/dflex-utils/src/collections/utils.ts @@ -1,3 +1,9 @@ function noop() {} -export default noop; +const noopSet: Set = new Set(); + +if (__DEV__) { + Object.freeze(noopSet); +} + +export { noop, noopSet }; diff --git a/packages/dflex-utils/src/index.ts b/packages/dflex-utils/src/index.ts index 57a3d3726..e35cc810a 100644 --- a/packages/dflex-utils/src/index.ts +++ b/packages/dflex-utils/src/index.ts @@ -33,6 +33,7 @@ export { BOTH_AXIS } from "./types"; export { noop, + noopSet, combineKeys, warnOnce, assertElmPos, diff --git a/playwright.config.ts b/playwright.config.ts index 6e19f219e..a6bf03d52 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -2,11 +2,20 @@ import { PlaywrightTestConfig, devices } from "@playwright/test"; -const { CI } = process.env; +const { CI, PLAYGROUND_TYPE = "dflex-dnd" } = process.env; const IS_CI = CI === "true"; -const testDir = "./packages/dflex-dnd-playground/tests/"; -const baseURL = "http://localhost:3001"; +let testDir = ""; +let baseURL = ""; + +if (PLAYGROUND_TYPE === "dflex-dnd") { + testDir = "./packages/dflex-dnd-playground/tests/"; + baseURL = "http://localhost:3001"; +} else { + throw new Error( + "Invalid PLAYGROUND_TYPE. Please set PLAYGROUND_TYPE to 'dflex-dnd' for dflex-dnd playground.", + ); +} const config: PlaywrightTestConfig = { forbidOnly: IS_CI, From dc4c47acde484d17d7d3a858ad6b58ec32bf3abe Mon Sep 17 00:00:00 2001 From: Jalal Date: Tue, 12 Sep 2023 13:56:39 +0300 Subject: [PATCH 5/6] Fix Failing Test by Adding Missing Test Case (#700) * remove console fixing the test results * fix test --- .../tests/features/resizeWindow.spec.ts | 2 +- .../emptyContainer.horizontal.spec.ts | 13 ++++++++++++- .../dflex-dnd/src/LayoutManager/DFlexDnDStore.ts | 10 ++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts b/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts index c6b539b1a..54fd616ab 100644 --- a/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts +++ b/packages/dflex-dnd-playground/tests/features/resizeWindow.spec.ts @@ -107,7 +107,7 @@ test.describe test("Resize the viewport window triggers reconciliation", async () => { originalViewport = page.viewportSize()!; - page.setViewportSize({ width: 640, height: 800 }); + page.setViewportSize({ width: 700, height: 800 }); await assertConsoleMsg(["c2-1", "c2-2", "c3-2", "c2-3", "c2-4", "c2-5"]); }); diff --git a/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts b/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts index bbb46d3a7..d1c6db10f 100644 --- a/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts +++ b/packages/dflex-dnd-playground/tests/multiple-containers/emptyContainer.horizontal.spec.ts @@ -95,7 +95,14 @@ test.describe }); test("Trigger key `c` to commit the transformed elements and read the emitted message for mutation caused by (#c1-1)", async () => { - await invokeKeyboardAndAssertEmittedMsg([]); + await invokeKeyboardAndAssertEmittedMsg([ + "c1-1", + "c2-1", + "c2-2", + "c2-3", + "c2-4", + "c2-5", + ]); }); test("Siblings have the correct order in destination container(C2) including the new merged element (#c1-1)", async () => { @@ -125,6 +132,10 @@ test.describe }); }); + test("Trigger key `c` to commit the transformed elements and read the emitted message for mutation caused by (#c1-1)", async () => { + await invokeKeyboardAndAssertEmittedMsg(["c1-1"]); + }); + test("Siblings in both containers are reconciled", async () => { await Promise.all([ expect(elmC1E1).toHaveCSS("transform", "none"), diff --git a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts index 63598e571..dfd647995 100644 --- a/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts +++ b/packages/dflex-dnd/src/LayoutManager/DFlexDnDStore.ts @@ -629,10 +629,12 @@ class DFlexDnDStore extends DFlexBaseStore { if (siblings.length === 0) { if (__DEV__) { - // eslint-disable-next-line no-console - console.warn( - `No sibling elements found for SK: ${SK}. Nothing to reconcile.`, - ); + if (featureFlags.enableReconcileDebugger) { + // eslint-disable-next-line no-console + console.warn( + `No sibling elements found for SK: ${SK}. Nothing to reconcile.`, + ); + } } return; From 67cc84201e628efc21d8f1fb1bf3df7df029bd2b Mon Sep 17 00:00:00 2001 From: jalal246 Date: Tue, 12 Sep 2023 14:28:38 +0300 Subject: [PATCH 6/6] bump deps --- package.json | 10 +- packages/dflex-dnd-playground/package.json | 2 +- packages/dflex-next-playground/package.json | 4 +- pnpm-lock.yaml | 1271 +++++++++-------- scripts/build/package.json | 2 +- .../eslint-config-dflex-react/package.json | 2 +- scripts/eslint-config-dflex/package.json | 6 +- 7 files changed, 650 insertions(+), 647 deletions(-) diff --git a/package.json b/package.json index fc874cf11..5d3e529a9 100644 --- a/package.json +++ b/package.json @@ -44,9 +44,9 @@ "@babel/preset-typescript": "^7.22.15", "@changesets/cli": "^2.26.2", "@playwright/test": "^1.37.1", - "@size-limit/preset-big-lib": "^8.2.6", + "@size-limit/preset-big-lib": "^9.0.0", "@types/jest": "^29.5.4", - "@types/node": "^20.5.9", + "@types/node": "^20.6.0", "@types/react": "^18.2.21", "@types/react-dom": "^18.2.7", "@types/react-router-dom": "^5.3.3", @@ -55,14 +55,14 @@ "cypress": "^13.1.0", "eslint-config-dflex": "workspace:*", "istanbul-lib-instrument": "^6.0.0", - "jest": "^29.6.4", - "jest-environment-jsdom": "^29.6.4", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "prettier": "^3.0.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0", "rimraf": "^5.0.1", - "size-limit": "^8.2.6", + "size-limit": "^9.0.0", "start-server-and-test": "^2.0.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", diff --git a/packages/dflex-dnd-playground/package.json b/packages/dflex-dnd-playground/package.json index bf2e2b954..dda429e81 100644 --- a/packages/dflex-dnd-playground/package.json +++ b/packages/dflex-dnd-playground/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "cypress": "^13.1.0", - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-config-dflex-react": "workspace:*", "eslint-plugin-cypress": "^2.14.0" } diff --git a/packages/dflex-next-playground/package.json b/packages/dflex-next-playground/package.json index dd56d2e7b..a649af897 100644 --- a/packages/dflex-next-playground/package.json +++ b/packages/dflex-next-playground/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@dflex/dnd": "workspace:^3.9.4", - "@types/node": "^20.5.9", + "@types/node": "^20.6.0", "@types/react": "^18.2.21", "@types/react-dom": "^18.2.7", "autoprefixer": "10.4.15", @@ -23,7 +23,7 @@ "typescript": "^5.2.2" }, "devDependencies": { - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-config-dflex-react": "workspace:*" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d129add99..6ad399eb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@babel/preset-typescript': specifier: ^7.22.15 - version: 7.22.15(@babel/core@7.22.15) + version: 7.22.15(@babel/core@7.22.17) '@changesets/cli': specifier: ^2.26.2 version: 2.26.2 @@ -18,14 +18,14 @@ importers: specifier: ^1.37.1 version: 1.37.1 '@size-limit/preset-big-lib': - specifier: ^8.2.6 - version: 8.2.6(size-limit@8.2.6) + specifier: ^9.0.0 + version: 9.0.0(size-limit@9.0.0) '@types/jest': specifier: ^29.5.4 version: 29.5.4 '@types/node': - specifier: ^20.5.9 - version: 20.5.9 + specifier: ^20.6.0 + version: 20.6.0 '@types/react': specifier: ^18.2.21 version: 18.2.21 @@ -51,11 +51,11 @@ importers: specifier: ^6.0.0 version: 6.0.0 jest: - specifier: ^29.6.4 - version: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.6.0)(ts-node@10.9.1) jest-environment-jsdom: - specifier: ^29.6.4 - version: 29.6.4 + specifier: ^29.7.0 + version: 29.7.0 prettier: specifier: ^3.0.3 version: 3.0.3 @@ -72,23 +72,23 @@ importers: specifier: ^5.0.1 version: 5.0.1 size-limit: - specifier: ^8.2.6 - version: 8.2.6 + specifier: ^9.0.0 + version: 9.0.0 start-server-and-test: specifier: ^2.0.0 version: 2.0.0 ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.22.15)(jest@29.6.4)(typescript@5.2.2) + version: 29.1.1(@babel/core@7.22.17)(jest@29.7.0)(typescript@5.2.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.5.9)(typescript@5.2.2) + version: 10.9.1(@types/node@20.6.0)(typescript@5.2.2) typescript: specifier: ^5.2.2 version: 5.2.2 vite: specifier: ^4.4.9 - version: 4.4.9(@types/node@20.5.9) + version: 4.4.9(@types/node@20.6.0) vite-plugin-replace: specifier: ^0.1.1 version: 0.1.1(vite@4.4.9) @@ -124,14 +124,14 @@ importers: specifier: ^13.1.0 version: 13.1.0 eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.49.0 + version: 8.49.0 eslint-config-dflex-react: specifier: workspace:* version: link:../../scripts/eslint-config-dflex-react eslint-plugin-cypress: specifier: ^2.14.0 - version: 2.14.0(eslint@8.48.0) + version: 2.14.0(eslint@8.49.0) packages/dflex-dom-gen: devDependencies: @@ -170,8 +170,8 @@ importers: specifier: workspace:^3.9.4 version: link:../dflex-dnd '@types/node': - specifier: ^20.5.9 - version: 20.5.9 + specifier: ^20.6.0 + version: 20.6.0 '@types/react': specifier: ^18.2.21 version: 18.2.21 @@ -186,7 +186,7 @@ importers: version: 2.3.2 next: specifier: 13.4.19 - version: 13.4.19(@babel/core@7.22.15)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.19(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) postcss: specifier: 8.4.29 version: 8.4.29 @@ -204,8 +204,8 @@ importers: version: 5.2.2 devDependencies: eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.49.0 + version: 8.49.0 eslint-config-dflex-react: specifier: workspace:* version: link:../../scripts/eslint-config-dflex-react @@ -228,22 +228,22 @@ importers: dependencies: '@rollup/plugin-alias': specifier: ^5.0.0 - version: 5.0.0(rollup@3.28.1) + version: 5.0.0(rollup@3.29.1) '@rollup/plugin-babel': specifier: ^6.0.3 - version: 6.0.3(@babel/core@7.22.15)(rollup@3.28.1) + version: 6.0.3(@babel/core@7.22.17)(rollup@3.29.1) '@rollup/plugin-commonjs': specifier: ^25.0.4 - version: 25.0.4(rollup@3.28.1) + version: 25.0.4(rollup@3.29.1) '@rollup/plugin-node-resolve': specifier: ^15.2.1 - version: 15.2.1(rollup@3.28.1) + version: 15.2.1(rollup@3.29.1) '@rollup/plugin-replace': specifier: ^5.0.2 - version: 5.0.2(rollup@3.28.1) + version: 5.0.2(rollup@3.29.1) '@rollup/plugin-terser': specifier: ^0.4.3 - version: 0.4.3(rollup@3.28.1) + version: 0.4.3(rollup@3.29.1) minimist: specifier: ^1.2.8 version: 1.2.8 @@ -251,50 +251,50 @@ importers: specifier: workspace:* version: link:../npm rollup: - specifier: ^3.28.1 - version: 3.28.1 + specifier: ^3.29.1 + version: 3.29.1 scripts/eslint-config-dflex: dependencies: '@typescript-eslint/eslint-plugin': - specifier: ^6.6.0 - version: 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.0)(typescript@5.2.2) + specifier: ^6.7.0 + version: 6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^6.6.0 - version: 6.6.0(eslint@8.48.0)(typescript@5.2.2) + specifier: ^6.7.0 + version: 6.7.0(eslint@8.49.0)(typescript@5.2.2) eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.49.0 + version: 8.49.0 eslint-config-airbnb-base: specifier: ^15.0.0 - version: 15.0.0(eslint-plugin-import@2.28.1)(eslint@8.48.0) + version: 15.0.0(eslint-plugin-import@2.28.1)(eslint@8.49.0) eslint-config-prettier: specifier: ^9.0.0 - version: 9.0.0(eslint@8.48.0) + version: 9.0.0(eslint@8.49.0) eslint-import-resolver-typescript: specifier: ^3.6.0 - version: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.48.0) + version: 3.6.0(@typescript-eslint/parser@6.7.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0) eslint-plugin-import: specifier: ^2.28.1 - version: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + version: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) eslint-plugin-prettier: specifier: ^5.0.0 - version: 5.0.0(eslint-config-prettier@9.0.0)(eslint@8.48.0)(prettier@3.0.3) + version: 5.0.0(eslint-config-prettier@9.0.0)(eslint@8.49.0)(prettier@3.0.3) scripts/eslint-config-dflex-react: dependencies: eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.49.0 + version: 8.49.0 eslint-plugin-jsx-a11y: specifier: ^6.7.1 - version: 6.7.1(eslint@8.48.0) + version: 6.7.1(eslint@8.49.0) eslint-plugin-react: specifier: ^7.33.2 - version: 7.33.2(eslint@8.48.0) + version: 7.33.2(eslint@8.49.0) eslint-plugin-react-hooks: specifier: ^4.6.0 - version: 4.6.0(eslint@8.48.0) + version: 4.6.0(eslint@8.49.0) scripts/npm: {} @@ -327,20 +327,20 @@ packages: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.22.15: - resolution: {integrity: sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==} + /@babel/core@7.22.17: + resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.13 '@babel/generator': 7.22.15 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.22.15(@babel/core@7.22.15) + '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17) '@babel/helpers': 7.22.15 - '@babel/parser': 7.22.15 + '@babel/parser': 7.22.16 '@babel/template': 7.22.15 - '@babel/traverse': 7.22.15 - '@babel/types': 7.22.15 + '@babel/traverse': 7.22.17 + '@babel/types': 7.22.17 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -353,7 +353,7 @@ packages: resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 @@ -362,7 +362,7 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 dev: true /@babel/helper-compilation-targets@7.22.15: @@ -375,19 +375,19 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.15): + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.17): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.15 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.15) + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 @@ -402,34 +402,34 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 /@babel/helper-member-expression-to-functions@7.22.15: resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 - /@babel/helper-module-transforms@7.22.15(@babel/core@7.22.15): - resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==} + /@babel/helper-module-transforms@7.22.17(@babel/core@7.22.17): + resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -440,7 +440,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -448,13 +448,13 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.15): + /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.17): resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.15 '@babel/helper-optimise-call-expression': 7.22.5 @@ -464,20 +464,20 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} @@ -496,8 +496,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.22.15 - '@babel/types': 7.22.15 + '@babel/traverse': 7.22.17 + '@babel/types': 7.22.17 transitivePeerDependencies: - supports-color @@ -509,199 +509,199 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.22.15: - resolution: {integrity: sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==} + /@babel/parser@7.22.16: + resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.15): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.17): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.15): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.15): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.17): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.15): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.17): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.15): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.15): + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.17): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.15): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.17): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.15): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.15): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.17): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.15): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.15): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.15): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.17): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.15): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.17): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.15): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.17): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.15): + /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.17): resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 - '@babel/helper-module-transforms': 7.22.15(@babel/core@7.22.15) + '@babel/core': 7.22.17 + '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.15): + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.17): resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.15): + /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.17): resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.15): + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.17): resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.15) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.15) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.17) dev: true - /@babel/preset-typescript@7.22.15(@babel/core@7.22.15): + /@babel/preset-typescript@7.22.15(@babel/core@7.22.17): resolution: {integrity: sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.15) - '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.15) - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.15) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.17) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.17) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.17) dev: true /@babel/runtime@7.22.15: @@ -715,11 +715,11 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.15 - '@babel/types': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 - /@babel/traverse@7.22.15: - resolution: {integrity: sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==} + /@babel/traverse@7.22.17: + resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.13 @@ -728,15 +728,15 @@ packages: '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.15 - '@babel/types': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.22.15: - resolution: {integrity: sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==} + /@babel/types@7.22.17: + resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.22.5 @@ -813,7 +813,7 @@ packages: meow: 6.1.1 outdent: 0.5.0 p-limit: 2.3.0 - preferred-pm: 3.1.1 + preferred-pm: 3.1.2 resolve-from: 5.0.0 semver: 7.5.4 spawndamnit: 2.0.0 @@ -944,8 +944,8 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@cypress/request@3.0.0: - resolution: {integrity: sha512-GKFCqwZwMYmL3IBoNeR2MM1SnxRIGERsQOTWeQKoYBt2JLqcqiy7JXqO894FLrpjZYqGxW92MNwRH2BN56obdQ==} + /@cypress/request@3.0.1: + resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==} engines: {node: '>= 6'} dependencies: aws-sign2: 0.7.0 @@ -1175,17 +1175,17 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.48.0 + eslint: 8.49.0 eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} + /@eslint-community/regexpp@4.8.1: + resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.2: @@ -1204,8 +1204,8 @@ packages: transitivePeerDependencies: - supports-color - /@eslint/js@8.48.0: - resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} + /@eslint/js@8.49.0: + resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /@hapi/hoek@9.3.0: @@ -1263,20 +1263,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console@29.6.4: - resolution: {integrity: sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw==} + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 - jest-message-util: 29.6.3 - jest-util: 29.6.3 + jest-message-util: 29.7.0 + jest-util: 29.7.0 slash: 3.0.0 dev: true - /@jest/core@29.6.4(ts-node@10.9.1): - resolution: {integrity: sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg==} + /@jest/core@29.7.0(ts-node@10.9.1): + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1284,32 +1284,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.6.4 - '@jest/reporters': 29.6.4 - '@jest/test-result': 29.6.4 - '@jest/transform': 29.6.4 + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 - jest-changed-files: 29.6.3 - jest-config: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) - jest-haste-map: 29.6.4 - jest-message-util: 29.6.3 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.6.0)(ts-node@10.9.1) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 jest-regex-util: 29.6.3 - jest-resolve: 29.6.4 - jest-resolve-dependencies: 29.6.4 - jest-runner: 29.6.4 - jest-runtime: 29.6.4 - jest-snapshot: 29.6.4 - jest-util: 29.6.3 - jest-validate: 29.6.3 - jest-watcher: 29.6.4 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 micromatch: 4.0.5 - pretty-format: 29.6.3 + pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -1318,59 +1318,59 @@ packages: - ts-node dev: true - /@jest/environment@29.6.4: - resolution: {integrity: sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ==} + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.6.4 + '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 - jest-mock: 29.6.3 + '@types/node': 20.6.0 + jest-mock: 29.7.0 dev: true - /@jest/expect-utils@29.6.4: - resolution: {integrity: sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==} + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.6.3 dev: true - /@jest/expect@29.6.4: - resolution: {integrity: sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA==} + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.6.4 - jest-snapshot: 29.6.4 + expect: 29.7.0 + jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers@29.6.4: - resolution: {integrity: sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw==} + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.5.9 - jest-message-util: 29.6.3 - jest-mock: 29.6.3 - jest-util: 29.6.3 + '@types/node': 20.6.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true - /@jest/globals@29.6.4: - resolution: {integrity: sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA==} + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.4 - '@jest/expect': 29.6.4 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 '@jest/types': 29.6.3 - jest-mock: 29.6.3 + jest-mock: 29.7.0 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters@29.6.4: - resolution: {integrity: sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g==} + /@jest/reporters@29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1379,12 +1379,12 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.6.4 - '@jest/test-result': 29.6.4 - '@jest/transform': 29.6.4 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.19 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1395,9 +1395,9 @@ packages: istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.6 - jest-message-util: 29.6.3 - jest-util: 29.6.3 - jest-worker: 29.6.4 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -1422,31 +1422,31 @@ packages: graceful-fs: 4.2.11 dev: true - /@jest/test-result@29.6.4: - resolution: {integrity: sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ==} + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.6.4 + '@jest/console': 29.7.0 '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.2 dev: true - /@jest/test-sequencer@29.6.4: - resolution: {integrity: sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg==} + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.6.4 + '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 - jest-haste-map: 29.6.4 + jest-haste-map: 29.7.0 slash: 3.0.0 dev: true - /@jest/transform@29.6.4: - resolution: {integrity: sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA==} + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.19 babel-plugin-istanbul: 6.1.1 @@ -1454,9 +1454,9 @@ packages: convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 29.6.4 + jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 - jest-util: 29.6.3 + jest-util: 29.7.0 micromatch: 4.0.5 pirates: 4.0.6 slash: 3.0.0 @@ -1472,7 +1472,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.5.9 + '@types/node': 20.6.0 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -1661,7 +1661,7 @@ packages: engines: {node: '>=16'} hasBin: true dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 playwright-core: 1.37.1 optionalDependencies: fsevents: 2.3.2 @@ -1672,7 +1672,7 @@ packages: engines: {node: '>=14.0.0'} dev: true - /@rollup/plugin-alias@5.0.0(rollup@3.28.1): + /@rollup/plugin-alias@5.0.0(rollup@3.29.1): resolution: {integrity: sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1681,11 +1681,11 @@ packages: rollup: optional: true dependencies: - rollup: 3.28.1 + rollup: 3.29.1 slash: 4.0.0 dev: false - /@rollup/plugin-babel@6.0.3(@babel/core@7.22.15)(rollup@3.28.1): + /@rollup/plugin-babel@6.0.3(@babel/core@7.22.17)(rollup@3.29.1): resolution: {integrity: sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1698,13 +1698,13 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 5.0.4(rollup@3.28.1) - rollup: 3.28.1 + '@rollup/pluginutils': 5.0.4(rollup@3.29.1) + rollup: 3.29.1 dev: false - /@rollup/plugin-commonjs@25.0.4(rollup@3.28.1): + /@rollup/plugin-commonjs@25.0.4(rollup@3.29.1): resolution: {integrity: sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1713,16 +1713,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.28.1) + '@rollup/pluginutils': 5.0.4(rollup@3.29.1) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.27.0 - rollup: 3.28.1 + rollup: 3.29.1 dev: false - /@rollup/plugin-node-resolve@15.2.1(rollup@3.28.1): + /@rollup/plugin-node-resolve@15.2.1(rollup@3.29.1): resolution: {integrity: sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1731,16 +1731,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.28.1) + '@rollup/pluginutils': 5.0.4(rollup@3.29.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.4 - rollup: 3.28.1 + rollup: 3.29.1 dev: false - /@rollup/plugin-replace@5.0.2(rollup@3.28.1): + /@rollup/plugin-replace@5.0.2(rollup@3.29.1): resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1749,12 +1749,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.28.1) + '@rollup/pluginutils': 5.0.4(rollup@3.29.1) magic-string: 0.27.0 - rollup: 3.28.1 + rollup: 3.29.1 dev: false - /@rollup/plugin-terser@0.4.3(rollup@3.28.1): + /@rollup/plugin-terser@0.4.3(rollup@3.29.1): resolution: {integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1763,13 +1763,13 @@ packages: rollup: optional: true dependencies: - rollup: 3.28.1 + rollup: 3.29.1 serialize-javascript: 6.0.1 smob: 1.4.0 terser: 5.19.4 dev: false - /@rollup/pluginutils@5.0.4(rollup@3.28.1): + /@rollup/pluginutils@5.0.4(rollup@3.29.1): resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1781,7 +1781,7 @@ packages: '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.28.1 + rollup: 3.29.1 dev: false /@sideway/address@4.1.4: @@ -1823,25 +1823,25 @@ packages: - supports-color dev: true - /@size-limit/file@8.2.6(size-limit@8.2.6): - resolution: {integrity: sha512-B7ayjxiJsbtXdIIWazJkB5gezi5WBMecdHTFPMDhI3NwEML1RVvUjAkrb1mPAAkIpt2LVHPnhdCUHjqDdjugwg==} - engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + /@size-limit/file@9.0.0(size-limit@9.0.0): + resolution: {integrity: sha512-oM2UaH2FRq4q22k+R+P6xCpzET10T94LFdSjb9svVu/vOD7NaB9LGcG6se8TW1BExXiyXO4GEhLsBt3uMKM3qA==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - size-limit: 8.2.6 + size-limit: 9.0.0 dependencies: - semver: 7.5.3 - size-limit: 8.2.6 + semver: 7.5.4 + size-limit: 9.0.0 dev: true - /@size-limit/preset-big-lib@8.2.6(size-limit@8.2.6): - resolution: {integrity: sha512-63a+yos0QNMVCfx1OWnxBrdQVTlBVGzW5fDXwpWq/hKfP3B89XXHYGeL2Z2f8IXSVeGkAHXnDcTZyIPRaXffVg==} + /@size-limit/preset-big-lib@9.0.0(size-limit@9.0.0): + resolution: {integrity: sha512-wc+VNLXjn0z11s1IWevo8+utP7uZGPVDNNe5cNyMFYHv7/pwJtgsd8w2onEkbK1h8x1oJfWlcqFNKAnvD1Bylw==} peerDependencies: - size-limit: 8.2.6 + size-limit: 9.0.0 dependencies: - '@size-limit/file': 8.2.6(size-limit@8.2.6) - '@size-limit/time': 8.2.6(size-limit@8.2.6) - '@size-limit/webpack': 8.2.6(size-limit@8.2.6) - size-limit: 8.2.6 + '@size-limit/file': 9.0.0(size-limit@9.0.0) + '@size-limit/time': 9.0.0(size-limit@9.0.0) + '@size-limit/webpack': 9.0.0(size-limit@9.0.0) + size-limit: 9.0.0 transitivePeerDependencies: - '@swc/core' - bufferutil @@ -1853,15 +1853,14 @@ packages: - webpack-cli dev: true - /@size-limit/time@8.2.6(size-limit@8.2.6): - resolution: {integrity: sha512-fUEPvz7Uq6+oUQxSYbNlJt3tTgQBl1VY21USi/B7ebdnVKLnUx1JyPI9v7imN6XEkB2VpJtnYgjFeLgNrirzMA==} - engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + /@size-limit/time@9.0.0(size-limit@9.0.0): + resolution: {integrity: sha512-//Yba5fRkYqpBZ6MFtjDTSjCpQonDMqkwofpe0G1hMd/5l/3PZXVLDCAU2BW3nQFqTkpeyytFG6Y3jxUqSddiw==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - size-limit: 8.2.6 + size-limit: 9.0.0 dependencies: estimo: 2.3.6 - react: 17.0.2 - size-limit: 8.2.6 + size-limit: 9.0.0 transitivePeerDependencies: - bufferutil - encoding @@ -1869,14 +1868,14 @@ packages: - utf-8-validate dev: true - /@size-limit/webpack@8.2.6(size-limit@8.2.6): - resolution: {integrity: sha512-y2sB66m5sJxIjZ8SEAzpWbiw3/+bnQHDHfk9cSbV5ChKklq02AlYg8BS5KxGWmMpdyUo4TzpjSCP9oEudY+hxQ==} - engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + /@size-limit/webpack@9.0.0(size-limit@9.0.0): + resolution: {integrity: sha512-0YwdvmBj9rS4bXE/PY9vSdc5lCiQXmT0794EsG7yvlDMWyrWa/dsgcRok/w0MoZstfuLaS6lv03VI5UJRFU/lg==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - size-limit: 8.2.6 + size-limit: 9.0.0 dependencies: nanoid: 3.3.6 - size-limit: 8.2.6 + size-limit: 9.0.0 webpack: 5.88.2 transitivePeerDependencies: - '@swc/core' @@ -1911,8 +1910,8 @@ packages: /@types/babel__core@7.20.1: resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: - '@babel/parser': 7.22.15 - '@babel/types': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 @@ -1921,20 +1920,20 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.22.15 - '@babel/types': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/types': 7.22.17 dev: true /@types/babel__traverse@7.20.1: resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 dev: true /@types/eslint-scope@3.7.4: @@ -1957,7 +1956,7 @@ packages: /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 dev: true /@types/history@4.7.11: @@ -1989,14 +1988,14 @@ packages: /@types/jest@29.5.4: resolution: {integrity: sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==} dependencies: - expect: 29.6.4 - pretty-format: 29.6.3 + expect: 29.7.0 + pretty-format: 29.7.0 dev: true /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -2016,12 +2015,12 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@16.18.48: - resolution: {integrity: sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q==} + /@types/node@16.18.50: + resolution: {integrity: sha512-OiDU5xRgYTJ203v4cprTs0RwOCd5c5Zjv+K5P8KSqfiCsB1W3LcamTUMcnQarpq5kOYbhHfSOgIEJvdPyb5xyw==} dev: true - /@types/node@20.5.9: - resolution: {integrity: sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==} + /@types/node@20.6.0: + resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -2097,12 +2096,12 @@ packages: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: - '@types/node': 20.5.9 + '@types/node': 16.18.50 dev: true optional: true - /@typescript-eslint/eslint-plugin@6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.0)(typescript@5.2.2): - resolution: {integrity: sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==} + /@typescript-eslint/eslint-plugin@6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@5.2.2): + resolution: {integrity: sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2112,26 +2111,26 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/type-utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.6.0 + '@eslint-community/regexpp': 4.8.1 + '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.0 + '@typescript-eslint/type-utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.48.0 + eslint: 8.49.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/parser@6.6.0(eslint@8.48.0)(typescript@5.2.2): - resolution: {integrity: sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==} + /@typescript-eslint/parser@6.7.0(eslint@8.49.0)(typescript@5.2.2): + resolution: {integrity: sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2140,27 +2139,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/scope-manager': 6.7.0 + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.48.0 + eslint: 8.49.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/scope-manager@6.6.0: - resolution: {integrity: sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==} + /@typescript-eslint/scope-manager@6.7.0: + resolution: {integrity: sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/visitor-keys': 6.7.0 dev: false - /@typescript-eslint/type-utils@6.6.0(eslint@8.48.0)(typescript@5.2.2): - resolution: {integrity: sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==} + /@typescript-eslint/type-utils@6.7.0(eslint@8.49.0)(typescript@5.2.2): + resolution: {integrity: sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2169,23 +2168,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.48.0 - ts-api-utils: 1.0.2(typescript@5.2.2) + eslint: 8.49.0 + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/types@6.6.0: - resolution: {integrity: sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==} + /@typescript-eslint/types@6.7.0: + resolution: {integrity: sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==} engines: {node: ^16.0.0 || >=18.0.0} dev: false - /@typescript-eslint/typescript-estree@6.6.0(typescript@5.2.2): - resolution: {integrity: sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==} + /@typescript-eslint/typescript-estree@6.7.0(typescript@5.2.2): + resolution: {integrity: sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2193,42 +2192,42 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/visitor-keys': 6.7.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/utils@6.6.0(eslint@8.48.0)(typescript@5.2.2): - resolution: {integrity: sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==} + /@typescript-eslint/utils@6.7.0(eslint@8.49.0)(typescript@5.2.2): + resolution: {integrity: sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.1 - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) - eslint: 8.48.0 + '@typescript-eslint/scope-manager': 6.7.0 + '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2) + eslint: 8.49.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: false - /@typescript-eslint/visitor-keys@6.6.0: - resolution: {integrity: sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==} + /@typescript-eslint/visitor-keys@6.7.0: + resolution: {integrity: sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.6.0 + '@typescript-eslint/types': 6.7.0 eslint-visitor-keys: 3.4.3 dev: false @@ -2238,11 +2237,11 @@ packages: peerDependencies: vite: ^4.2.0 dependencies: - '@babel/core': 7.22.15 - '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.15) - '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.15) + '@babel/core': 7.22.17 + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.17) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.17) react-refresh: 0.14.0 - vite: 4.4.9(@types/node@20.5.9) + vite: 4.4.9(@types/node@20.6.0) transitivePeerDependencies: - supports-color dev: true @@ -2540,8 +2539,8 @@ packages: get-intrinsic: 1.2.1 dev: false - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2549,8 +2548,8 @@ packages: es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2559,8 +2558,8 @@ packages: es-shim-unscopables: 1.0.0 dev: false - /array.prototype.tosorted@1.1.1: - resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -2569,13 +2568,14 @@ packages: get-intrinsic: 1.2.1 dev: false - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 define-properties: 1.2.0 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -2632,7 +2632,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.10 - caniuse-lite: 1.0.30001525 + caniuse-lite: 1.0.30001533 fraction.js: 4.3.6 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -2652,8 +2652,8 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: true - /axe-core@4.7.2: - resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} + /axe-core@4.8.1: + resolution: {integrity: sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==} engines: {node: '>=4'} dev: false @@ -2672,17 +2672,17 @@ packages: dequal: 2.0.3 dev: false - /babel-jest@29.6.4(@babel/core@7.22.15): - resolution: {integrity: sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw==} + /babel-jest@29.7.0(@babel/core@7.22.17): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.22.15 - '@jest/transform': 29.6.4 + '@babel/core': 7.22.17 + '@jest/transform': 29.7.0 '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.22.15) + babel-preset-jest: 29.6.3(@babel/core@7.22.17) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -2708,40 +2708,40 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.22.15 + '@babel/types': 7.22.17 '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.20.1 dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.15): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.17): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.15 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.15) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.15) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.15) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.15) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.15) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.15) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.15) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.15) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.15) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.15) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.15) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.15) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.22.15): + '@babel/core': 7.22.17 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.17) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.17) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.17) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.17) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.17) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.22.17): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.15) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.17) dev: true /balanced-match@1.0.2: @@ -2824,8 +2824,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001525 - electron-to-chromium: 1.4.508 + caniuse-lite: 1.0.30001533 + electron-to-chromium: 1.4.515 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) @@ -2919,8 +2919,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001525: - resolution: {integrity: sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==} + /caniuse-lite@1.0.30001533: + resolution: {integrity: sha512-9aY/b05NKU4Yl2sbcJhn4A7MsGwR1EPfW/nrqsnqVA0Oq50wpmPaGI+R1Z0UKlUl96oxUkGEOILWtOHck0eCWw==} /caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -3128,6 +3128,25 @@ packages: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: true + /create-jest@29.7.0(@types/node@20.6.0)(ts-node@10.9.1): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.6.0)(ts-node@10.9.1) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -3215,9 +3234,9 @@ packages: hasBin: true requiresBuild: true dependencies: - '@cypress/request': 3.0.0 + '@cypress/request': 3.0.1 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/node': 16.18.48 + '@types/node': 16.18.50 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.3 arch: 2.2.0 @@ -3458,8 +3477,8 @@ packages: safer-buffer: 2.1.2 dev: true - /electron-to-chromium@1.4.508: - resolution: {integrity: sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==} + /electron-to-chromium@1.4.515: + resolution: {integrity: sha512-VTq6vjk3kCfG2qdzQRd/i9dIyVVm0dbtZIgFzrLgfB73mXDQT2HPKVRc1EoZcAVUv9XhXAu08DWqJuababdGGg==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3510,7 +3529,7 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 @@ -3537,11 +3556,11 @@ packages: object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 @@ -3565,11 +3584,11 @@ packages: has-symbols: 1.0.3 internal-slot: 1.0.5 iterator.prototype: 1.1.1 - safe-array-concat: 1.0.0 + safe-array-concat: 1.0.1 dev: false - /es-module-lexer@1.3.0: - resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + /es-module-lexer@1.3.1: + resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==} dev: true /es-set-tostringtag@2.0.1: @@ -3652,7 +3671,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.28.1)(eslint@8.48.0): + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.28.1)(eslint@8.49.0): resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -3660,20 +3679,20 @@ packages: eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.48.0 - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + eslint: 8.49.0 + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) object.assign: 4.1.4 object.entries: 1.1.7 semver: 6.3.1 dev: false - /eslint-config-prettier@9.0.0(eslint@8.48.0): + /eslint-config-prettier@9.0.0(eslint@8.49.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.48.0 + eslint: 8.49.0 dev: false /eslint-import-resolver-node@0.3.9: @@ -3686,7 +3705,7 @@ packages: - supports-color dev: false - /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.48.0): + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.7.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0): resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3695,9 +3714,9 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 - eslint: 8.48.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + eslint: 8.49.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) fast-glob: 3.3.1 get-tsconfig: 4.7.0 is-core-module: 2.13.0 @@ -3709,7 +3728,7 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3730,25 +3749,25 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.2.2) debug: 3.2.7(supports-color@8.1.1) - eslint: 8.48.0 + eslint: 8.49.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-plugin-import@2.28.1)(eslint@8.48.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0) transitivePeerDependencies: - supports-color dev: false - /eslint-plugin-cypress@2.14.0(eslint@8.48.0): + /eslint-plugin-cypress@2.14.0(eslint@8.49.0): resolution: {integrity: sha512-eW6tv7iIg7xujleAJX4Ujm649Bf5jweqa4ObPEIuueYRyLZt7qXGWhCY/n4bfeFW/j6nQZwbIBHKZt6EKcL/cg==} peerDependencies: eslint: '>= 3.2.1' dependencies: - eslint: 8.48.0 + eslint: 8.49.0 globals: 13.21.0 dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -3758,16 +3777,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.48.0 + eslint: 8.49.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -3783,7 +3802,7 @@ packages: - supports-color dev: false - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.48.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.49.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -3792,13 +3811,13 @@ packages: '@babel/runtime': 7.22.15 aria-query: 5.3.0 array-includes: 3.1.7 - array.prototype.flatmap: 1.3.1 + array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.7 - axe-core: 4.7.2 + axe-core: 4.8.1 axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.48.0 + eslint: 8.49.0 has: 1.0.3 jsx-ast-utils: 3.3.5 language-tags: 1.0.5 @@ -3808,7 +3827,7 @@ packages: semver: 6.3.1 dev: false - /eslint-plugin-prettier@5.0.0(eslint-config-prettier@9.0.0)(eslint@8.48.0)(prettier@3.0.3): + /eslint-plugin-prettier@5.0.0(eslint-config-prettier@9.0.0)(eslint@8.49.0)(prettier@3.0.3): resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3822,34 +3841,34 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.48.0 - eslint-config-prettier: 9.0.0(eslint@8.48.0) + eslint: 8.49.0 + eslint-config-prettier: 9.0.0(eslint@8.49.0) prettier: 3.0.3 prettier-linter-helpers: 1.0.0 synckit: 0.8.5 dev: false - /eslint-plugin-react-hooks@4.6.0(eslint@8.48.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.49.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.48.0 + eslint: 8.49.0 dev: false - /eslint-plugin-react@7.33.2(eslint@8.48.0): + /eslint-plugin-react@7.33.2(eslint@8.49.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.7 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 es-iterator-helpers: 1.0.14 - eslint: 8.48.0 + eslint: 8.49.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -3882,15 +3901,15 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint@8.48.0: - resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} + /eslint@8.49.0: + resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) - '@eslint-community/regexpp': 4.8.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + '@eslint-community/regexpp': 4.8.1 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.48.0 + '@eslint/js': 8.49.0 '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -4064,15 +4083,15 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /expect@29.6.4: - resolution: {integrity: sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==} + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.6.4 + '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 - jest-matcher-utils: 29.6.4 - jest-message-util: 29.6.3 - jest-util: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 dev: true /extend@3.0.2: @@ -4940,8 +4959,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.22.15 - '@babel/parser': 7.22.15 + '@babel/core': 7.22.17 + '@babel/parser': 7.22.16 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 @@ -4953,8 +4972,8 @@ packages: resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.22.15 - '@babel/parser': 7.22.15 + '@babel/core': 7.22.17 + '@babel/parser': 7.22.16 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.5.4 @@ -5008,37 +5027,37 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true - /jest-changed-files@29.6.3: - resolution: {integrity: sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==} + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 - jest-util: 29.6.3 + jest-util: 29.7.0 p-limit: 3.1.0 dev: true - /jest-circus@29.6.4: - resolution: {integrity: sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw==} + /jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.4 - '@jest/expect': 29.6.4 - '@jest/test-result': 29.6.4 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 is-generator-fn: 2.1.0 - jest-each: 29.6.3 - jest-matcher-utils: 29.6.4 - jest-message-util: 29.6.3 - jest-runtime: 29.6.4 - jest-snapshot: 29.6.4 - jest-util: 29.6.3 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 p-limit: 3.1.0 - pretty-format: 29.6.3 - pure-rand: 6.0.2 + pretty-format: 29.7.0 + pure-rand: 6.0.3 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -5046,8 +5065,8 @@ packages: - supports-color dev: true - /jest-cli@29.6.4(@types/node@20.5.9)(ts-node@10.9.1): - resolution: {integrity: sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ==} + /jest-cli@29.7.0(@types/node@20.6.0)(ts-node@10.9.1): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -5056,17 +5075,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.6.4(ts-node@10.9.1) - '@jest/test-result': 29.6.4 + '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.6.0)(ts-node@10.9.1) exit: 0.1.2 - graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) - jest-util: 29.6.3 - jest-validate: 29.6.3 - prompts: 2.4.2 + jest-config: 29.7.0(@types/node@20.6.0)(ts-node@10.9.1) + jest-util: 29.7.0 + jest-validate: 29.7.0 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' @@ -5075,8 +5093,8 @@ packages: - ts-node dev: true - /jest-config@29.6.4(@types/node@20.5.9)(ts-node@10.9.1): - resolution: {integrity: sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A==} + /jest-config@29.7.0(@types/node@20.6.0)(ts-node@10.9.1): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -5087,65 +5105,65 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.22.15 - '@jest/test-sequencer': 29.6.4 + '@babel/core': 7.22.17 + '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 - babel-jest: 29.6.4(@babel/core@7.22.15) + '@types/node': 20.6.0 + babel-jest: 29.7.0(@babel/core@7.22.17) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.6.4 - jest-environment-node: 29.6.4 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 - jest-resolve: 29.6.4 - jest-runner: 29.6.4 - jest-util: 29.6.3 - jest-validate: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.6.3 + pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.5.9)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.6.0)(typescript@5.2.2) transitivePeerDependencies: - babel-plugin-macros - supports-color dev: true - /jest-diff@29.6.4: - resolution: {integrity: sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==} + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 - pretty-format: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-docblock@29.6.3: - resolution: {integrity: sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==} + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each@29.6.3: - resolution: {integrity: sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==} + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 jest-get-type: 29.6.3 - jest-util: 29.6.3 - pretty-format: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 dev: true - /jest-environment-jsdom@29.6.4: - resolution: {integrity: sha512-K6wfgUJ16DoMs02JYFid9lOsqfpoVtyJxpRlnTxUHzvZWBnnh2VNGRB9EC1Cro96TQdq5TtSjb3qUjNaJP9IyA==} + /jest-environment-jsdom@29.7.0: + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: canvas: ^2.5.0 @@ -5153,13 +5171,13 @@ packages: canvas: optional: true dependencies: - '@jest/environment': 29.6.4 - '@jest/fake-timers': 29.6.4 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.5.9 - jest-mock: 29.6.3 - jest-util: 29.6.3 + '@types/node': 20.6.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 jsdom: 20.0.3 transitivePeerDependencies: - bufferutil @@ -5167,16 +5185,16 @@ packages: - utf-8-validate dev: true - /jest-environment-node@29.6.4: - resolution: {integrity: sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ==} + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.4 - '@jest/fake-timers': 29.6.4 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 - jest-mock: 29.6.3 - jest-util: 29.6.3 + '@types/node': 20.6.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true /jest-get-type@29.6.3: @@ -5184,45 +5202,45 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map@29.6.4: - resolution: {integrity: sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog==} + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 20.5.9 + '@types/node': 20.6.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 - jest-util: 29.6.3 - jest-worker: 29.6.4 + jest-util: 29.7.0 + jest-worker: 29.7.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 dev: true - /jest-leak-detector@29.6.3: - resolution: {integrity: sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==} + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.6.3 - pretty-format: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-matcher-utils@29.6.4: - resolution: {integrity: sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==} + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.6.4 + jest-diff: 29.7.0 jest-get-type: 29.6.3 - pretty-format: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-message-util@29.6.3: - resolution: {integrity: sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==} + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.22.13 @@ -5231,21 +5249,21 @@ packages: chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.6.3 + pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-mock@29.6.3: - resolution: {integrity: sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==} + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 - jest-util: 29.6.3 + '@types/node': 20.6.0 + jest-util: 29.7.0 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.6.4): + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -5254,7 +5272,7 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.6.4 + jest-resolve: 29.7.0 dev: true /jest-regex-util@29.6.3: @@ -5262,132 +5280,132 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@29.6.4: - resolution: {integrity: sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA==} + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.6.3 - jest-snapshot: 29.6.4 + jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color dev: true - /jest-resolve@29.6.4: - resolution: {integrity: sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q==} + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 29.6.4 - jest-pnp-resolver: 1.2.3(jest-resolve@29.6.4) - jest-util: 29.6.3 - jest-validate: 29.6.3 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 resolve: 1.22.4 resolve.exports: 2.0.2 slash: 3.0.0 dev: true - /jest-runner@29.6.4: - resolution: {integrity: sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw==} + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.6.4 - '@jest/environment': 29.6.4 - '@jest/test-result': 29.6.4 - '@jest/transform': 29.6.4 + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 - jest-docblock: 29.6.3 - jest-environment-node: 29.6.4 - jest-haste-map: 29.6.4 - jest-leak-detector: 29.6.3 - jest-message-util: 29.6.3 - jest-resolve: 29.6.4 - jest-runtime: 29.6.4 - jest-util: 29.6.3 - jest-watcher: 29.6.4 - jest-worker: 29.6.4 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime@29.6.4: - resolution: {integrity: sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA==} + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.4 - '@jest/fake-timers': 29.6.4 - '@jest/globals': 29.6.4 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 '@jest/source-map': 29.6.3 - '@jest/test-result': 29.6.4 - '@jest/transform': 29.6.4 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 - jest-haste-map: 29.6.4 - jest-message-util: 29.6.3 - jest-mock: 29.6.3 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 jest-regex-util: 29.6.3 - jest-resolve: 29.6.4 - jest-snapshot: 29.6.4 - jest-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot@29.6.4: - resolution: {integrity: sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA==} + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 '@babel/generator': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.15) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.15) - '@babel/types': 7.22.15 - '@jest/expect-utils': 29.6.4 - '@jest/transform': 29.6.4 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.17) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.17) + '@babel/types': 7.22.17 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.15) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.17) chalk: 4.1.2 - expect: 29.6.4 + expect: 29.7.0 graceful-fs: 4.2.11 - jest-diff: 29.6.4 + jest-diff: 29.7.0 jest-get-type: 29.6.3 - jest-matcher-utils: 29.6.4 - jest-message-util: 29.6.3 - jest-util: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 natural-compare: 1.4.0 - pretty-format: 29.6.3 + pretty-format: 29.7.0 semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true - /jest-util@29.6.3: - resolution: {integrity: sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==} + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true - /jest-validate@29.6.3: - resolution: {integrity: sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==} + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 @@ -5395,20 +5413,20 @@ packages: chalk: 4.1.2 jest-get-type: 29.6.3 leven: 3.1.0 - pretty-format: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-watcher@29.6.4: - resolution: {integrity: sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ==} + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.6.4 + '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 20.6.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.6.3 + jest-util: 29.7.0 string-length: 4.0.2 dev: true @@ -5416,23 +5434,23 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest-worker@29.6.4: - resolution: {integrity: sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==} + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.5.9 - jest-util: 29.6.3 + '@types/node': 20.6.0 + jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.6.4(@types/node@20.5.9)(ts-node@10.9.1): - resolution: {integrity: sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw==} + /jest@29.7.0(@types/node@20.6.0)(ts-node@10.9.1): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -5441,10 +5459,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.6.4(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.1) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.6.0)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5452,8 +5470,8 @@ packages: - ts-node dev: true - /jiti@1.19.3: - resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} + /jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} hasBin: true dev: false @@ -5521,7 +5539,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.13.0 + ws: 8.14.1 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -5596,7 +5614,7 @@ packages: engines: {node: '>=4.0'} dependencies: array-includes: 3.1.7 - array.prototype.flat: 1.3.1 + array.prototype.flat: 1.3.2 object.assign: 4.1.4 object.values: 1.1.7 dev: false @@ -5940,7 +5958,7 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /next@13.4.19(@babel/core@7.22.15)(react-dom@18.2.0)(react@18.2.0): + /next@13.4.19(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==} engines: {node: '>=16.8.0'} hasBin: true @@ -5958,11 +5976,11 @@ packages: '@next/env': 13.4.19 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001525 + caniuse-lite: 1.0.30001533 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.22.15)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.22.17)(react@18.2.0) watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: @@ -6037,6 +6055,7 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + dev: false /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} @@ -6341,7 +6360,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.29 - ts-node: 10.9.1(@types/node@20.5.9)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.6.0)(typescript@5.2.2) yaml: 2.3.2 dev: false @@ -6384,8 +6403,8 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 - /preferred-pm@3.1.1: - resolution: {integrity: sha512-CsZgOVLKHifdoRu2y66P1s6oLb2WfT5Njkcgi80I/52FWTTVkWG6z0Z13vPkXC4hsT0nMrYXqX30buH8+D2eRQ==} + /preferred-pm@3.1.2: + resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} engines: {node: '>=10'} dependencies: find-up: 5.0.0 @@ -6421,8 +6440,8 @@ packages: engines: {node: '>=6'} dev: true - /pretty-format@29.6.3: - resolution: {integrity: sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 @@ -6514,8 +6533,8 @@ packages: - utf-8-validate dev: true - /pure-rand@6.0.2: - resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} + /pure-rand@6.0.3: + resolution: {integrity: sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==} dev: true /qs@6.10.4: @@ -6587,14 +6606,6 @@ packages: react: 18.2.0 dev: true - /react@17.0.2: - resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - dev: true - /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -6773,8 +6784,8 @@ packages: glob: 10.3.4 dev: true - /rollup@3.28.1: - resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} + /rollup@3.29.1: + resolution: {integrity: sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -6798,8 +6809,8 @@ packages: tslib: 2.6.2 dev: true - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.2 @@ -6851,14 +6862,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.5.3: - resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -6916,9 +6919,9 @@ packages: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /size-limit@8.2.6: - resolution: {integrity: sha512-zpznim/tX/NegjoQuRKgWTF4XiB0cn2qt90uJzxYNTFAqexk4b94DOAkBD3TwhC6c3kw2r0KcnA5upziVMZqDg==} - engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + /size-limit@9.0.0: + resolution: {integrity: sha512-DrA7o2DeRN3s+vwCA9nn7Ck9Y4pn9t0GNUwQRpKqBtBmNkl6LA2s/NlNCdtKHrEkRTeYA1ZQ65mnYveo9rUqgA==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: bytes-iec: 3.1.1 @@ -6961,7 +6964,7 @@ packages: engines: {node: '>=6'} hasBin: true dependencies: - array.prototype.flat: 1.3.1 + array.prototype.flat: 1.3.2 breakword: 1.0.6 grapheme-splitter: 1.0.4 strip-ansi: 6.0.1 @@ -7129,23 +7132,23 @@ packages: side-channel: 1.0.4 dev: false - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -7199,7 +7202,7 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /styled-jsx@5.1.1(@babel/core@7.22.15)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.22.17)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -7212,7 +7215,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 client-only: 0.0.1 react: 18.2.0 dev: false @@ -7278,7 +7281,7 @@ packages: fast-glob: 3.3.1 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.19.3 + jiti: 1.20.0 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -7451,8 +7454,8 @@ packages: engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.2(typescript@5.2.2): - resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' @@ -7464,7 +7467,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: false - /ts-jest@29.1.1(@babel/core@7.22.15)(jest@29.6.4)(typescript@5.2.2): + /ts-jest@29.1.1(@babel/core@7.22.17)(jest@29.7.0)(typescript@5.2.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7485,11 +7488,11 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.22.15 + '@babel/core': 7.22.17 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.6.4(@types/node@20.5.9)(ts-node@10.9.1) - jest-util: 29.6.3 + jest: 29.7.0(@types/node@20.6.0)(ts-node@10.9.1) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -7498,7 +7501,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node@10.9.1(@types/node@20.5.9)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.6.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -7517,7 +7520,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.5.9 + '@types/node': 20.6.0 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -7735,10 +7738,10 @@ packages: peerDependencies: vite: ^2 dependencies: - vite: 4.4.9(@types/node@20.5.9) + vite: 4.4.9(@types/node@20.6.0) dev: true - /vite@4.4.9(@types/node@20.5.9): + /vite@4.4.9(@types/node@20.6.0): resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -7766,10 +7769,10 @@ packages: terser: optional: true dependencies: - '@types/node': 20.5.9 + '@types/node': 20.6.0 esbuild: 0.18.20 postcss: 8.4.29 - rollup: 3.28.1 + rollup: 3.29.1 optionalDependencies: fsevents: 2.3.3 dev: true @@ -7848,7 +7851,7 @@ packages: browserslist: 4.21.10 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.0 + es-module-lexer: 1.3.1 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -8005,8 +8008,8 @@ packages: signal-exit: 3.0.7 dev: true - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + /ws@8.14.1: + resolution: {integrity: sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 diff --git a/scripts/build/package.json b/scripts/build/package.json index e161fdd9a..395788112 100644 --- a/scripts/build/package.json +++ b/scripts/build/package.json @@ -14,6 +14,6 @@ "@rollup/plugin-terser": "^0.4.3", "minimist": "^1.2.8", "npm-packages": "workspace:*", - "rollup": "^3.28.1" + "rollup": "^3.29.1" } } diff --git a/scripts/eslint-config-dflex-react/package.json b/scripts/eslint-config-dflex-react/package.json index ce52751f3..869c561b4 100644 --- a/scripts/eslint-config-dflex-react/package.json +++ b/scripts/eslint-config-dflex-react/package.json @@ -5,7 +5,7 @@ "license": "MIT", "private": true, "dependencies": { - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0" diff --git a/scripts/eslint-config-dflex/package.json b/scripts/eslint-config-dflex/package.json index cbadff4c4..d54c28766 100644 --- a/scripts/eslint-config-dflex/package.json +++ b/scripts/eslint-config-dflex/package.json @@ -5,9 +5,9 @@ "main": "index.js", "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.6.0", - "@typescript-eslint/parser": "^6.6.0", - "eslint": "^8.48.0", + "@typescript-eslint/eslint-plugin": "^6.7.0", + "@typescript-eslint/parser": "^6.7.0", + "eslint": "^8.49.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-typescript": "^3.6.0",