From 0fe4d521ed0c269e63136d31d17a21022866988c Mon Sep 17 00:00:00 2001 From: Daniel Leroux Date: Tue, 10 Dec 2024 09:42:21 +0100 Subject: [PATCH] fix(core): remove hyperlist dependency (#1603) --- .changeset/real-timers-relate.md | 5 + packages/core/package.json | 1 - .../src/components/tree-item/tree-item.tsx | 3 +- packages/core/src/components/tree/tree.tsx | 11 +- .../src/components/utils/lazy-list/index.ts | 10 + .../src/components/utils/lazy-list/lazy.ts | 480 ++++++++++++++++++ pnpm-lock.yaml | 403 +++++++++++---- 7 files changed, 811 insertions(+), 102 deletions(-) create mode 100644 .changeset/real-timers-relate.md create mode 100644 packages/core/src/components/utils/lazy-list/index.ts create mode 100644 packages/core/src/components/utils/lazy-list/lazy.ts diff --git a/.changeset/real-timers-relate.md b/.changeset/real-timers-relate.md new file mode 100644 index 0000000000..fd4a010a06 --- /dev/null +++ b/.changeset/real-timers-relate.md @@ -0,0 +1,5 @@ +--- +'@siemens/ix': patch +--- + +Remove _hyperlist_ from the dependencies diff --git a/packages/core/package.json b/packages/core/package.json index 8cdd0359be..e843850673 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -47,7 +47,6 @@ "@stencil/core": "~4.17.0", "@types/luxon": "^3.3.7", "animejs": "~3.2.1", - "hyperlist": "^1.0.0", "luxon": "^3.4.4" }, "devDependencies": { diff --git a/packages/core/src/components/tree-item/tree-item.tsx b/packages/core/src/components/tree-item/tree-item.tsx index bcf829eac0..ecdea51141 100644 --- a/packages/core/src/components/tree-item/tree-item.tsx +++ b/packages/core/src/components/tree-item/tree-item.tsx @@ -9,6 +9,7 @@ import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core'; import { TreeItemContext } from '../tree/tree-model'; +import { iconChevronRight } from '@siemens/ix-icons/icons'; @Component({ tag: 'ix-tree-item', @@ -57,7 +58,7 @@ export class TreeItem { > {this.hasChildren ? ( ; - private hyperlist: Hyperlist; + private hyperlist: VirtualList; private toggleListener = new Map(); private itemClickListener = new Map(); @@ -97,7 +97,7 @@ export class Tree { element.style.paddingLeft = item.level + 'rem'; } - private getVirtualizerOptions() { + private getVirtualizerOptions(): VirtualListConfig { const list = this.buildTreeList(this.model[this.root]); let setToggleListener = ( @@ -120,6 +120,8 @@ export class Tree { }; return { + width: '100%', + height: '100%', itemHeight: 32, total: list.length, generate: (index: number) => { @@ -302,6 +304,7 @@ export class Tree { } private isListInitialized() { + //@ts-ignore const itemPositions = this.hyperlist?._itemPositions; return ( @@ -326,7 +329,7 @@ export class Tree { this.hyperlist?.destroy(); const config = this.getVirtualizerOptions(); - this.hyperlist = new Hyperlist(this.hostElement, config); + this.hyperlist = new VirtualList(this.hostElement, config); } render() { diff --git a/packages/core/src/components/utils/lazy-list/index.ts b/packages/core/src/components/utils/lazy-list/index.ts new file mode 100644 index 0000000000..1f26b55723 --- /dev/null +++ b/packages/core/src/components/utils/lazy-list/index.ts @@ -0,0 +1,10 @@ +/* + * SPDX-FileCopyrightText: 2024 Siemens AG + * + * SPDX-License-Identifier: MIT + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export type { VirtualListConfig } from './lazy'; +export { VirtualList } from './lazy'; diff --git a/packages/core/src/components/utils/lazy-list/lazy.ts b/packages/core/src/components/utils/lazy-list/lazy.ts new file mode 100644 index 0000000000..b10fe499a5 --- /dev/null +++ b/packages/core/src/components/utils/lazy-list/lazy.ts @@ -0,0 +1,480 @@ +/* + * SPDX-FileCopyrightText: 2024 Siemens AG + * + * SPDX-License-Identifier: MIT + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +// Manually forked from https://github.com/tbranyen/hyperlist to remove +// features a direct document calls +// +// Hyperlist is licensed MIT. https://github.com/tbranyen/hyperlist + +export type VirtualListConfig = { + applyPatch?: ( + element: HTMLElement, + fragment: DocumentFragment | DocumentFragment[] + ) => void; + overrideScrollPosition?: () => void; + rowClassName?: string; + scrollContainer?: HTMLElement; + width: string; + height: string; + afterRender?: () => void; + scrollerTagName?: string; + scroller?: HTMLElement; + useFragment?: boolean; + generate?: (index: number) => HTMLElement; + total?: number; + itemHeight?: number; + horizontal?: boolean; +}; + +const isNumber = (input: unknown) => !Number.isNaN(Number(input)); + +const addClass = (element: HTMLElement, className: string) => { + element.classList.add(className); +}; + +export class VirtualList { + _config: VirtualListConfig; + _lastRepaint: null; + _maxElementHeight: number; + _renderAnimationFrame: number; + _averageHeight: number; + + static readonly defaultConfig: VirtualListConfig = { + width: '100%', + height: '100%', + }; + _element: any; + _scroller: any; + _itemHeights: number[]; + _containerSize: number | string; + _scrollPaddingBottom: number; + _scrollPaddingTop: number; + _scrollHeight: any; + _itemPositions: any; + _screenItemsLen: number; + _lastFrom: number; + _cachedItemsLen: any; + + static create( + element: HTMLElement, + userProvidedConfig: VirtualListConfig = VirtualList.defaultConfig + ) { + return new VirtualList(element, userProvidedConfig); + } + + static mergeStyle(element: HTMLElement, style) { + for (let i in style) { + if (element.style[i] !== style[i]) { + element.style[i] = style[i]; + } + } + } + + static getMaxBrowserHeight() { + // Create two elements, the wrapper is `1px` tall and is transparent and + // positioned at the top of the page. Inside that is an element that gets + // set to 1 billion pixels. Then reads the max height the browser can + // calculate. + const wrapper = document.createElement('div'); + const fixture = document.createElement('div'); + + // As said above, these values get set to put the fixture elements into the + // right visual state. + VirtualList.mergeStyle(wrapper, { + position: 'absolute', + height: '1px', + opacity: 0, + }); + VirtualList.mergeStyle(fixture, { height: '1e7px' }); + + // Add the fixture into the wrapper element. + wrapper.appendChild(fixture); + + // Apply to the page, the values won't kick in unless this is attached. + document.body.appendChild(wrapper); + + // Get the maximum element height in pixels. + const maxElementHeight = fixture.offsetHeight; + + // Remove the element immediately after reading the value. + document.body.removeChild(wrapper); + + return maxElementHeight; + } + + constructor(element: HTMLElement, userProvidedConfig: VirtualListConfig) { + this._lastRepaint = null; + this._maxElementHeight = VirtualList.getMaxBrowserHeight(); + + this.refresh(element, userProvidedConfig); + + const config = this._config; + + // Create internal render loop. + const render = () => { + const scrollTop = this._getScrollPosition(); + const lastRepaint = this._lastRepaint; + + this._renderAnimationFrame = window.requestAnimationFrame(render); + + if (scrollTop === lastRepaint) { + return; + } + + const diff = lastRepaint ? scrollTop - lastRepaint : 0; + if (!lastRepaint || diff < 0 || diff > this._averageHeight) { + let rendered = this._renderChunk(); + + this._lastRepaint = scrollTop; + + if (rendered !== false && typeof config.afterRender === 'function') { + config.afterRender(); + } + } + }; + + render(); + } + + destroy() { + window.cancelAnimationFrame(this._renderAnimationFrame); + } + + refresh( + element: HTMLElement, + userProvidedConfig: VirtualListConfig = VirtualList.defaultConfig + ) { + this._config = userProvidedConfig; + + if (!element || element.nodeType !== 1) { + throw new Error('HyperList requires a valid DOM Node container'); + } + + this._element = element; + + const config = this._config; + + const scroller = + this._scroller || + config.scroller || + document.createElement(config.scrollerTagName || 'tr'); + + // Default configuration option `useFragment` to `true`. + if (typeof config.useFragment !== 'boolean') { + this._config.useFragment = true; + } + + if (!config.generate) { + throw new Error('Missing required `generate` function'); + } + + if (!isNumber(config.total)) { + throw new Error('Invalid required `total` value, expected number'); + } + + if (!Array.isArray(config.itemHeight) && !isNumber(config.itemHeight)) { + throw new Error( + ` + Invalid required \`itemHeight\` value, expected number or array + `.trim() + ); + } else if (isNumber(config.itemHeight)) { + this._itemHeights = Array(config.total).fill(config.itemHeight); + } else { + this._itemHeights = [config.itemHeight]; + } + + // Width and height should be coerced to string representations. Either in + // `%` or `px`. + Object.keys(VirtualList.defaultConfig) + .filter((prop) => prop in config) + .forEach((prop) => { + const value = config[prop]; + const isValueNumber = isNumber(value); + + if (value && typeof value !== 'string' && typeof value !== 'number') { + let msg = `Invalid optional \`${prop}\`, expected string or number`; + throw new Error(msg); + } else if (isValueNumber) { + config[prop] = `${value}px`; + } + }); + + const isHorizontal = Boolean(config.horizontal); + const value = config[isHorizontal ? 'width' : 'height']; + + if (value) { + const isValueNumber = isNumber(value); + const isValuePercent = isValueNumber ? false : value.slice(-1) === '%'; + // Compute the containerHeight as number + const numberValue = isValueNumber + ? parseInt(value, 10) + : parseInt(value.replace(/px|%/, ''), 10); + const innerSize = window[isHorizontal ? 'innerWidth' : 'innerHeight']; + + if (isValuePercent) { + this._containerSize = (innerSize * numberValue) / 100; + } else { + this._containerSize = isNumber(value) ? value : numberValue; + } + } + + const scrollContainer = config.scrollContainer; + const scrollerHeight = config.itemHeight * config.total; + const maxElementHeight = this._maxElementHeight; + + if (scrollerHeight > maxElementHeight) { + console.warn( + [ + 'HyperList: The maximum element height', + maxElementHeight + 'px has', + 'been exceeded; please reduce your item height.', + ].join(' ') + ); + } + + // Decorate the container element with styles that will match + // the user supplied configuration. + const elementStyle = { + width: `${config.width}`, + height: scrollContainer ? `${scrollerHeight}px` : `${config.height}`, + overflow: scrollContainer ? 'none' : 'auto', + position: 'relative', + }; + + VirtualList.mergeStyle(element, elementStyle); + + if (scrollContainer) { + VirtualList.mergeStyle(config.scrollContainer, { overflow: 'auto' }); + } + + const scrollerStyle = { + opacity: '0', + position: 'absolute', + [isHorizontal ? 'height' : 'width']: '1px', + [isHorizontal ? 'width' : 'height']: `${scrollerHeight}px`, + }; + + VirtualList.mergeStyle(scroller, scrollerStyle); + + // Only append the scroller element once. + if (!this._scroller) { + element.appendChild(scroller); + } + + const padding = this._computeScrollPadding(); + this._scrollPaddingBottom = padding.bottom; + this._scrollPaddingTop = padding.top; + + // Set the scroller instance. + this._scroller = scroller; + this._scrollHeight = this._computeScrollHeight(); + + // Reuse the item positions if refreshed, otherwise set to empty array. + this._itemPositions = this._itemPositions || Array(config.total).fill(0); + + // Each index in the array should represent the position in the DOM. + this._computePositions(0); + + // Render after refreshing. Force render if we're calling refresh manually. + this._renderChunk(this._lastRepaint !== null); + + if (typeof config.afterRender === 'function') { + config.afterRender(); + } + } + + _getRow(i) { + const config = this._config; + let item = config.generate(i) as any; + let height = item.height; + + if (height !== undefined && isNumber(height)) { + item = item.element; + + // The height isn't the same as predicted, compute positions again + if (height !== this._itemHeights[i]) { + this._itemHeights[i] = height; + this._computePositions(i); + this._scrollHeight = this._computeScrollHeight(); + } + } else { + height = this._itemHeights[i]; + } + + if (!item || item.nodeType !== 1) { + throw new Error(`Generator did not return a DOM Node for index: ${i}`); + } + + addClass(item, config.rowClassName || 'vrow'); + + const top = this._itemPositions[i] + this._scrollPaddingTop; + + VirtualList.mergeStyle(item, { + position: 'absolute', + [config.horizontal ? 'left' : 'top']: `${top}px`, + }); + + return item; + } + + _getScrollPosition() { + const config = this._config; + + if (typeof config.overrideScrollPosition === 'function') { + return config.overrideScrollPosition(); + } + + return this._element[config.horizontal ? 'scrollLeft' : 'scrollTop']; + } + + _renderChunk(force: boolean = false) { + const config = this._config; + const element = this._element; + const scrollTop = this._getScrollPosition(); + const total = config.total; + + let from = this._getFrom(scrollTop) - 1; + + if (from < 0 || from - this._screenItemsLen < 0) { + from = 0; + } + + if (!force && this._lastFrom === from) { + return false; + } + + this._lastFrom = from; + + let to = from + this._cachedItemsLen; + + if (to > total || to + this._cachedItemsLen > total) { + to = total; + } + + // Append all the new rows in a document fragment that we will later append + // to the parent node + const fragment = config.useFragment + ? document.createDocumentFragment() + : [ + // Sometimes you'll pass fake elements to this tool and Fragments require + // real elements. + ]; + + // The element that forces the container to scroll. + const scroller = this._scroller; + + // Keep the scroller in the list of children. + fragment[config.useFragment ? 'appendChild' : 'push'](scroller); + + for (let i = from; i < to; i++) { + let row = this._getRow(i); + + fragment[config.useFragment ? 'appendChild' : 'push'](row); + } + + if (config.applyPatch) { + return config.applyPatch(element, fragment); + } + + element.innerHTML = ''; + element.appendChild(fragment); + } + + _computePositions(from = 1) { + const config = this._config; + const total = config.total; + + if (from < 1) { + from = 1; + } + + for (let i = from; i < total; i++) { + this._itemPositions[i] = + this._itemHeights[i - 1] + this._itemPositions[i - 1]; + } + } + + _computeScrollHeight() { + const config = this._config; + const isHorizontal = Boolean(config.horizontal); + const total = config.total; + const scrollHeight = + this._itemHeights.reduce((a, b) => a + b, 0) + + this._scrollPaddingBottom + + this._scrollPaddingTop; + + VirtualList.mergeStyle(this._scroller, { + opacity: 0, + position: 'absolute', + top: '0px', + [isHorizontal ? 'height' : 'width']: '1px', + [isHorizontal ? 'width' : 'height']: `${scrollHeight}px`, + }); + + // Calculate the height median + const sortedItemHeights = this._itemHeights.slice(0).sort((a, b) => a - b); + const middle = Math.floor(total / 2); + const averageHeight = + total % 2 === 0 + ? (sortedItemHeights[middle] + sortedItemHeights[middle - 1]) / 2 + : sortedItemHeights[middle]; + + const clientProp = isHorizontal ? 'clientWidth' : 'clientHeight'; + const element = config.scrollContainer + ? config.scrollContainer + : this._element; + const containerHeight = element[clientProp] + ? element[clientProp] + : this._containerSize; + this._screenItemsLen = Math.ceil(containerHeight / averageHeight); + this._containerSize = containerHeight; + + // Cache 3 times the number of items that fit in the container viewport. + this._cachedItemsLen = Math.max( + this._cachedItemsLen || 0, + this._screenItemsLen * 3 + ); + this._averageHeight = averageHeight; + + return scrollHeight; + } + + _computeScrollPadding() { + const config = this._config; + const isHoriz = Boolean(config.horizontal); + const styles = window.getComputedStyle(this._element); + + const padding = (location: string) => { + const cssValue = styles.getPropertyValue(`padding-${location}`); + return parseInt(cssValue, 10) || 0; + }; + + if (isHoriz) { + return { + bottom: padding('right'), + top: padding('left'), + }; + } else { + return { + bottom: padding('bottom'), + top: padding('top'), + }; + } + } + + _getFrom(scrollTop: number) { + let i = 0; + + while (this._itemPositions[i] < scrollTop) { + i++; + } + + return i; + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45f6dec62a..e291c7c8cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,10 +156,10 @@ importers: version: 10.1.0 jest: specifier: ^29.3.1 - version: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + version: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) jest-preset-angular: specifier: ^12.2.3 - version: 12.2.6(oqjflszfxbqjg7k6ghkytlxqb4) + version: 12.2.6(kzhkrveqbt6o6ftxcikbrqnxuy) ng-packagr: specifier: ^14.2.0 version: 14.3.0(@angular/compiler-cli@13.4.0(@angular/compiler@13.4.0)(typescript@4.6.4))(@types/node@20.16.5)(tslib@2.6.2)(typescript@4.6.4) @@ -168,7 +168,7 @@ importers: version: 7.5.7 ts-jest: specifier: ^29.0.3 - version: 29.1.1(@babel/core@7.23.2)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)))(typescript@4.6.4) + version: 29.1.1(@babel/core@7.23.2)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)))(typescript@4.6.4) typescript: specifier: 4.6.4 version: 4.6.4 @@ -245,7 +245,7 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^14.2.0 - version: 14.2.13(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@swc/core@1.9.2)(chokidar@3.5.3)(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)))(karma@6.4.2)(ng-packagr@14.3.0(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@types/node@20.16.5)(tslib@2.6.2)(typescript@4.7.4))(typescript@4.7.4) + version: 14.2.13(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@swc/core@1.9.2)(chokidar@3.5.3)(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)))(karma@6.4.2)(ng-packagr@14.3.0(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@types/node@20.16.5)(tslib@2.6.2)(typescript@4.7.4))(typescript@4.7.4) '@angular/cli': specifier: ~14.2.0 version: 14.2.13(chokidar@3.5.3) @@ -294,9 +294,6 @@ importers: animejs: specifier: ~3.2.1 version: 3.2.1 - hyperlist: - specifier: ^1.0.0 - version: 1.0.0 luxon: specifier: ^3.4.4 version: 3.4.4 @@ -815,7 +812,7 @@ importers: version: 3.0.0 jest: specifier: ^29.1.2 - version: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + version: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) jest-environment-jsdom: specifier: ^29.1.2 version: 29.7.0 @@ -982,7 +979,7 @@ importers: version: 8.4.2(storybook@8.4.2(prettier@3.0.3)) '@storybook/test-runner': specifier: ^0.19.1 - version: 0.19.1(@types/node@20.16.5)(storybook@8.4.2(prettier@3.0.3))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + version: 0.19.1(@types/node@20.16.5)(storybook@8.4.2(prettier@3.0.3))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) '@storybook/web-components': specifier: ^8.4.2 version: 8.4.2(lit@3.2.1)(storybook@8.4.2(prettier@3.0.3)) @@ -9993,9 +9990,6 @@ packages: engines: {node: '>=14'} hasBin: true - hyperlist@1.0.0: - resolution: {integrity: sha512-1qAjO29EJW/mPyqY+9wFjruD2YWur1dPsPYmt9RvMX6P+8Cr2UmT75MCWjjK+1/4Jxc3sm/G3Kr8DzGgEDRG+Q==} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -16419,7 +16413,7 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-angular@14.2.13(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@swc/core@1.9.2)(chokidar@3.5.3)(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)))(karma@6.4.2)(ng-packagr@14.3.0(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@types/node@20.16.5)(tslib@2.6.2)(typescript@4.7.4))(typescript@4.7.4)': + '@angular-devkit/build-angular@14.2.13(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@swc/core@1.9.2)(chokidar@3.5.3)(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)))(karma@6.4.2)(ng-packagr@14.3.0(@angular/compiler-cli@14.3.0(@angular/compiler@14.3.0(@angular/core@14.3.0(rxjs@7.5.7)(zone.js@0.11.8)))(typescript@4.7.4))(@types/node@20.16.5)(tslib@2.6.2)(typescript@4.7.4))(typescript@4.7.4)': dependencies: '@ampproject/remapping': 2.2.0 '@angular-devkit/architect': 0.1402.13(chokidar@3.5.3) @@ -16482,9 +16476,9 @@ snapshots: typescript: 4.7.4 webpack: 5.76.1(@swc/core@1.9.2) webpack-dev-middleware: 5.3.3(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)) - webpack-dev-server: 4.11.0(webpack@5.76.1(@swc/core@1.9.2)) + webpack-dev-server: 4.11.0(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)) webpack-merge: 5.8.0 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)))(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)))(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)) optionalDependencies: esbuild: 0.15.5 karma: 6.4.2 @@ -19658,7 +19652,7 @@ snapshots: '@types/node': 20.5.1 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.6.2) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.4.5))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))(typescript@5.6.2) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.6.2))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))(typescript@5.6.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -21223,7 +21217,77 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.16.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.16.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -21237,7 +21301,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -22301,7 +22365,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) storybook: 8.4.2(prettier@3.0.3) - '@storybook/test-runner@0.19.1(@types/node@20.16.5)(storybook@8.4.2(prettier@3.0.3))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5))': + '@storybook/test-runner@0.19.1(@types/node@20.16.5)(storybook@8.4.2(prettier@3.0.3))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))': dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.0 @@ -22315,14 +22379,14 @@ snapshots: '@swc/core': 1.9.2 '@swc/jest': 0.2.37(@swc/core@1.9.2) expect-playwright: 0.8.0 - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) jest-circus: 29.7.0 jest-environment-node: 29.7.0 jest-junit: 16.0.0 - jest-playwright-preset: 4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5))) + jest-playwright-preset: 4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))) jest-runner: 29.7.0 jest-serializer-html: 7.1.0 - jest-watch-typeahead: 2.2.2(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5))) + jest-watch-typeahead: 2.2.2(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))) nyc: 15.1.0 playwright: 1.39.0 transitivePeerDependencies: @@ -25282,7 +25346,7 @@ snapshots: corser@2.0.1: {} - cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.4.5))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))(typescript@5.6.2): + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.6.2))(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))(typescript@5.6.2): dependencies: '@types/node': 20.5.1 cosmiconfig: 8.3.6(typescript@5.6.2) @@ -25363,13 +25427,43 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)): 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.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)): + 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.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -28364,7 +28458,7 @@ snapshots: tapable: 2.2.1 webpack: 5.89.0(@swc/core@1.9.2) - html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)): + html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -28525,8 +28619,6 @@ snapshots: husky@8.0.3: {} - hyperlist@1.0.0: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -29111,16 +29203,54 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-cli@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-cli@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -29161,7 +29291,69 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)): + dependencies: + '@babel/core': 7.23.7 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.23.7) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.16.5 + ts-node: 10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)): + dependencies: + '@babel/core': 7.23.7 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.23.7) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.16.5 + ts-node: 10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)): dependencies: '@babel/core': 7.23.7 '@jest/test-sequencer': 29.7.0 @@ -29323,10 +29515,10 @@ snapshots: '@types/node': 20.16.5 jest-util: 29.7.0 - jest-playwright-preset@4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5))): + jest-playwright-preset@4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))): dependencies: expect-playwright: 0.8.0 - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) jest-circus: 29.7.0 jest-environment-node: 29.7.0 jest-process-manager: 0.4.0 @@ -29343,7 +29535,7 @@ snapshots: optionalDependencies: jest-resolve: 29.7.0 - jest-preset-angular@12.2.6(oqjflszfxbqjg7k6ghkytlxqb4): + jest-preset-angular@12.2.6(kzhkrveqbt6o6ftxcikbrqnxuy): dependencies: '@angular-devkit/build-angular': 14.2.13(@angular/compiler-cli@13.4.0(@angular/compiler@13.4.0)(typescript@4.6.4))(@swc/core@1.9.2)(chokidar@3.5.3)(html-webpack-plugin@5.6.3(webpack@5.96.1(@swc/core@1.9.2)))(karma@6.4.2)(ng-packagr@14.3.0(@angular/compiler-cli@13.4.0(@angular/compiler@13.4.0)(typescript@4.6.4))(@types/node@20.16.5)(tslib@2.6.2)(typescript@4.6.4))(typescript@4.6.4) '@angular/compiler-cli': 13.4.0(@angular/compiler@13.4.0)(typescript@4.6.4) @@ -29351,10 +29543,10 @@ snapshots: '@angular/platform-browser-dynamic': 14.3.0(@angular/common@13.4.0(@angular/core@13.4.0(rxjs@7.5.7)(zone.js@0.11.8))(rxjs@7.5.7))(@angular/compiler@13.4.0)(@angular/core@13.4.0(rxjs@7.5.7)(zone.js@0.11.8))(@angular/platform-browser@14.3.0(@angular/animations@14.3.0(@angular/core@13.4.0(rxjs@7.5.7)(zone.js@0.11.8)))(@angular/common@13.4.0(@angular/core@13.4.0(rxjs@7.5.7)(zone.js@0.11.8))(rxjs@7.5.7))(@angular/core@13.4.0(rxjs@7.5.7)(zone.js@0.11.8))) bs-logger: 0.2.6 esbuild-wasm: 0.19.5 - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) jest-environment-jsdom: 28.1.3 pretty-format: 28.1.3 - ts-jest: 28.0.8(@babel/core@7.23.2)(esbuild@0.19.12)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)))(typescript@4.6.4) + ts-jest: 28.0.8(@babel/core@7.23.2)(esbuild@0.19.12)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)))(typescript@4.6.4) typescript: 4.6.4 optionalDependencies: esbuild: 0.19.12 @@ -29513,11 +29705,11 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-watch-typeahead@2.2.2(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5))): + jest-watch-typeahead@2.2.2(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2))): dependencies: ansi-escapes: 6.2.1 chalk: 5.3.0 - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) jest-regex-util: 29.6.3 jest-watcher: 29.7.0 slash: 5.1.0 @@ -29566,12 +29758,36 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)): + jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.6.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -35012,11 +35228,11 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@28.0.8(@babel/core@7.23.2)(esbuild@0.19.12)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)))(typescript@4.6.4): + ts-jest@28.0.8(@babel/core@7.23.2)(esbuild@0.19.12)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)))(typescript@4.6.4): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) jest-util: 28.1.3 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -35028,11 +35244,11 @@ snapshots: '@babel/core': 7.23.2 esbuild: 0.19.12 - ts-jest@29.1.1(@babel/core@7.23.2)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)))(typescript@4.6.4): + ts-jest@29.1.1(@babel/core@7.23.2)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)))(typescript@4.6.4): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5)) + jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -35103,6 +35319,48 @@ snapshots: optionalDependencies: '@swc/core': 1.9.2 + ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.6.4): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.16.5 + acorn: 8.12.0 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.6.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.9.2 + optional: true + + ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@4.9.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.16.5 + acorn: 8.12.0 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.9.2 + optional: true + ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.5.1)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -36031,15 +36289,6 @@ snapshots: schema-utils: 4.2.0 webpack: 5.76.1(@swc/core@1.9.2)(esbuild@0.15.5) - webpack-dev-middleware@5.3.3(webpack@5.76.1(@swc/core@1.9.2)): - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.76.1(@swc/core@1.9.2) - webpack-dev-middleware@5.3.3(webpack@5.89.0(@swc/core@1.9.2)): dependencies: colorette: 2.0.20 @@ -36087,44 +36336,6 @@ snapshots: - supports-color - utf-8-validate - webpack-dev-server@4.11.0(webpack@5.76.1(@swc/core@1.9.2)): - dependencies: - '@types/bonjour': 3.5.12 - '@types/connect-history-api-fallback': 1.5.2 - '@types/express': 4.17.20 - '@types/serve-index': 1.9.3 - '@types/serve-static': 1.15.4 - '@types/sockjs': 0.3.35 - '@types/ws': 8.5.8 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.2 - graceful-fs: 4.2.11 - html-entities: 2.4.0 - http-proxy-middleware: 2.0.6(@types/express@4.17.20) - ipaddr.js: 2.1.0 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.2.0 - selfsigned: 2.1.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.76.1(@swc/core@1.9.2) - webpack-dev-middleware: 5.3.3(webpack@5.76.1(@swc/core@1.9.2)) - ws: 8.14.2 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - webpack-dev-server@4.15.1(webpack@5.89.0(@swc/core@1.9.2)): dependencies: '@types/bonjour': 3.5.12 @@ -36178,12 +36389,12 @@ snapshots: webpack-sources@3.2.3: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)))(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)))(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)): dependencies: typed-assert: 1.0.9 webpack: 5.76.1(@swc/core@1.9.2) optionalDependencies: - html-webpack-plugin: 5.6.3(webpack@5.76.1(@swc/core@1.9.2)) + html-webpack-plugin: 5.6.3(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)) webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.96.1(@swc/core@1.9.2)))(webpack@5.76.1(@swc/core@1.9.2)(esbuild@0.15.5)): dependencies: