From a0ee316eb8daf8179ff709756be5e2dd3d964a03 Mon Sep 17 00:00:00 2001 From: CollinLiu813 Date: Tue, 24 Jan 2023 13:25:26 -0700 Subject: [PATCH] reworked geometry demo --- diagrams-demo-project/package.json | 2 + diagrams-demo-project/src/BodyWidget.tsx | 3 +- .../src/custom-node-ts/TSCustomNodeModel.ts | 3 +- diagrams-demo-project/tsconfig.json | 2 +- diagrams-demo-project/webpack.config.js | 26 +- package.json | 6 +- packages/geometry/src/Bounds.ts | 28 + packages/geometry/src/Matrix.ts | 50 ++ packages/geometry/src/Point.ts | 50 +- packages/geometry/src/Polygon.ts | 72 +-- packages/geometry/src/Rectangle.ts | 40 +- packages/geometry/src/index.ts | 2 + packages/geometry/src/toolkit.ts | 45 ++ packages/geometry/tsconfig.json | 1 + .../src/core-models/BasePositionModel.ts | 2 +- .../src/states/SelectionBoxState.ts | 7 +- .../react-diagrams-core/src/DiagramEngine.ts | 15 +- .../src/entities/link/LinkModel.ts | 12 +- .../src/entities/node/NodeModel.ts | 2 +- .../src/entities/port/PortModel.ts | 2 +- pnpm-lock.yaml | 568 +++++++++++------- 21 files changed, 543 insertions(+), 395 deletions(-) create mode 100644 packages/geometry/src/Bounds.ts create mode 100644 packages/geometry/src/toolkit.ts diff --git a/diagrams-demo-project/package.json b/diagrams-demo-project/package.json index 9562f9a..76d3fd4 100644 --- a/diagrams-demo-project/package.json +++ b/diagrams-demo-project/package.json @@ -30,6 +30,8 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "source-map-loader": "^4.0.1", + "html-webpack-plugin": "^5.5.0", "@babel/core": "^7.20.12", "@babel/preset-react": "^7.18.6", "@types/react": "^18.0.27", diff --git a/diagrams-demo-project/src/BodyWidget.tsx b/diagrams-demo-project/src/BodyWidget.tsx index d30469d..9529f44 100644 --- a/diagrams-demo-project/src/BodyWidget.tsx +++ b/diagrams-demo-project/src/BodyWidget.tsx @@ -1,6 +1,5 @@ import * as React from 'react'; -import { DiagramEngine } from '@projectstorm/react-diagrams'; -import { CanvasWidget } from '@projectstorm/react-canvas-core'; +import { DiagramEngine, CanvasWidget } from '@projectstorm/react-diagrams'; export interface BodyWidgetProps { engine: DiagramEngine; diff --git a/diagrams-demo-project/src/custom-node-ts/TSCustomNodeModel.ts b/diagrams-demo-project/src/custom-node-ts/TSCustomNodeModel.ts index 43414dc..6b7f934 100644 --- a/diagrams-demo-project/src/custom-node-ts/TSCustomNodeModel.ts +++ b/diagrams-demo-project/src/custom-node-ts/TSCustomNodeModel.ts @@ -1,5 +1,4 @@ -import { NodeModel, DefaultPortModel } from '@projectstorm/react-diagrams'; -import { BaseModelOptions } from '@projectstorm/react-canvas-core'; +import { BaseModelOptions, DefaultPortModel, NodeModel } from '@projectstorm/react-diagrams'; export interface TSCustomNodeModelOptions extends BaseModelOptions { color?: string; diff --git a/diagrams-demo-project/tsconfig.json b/diagrams-demo-project/tsconfig.json index 9028d02..f04008f 100644 --- a/diagrams-demo-project/tsconfig.json +++ b/diagrams-demo-project/tsconfig.json @@ -5,7 +5,7 @@ "jsx": "react", "allowJs": true, "target": "es6", - "moduleResolution": "node" + "module": "CommonJS" }, "include": [ "./src" diff --git a/diagrams-demo-project/webpack.config.js b/diagrams-demo-project/webpack.config.js index c8359bf..9af1e29 100644 --- a/diagrams-demo-project/webpack.config.js +++ b/diagrams-demo-project/webpack.config.js @@ -1,6 +1,7 @@ const path = require('path'); const production = process.env.NODE_ENV === 'production'; const TerserPlugin = require('terser-webpack-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { mode: production ? 'production' : 'development', @@ -23,8 +24,18 @@ module.exports = { }) ] }, + plugins: [ + new HtmlWebpackPlugin({ + template: 'index.html' + }) + ], module: { rules: [ + { + enforce: 'pre', + test: /\.js$/, + loader: 'source-map-loader' + }, { test: /\.css$/, use: ['style-loader', 'css-loader'] @@ -36,18 +47,15 @@ module.exports = { }, { test: /\.tsx?$/, - loader: 'ts-loader', - options: { - transpileOnly: true - } + loader: 'ts-loader' } ] }, - devServer: { - host: '0.0.0.0', - compress: true, - disableHostCheck: true, - overlay: true + client: { + overlay: true + }, + hot: false, + compress: true } }; diff --git a/package.json b/package.json index ccbab07..a704f47 100644 --- a/package.json +++ b/package.json @@ -31,10 +31,10 @@ "@changesets/cli": "^2.26.0", "@types/jest": "^29.2.6", "@types/node": "^18.11.18", - "jest": "^29.3.1", - "jest-cli": "^29.3.1", + "jest": "^29.4.0", + "jest-cli": "^29.4.0", "prettier": "^2.8.3", - "rimraf": "^4.1.1", + "rimraf": "^4.1.2", "source-map-loader": "^4.0.1", "terser-webpack-plugin": "^5.3.6", "ts-jest": "^29.0.5", diff --git a/packages/geometry/src/Bounds.ts b/packages/geometry/src/Bounds.ts new file mode 100644 index 0000000..a0d2e9b --- /dev/null +++ b/packages/geometry/src/Bounds.ts @@ -0,0 +1,28 @@ +import { Point } from './Point'; + +export enum BoundsCorner { + TOP_LEFT = 'TL', + TOP_RIGHT = 'TR', + BOTTOM_RIGHT = 'BR', + BOTTOM_LEFT = 'BL' +} + +export type Bounds = { [k in BoundsCorner]: Point }; + +export const boundsFromPositionAndSize = (x: number, y: number, width: number, height: number): Bounds => { + return { + [BoundsCorner.TOP_LEFT]: new Point(x, y), + [BoundsCorner.TOP_RIGHT]: new Point(x + width, y), + [BoundsCorner.BOTTOM_RIGHT]: new Point(x + width, y + height), + [BoundsCorner.BOTTOM_LEFT]: new Point(x, y + height) + }; +}; + +export const createEmptyBounds = () => { + return { + [BoundsCorner.TOP_LEFT]: new Point(), + [BoundsCorner.TOP_RIGHT]: new Point(), + [BoundsCorner.BOTTOM_RIGHT]: new Point(), + [BoundsCorner.BOTTOM_LEFT]: new Point() + }; +}; diff --git a/packages/geometry/src/Matrix.ts b/packages/geometry/src/Matrix.ts index 3ed28e3..202fb8a 100644 --- a/packages/geometry/src/Matrix.ts +++ b/packages/geometry/src/Matrix.ts @@ -1,3 +1,5 @@ +import { Point } from './Point'; + export class Matrix { matrix: number[][]; @@ -19,4 +21,52 @@ export class Matrix { get(rowIndex: number, columnIndex: number): number { return this.asArray()[rowIndex][columnIndex]; } + + public static multiply(...matrices: Matrix[]): Matrix { + let m: Matrix = matrices[0]; + for (let i = 1; i < matrices.length; i++) { + m = m.mmul(matrices[i]); + } + return m; + } + + public static scaleMatrix(x: number, y: number): Matrix { + return new Matrix([ + [x, 0, 0], + [0, y, 0], + [0, 0, 1] + ]); + } + + public static translateMatrix(x: number, y: number): Matrix { + return new Matrix([ + [1, 0, x], + [0, 1, y], + [0, 0, 1] + ]); + } + + public static rotateMatrix(deg: number): Matrix { + return new Matrix([ + [Math.cos(deg), -1 * Math.sin(deg), 0], + [Math.sin(deg), Math.cos(deg), 0], + [0, 0, 1] + ]); + } + + static createScaleMatrix(x, y, origin: Point): Matrix { + return this.multiply( + Matrix.translateMatrix(origin.x, origin.y), + Matrix.scaleMatrix(x, y), + Matrix.translateMatrix(-origin.x, -origin.y) + ); + } + + static createRotateMatrix(deg: number, origin: Point): Matrix { + return this.multiply( + Matrix.translateMatrix(origin.x, origin.y), + Matrix.rotateMatrix(deg), + Matrix.translateMatrix(-origin.x, -origin.y) + ); + } } diff --git a/packages/geometry/src/Point.ts b/packages/geometry/src/Point.ts index eee4ad4..d2b2b2a 100644 --- a/packages/geometry/src/Point.ts +++ b/packages/geometry/src/Point.ts @@ -4,7 +4,7 @@ export class Point { x: number; y: number; - constructor(x: number, y: number) { + constructor(x: number = 0, y: number = 0) { this.x = x; this.y = y; } @@ -35,52 +35,4 @@ export class Point { public static middlePoint(pointA: Point, pointB: Point): Point { return new Point((pointB.x + pointA.x) / 2, (pointB.y + pointA.y) / 2); } - - public static multiply(...matrices: Matrix[]): Matrix { - let m: Matrix = matrices[0]; - for (let i = 1; i < matrices.length; i++) { - m = m.mmul(matrices[i]); - } - return m; - } - - public static scaleMatrix(x: number, y: number): Matrix { - return new Matrix([ - [x, 0, 0], - [0, y, 0], - [0, 0, 1] - ]); - } - - public static translateMatrix(x: number, y: number): Matrix { - return new Matrix([ - [1, 0, x], - [0, 1, y], - [0, 0, 1] - ]); - } - - public static rotateMatrix(deg: number): Matrix { - return new Matrix([ - [Math.cos(deg), -1 * Math.sin(deg), 0], - [Math.sin(deg), Math.cos(deg), 0], - [0, 0, 1] - ]); - } - - static createScaleMatrix(x, y, origin: Point): Matrix { - return this.multiply( - Point.translateMatrix(origin.x, origin.y), - Point.scaleMatrix(x, y), - Point.translateMatrix(-origin.x, -origin.y) - ); - } - - static createRotateMatrix(deg: number, origin: Point): Matrix { - return this.multiply( - Point.translateMatrix(origin.x, origin.y), - Point.rotateMatrix(deg), - Point.translateMatrix(-origin.x, -origin.y) - ); - } } diff --git a/packages/geometry/src/Polygon.ts b/packages/geometry/src/Polygon.ts index 5d7a997..3437ba5 100644 --- a/packages/geometry/src/Polygon.ts +++ b/packages/geometry/src/Polygon.ts @@ -1,6 +1,8 @@ import { Point } from './Point'; import * as _ from 'lodash'; import { Matrix } from './Matrix'; +import { boundingBoxFromPoints } from './toolkit'; +import { Bounds, BoundsCorner } from './Bounds'; export class Polygon { protected points: Point[]; @@ -22,7 +24,7 @@ export class Polygon { } scale(x, y, origin: Point) { - let matrix = Point.createScaleMatrix(x, y, origin); + let matrix = Matrix.createScaleMatrix(x, y, origin); _.forEach(this.points, (point) => { point.transform(matrix); }); @@ -43,7 +45,7 @@ export class Polygon { } rotate(degrees: number) { - this.transform(Point.createRotateMatrix(degrees / (180 / Math.PI), this.getOrigin())); + this.transform(Matrix.createRotateMatrix(degrees / (180 / Math.PI), this.getOrigin())); } translate(offsetX: number, offsetY: number) { @@ -68,69 +70,11 @@ export class Polygon { if (this.points.length === 0) { return null; } - let dimensions = this.getBoundingBox(); - return Point.middlePoint(dimensions.getTopLeft(), dimensions.getBottomRight()); + let dimensions = boundingBoxFromPoints(this.points); + return Point.middlePoint(dimensions[BoundsCorner.TOP_LEFT], dimensions[BoundsCorner.BOTTOM_RIGHT]); } - static boundingBoxFromPolygons(polygons: Polygon[]): Rectangle { - return Polygon.boundingBoxFromPoints( - _.flatMap(polygons, (polygon) => { - return polygon.getPoints(); - }) - ); - } - - static boundingBoxFromPoints(points: Point[]): Rectangle { - if (points.length === 0) { - return new Rectangle(0, 0, 0, 0); - } - - let minX = points[0].x; - let maxX = points[0].x; - let minY = points[0].y; - let maxY = points[0].y; - - for (let i = 1; i < points.length; i++) { - if (points[i].x < minX) { - minX = points[i].x; - } - if (points[i].x > maxX) { - maxX = points[i].x; - } - if (points[i].y < minY) { - minY = points[i].y; - } - if (points[i].y > maxY) { - maxY = points[i].y; - } - } - - return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY)); - } - - getBoundingBox(): Rectangle { - let minX = this.points[0].x; - let maxX = this.points[0].x; - let minY = this.points[0].y; - let maxY = this.points[0].y; - - for (let i = 1; i < this.points.length; i++) { - if (this.points[i].x < minX) { - minX = this.points[i].x; - } - if (this.points[i].x > maxX) { - maxX = this.points[i].x; - } - if (this.points[i].y < minY) { - minY = this.points[i].y; - } - if (this.points[i].y > maxY) { - maxY = this.points[i].y; - } - } - - return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY)); + getBoundingBox(): Bounds { + return boundingBoxFromPoints(this.points); } } - -import { Rectangle } from './Rectangle'; diff --git a/packages/geometry/src/Rectangle.ts b/packages/geometry/src/Rectangle.ts index 7d6724e..d5847d5 100644 --- a/packages/geometry/src/Rectangle.ts +++ b/packages/geometry/src/Rectangle.ts @@ -1,27 +1,37 @@ import { Point } from './Point'; import { Polygon } from './Polygon'; +import { Bounds, BoundsCorner, boundsFromPositionAndSize, createEmptyBounds } from './Bounds'; export class Rectangle extends Polygon { - constructor(tl: Point, tr: Point, br: Point, bl: Point); - constructor(position: Point, width: number, height: number); - constructor(x?: number, y?: number, width?: number, height?: number); - - constructor(a: any = 0, b: any = 0, c: any = 0, d: any = 0) { - if (a instanceof Point && b instanceof Point && c instanceof Point && d instanceof Point) { - super([a, b, c, d]); - } else if (a instanceof Point) { - super([a, new Point(a.x + b, a.y), new Point(a.x + b, a.y + c), new Point(a.x, a.y + c)]); - } else { - super(Rectangle.pointsFromBounds(a, b, c, d)); - } + static fromPositionAndSize(x: number, y: number, width: number, height: number) { + return new Rectangle(boundsFromPositionAndSize(x, y, width, height)); + } + + static fromPointAndSize(position: Point, width: number, height: number) { + return new Rectangle(boundsFromPositionAndSize(position.x, position.y, width, height)); } - static pointsFromBounds(x: number, y: number, width: number, height: number): Point[] { - return [new Point(x, y), new Point(x + width, y), new Point(x + width, y + height), new Point(x, y + height)]; + constructor(points?: Bounds) { + if (!points) { + points = createEmptyBounds(); + } + + super([ + points[BoundsCorner.TOP_LEFT], + points[BoundsCorner.TOP_RIGHT], + points[BoundsCorner.BOTTOM_RIGHT], + points[BoundsCorner.BOTTOM_LEFT] + ]); } updateDimensions(x: number, y: number, width: number, height: number) { - this.points = Rectangle.pointsFromBounds(x, y, width, height); + const points = boundsFromPositionAndSize(x, y, width, height); + this.setPoints([ + points[BoundsCorner.TOP_LEFT], + points[BoundsCorner.TOP_RIGHT], + points[BoundsCorner.BOTTOM_RIGHT], + points[BoundsCorner.BOTTOM_LEFT] + ]); } setPoints(points: Point[]) { diff --git a/packages/geometry/src/index.ts b/packages/geometry/src/index.ts index f2a66df..d739267 100644 --- a/packages/geometry/src/index.ts +++ b/packages/geometry/src/index.ts @@ -3,3 +3,5 @@ export * from './Matrix'; export * from './Polygon'; export * from './Rectangle'; export * from './BezierCurve'; +export * from './toolkit'; +export * from './Bounds'; diff --git a/packages/geometry/src/toolkit.ts b/packages/geometry/src/toolkit.ts new file mode 100644 index 0000000..f24f8b8 --- /dev/null +++ b/packages/geometry/src/toolkit.ts @@ -0,0 +1,45 @@ +import { Point } from './Point'; +import * as _ from 'lodash'; +import { Polygon } from './Polygon'; +import { Bounds, BoundsCorner, createEmptyBounds } from './Bounds'; + +export const boundingBoxFromPoints = (points: Point[]): Bounds => { + if (points.length === 0) { + return createEmptyBounds(); + } + + let minX = points[0].x; + let maxX = points[0].x; + let minY = points[0].y; + let maxY = points[0].y; + + for (let i = 1; i < points.length; i++) { + if (points[i].x < minX) { + minX = points[i].x; + } + if (points[i].x > maxX) { + maxX = points[i].x; + } + if (points[i].y < minY) { + minY = points[i].y; + } + if (points[i].y > maxY) { + maxY = points[i].y; + } + } + + return { + [BoundsCorner.TOP_LEFT]: new Point(minX, minY), + [BoundsCorner.TOP_RIGHT]: new Point(maxX, minY), + [BoundsCorner.BOTTOM_RIGHT]: new Point(maxX, maxY), + [BoundsCorner.BOTTOM_LEFT]: new Point(minX, maxY) + }; +}; + +export const boundingBoxFromPolygons = (polygons: Polygon[]): Bounds => { + return boundingBoxFromPoints( + _.flatMap(polygons, (polygon) => { + return polygon.getPoints(); + }) + ); +}; diff --git a/packages/geometry/tsconfig.json b/packages/geometry/tsconfig.json index 3b6b009..1151c42 100644 --- a/packages/geometry/tsconfig.json +++ b/packages/geometry/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "outDir": "dist", "rootDir": "src", + "sourceMap": true, "declarationDir": "dist/@types", "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo" }, diff --git a/packages/react-canvas-core/src/core-models/BasePositionModel.ts b/packages/react-canvas-core/src/core-models/BasePositionModel.ts index 4e0c300..19001e7 100644 --- a/packages/react-canvas-core/src/core-models/BasePositionModel.ts +++ b/packages/react-canvas-core/src/core-models/BasePositionModel.ts @@ -39,7 +39,7 @@ export class BasePositionModel) { diff --git a/packages/react-canvas-core/src/states/SelectionBoxState.ts b/packages/react-canvas-core/src/states/SelectionBoxState.ts index d8b1396..d26c434 100644 --- a/packages/react-canvas-core/src/states/SelectionBoxState.ts +++ b/packages/react-canvas-core/src/states/SelectionBoxState.ts @@ -2,6 +2,7 @@ import { AbstractDisplacementState, AbstractDisplacementStateEvent } from '../co import { State } from '../core-state/State'; import { SelectionLayerModel } from '../entities/selection/SelectionLayerModel'; import { Point, Rectangle } from '@projectstorm/geometry'; +import { BasePositionModel } from '../core-models/BasePositionModel'; import { ModelGeometryInterface } from '../core/ModelGeometryInterface'; export interface SimpleClientRect { @@ -67,7 +68,11 @@ export class SelectionBoxState extends AbstractDisplacementState { if (event.virtualDisplacementY < 0) { relative.y -= Math.abs(event.virtualDisplacementY); } - const rect = new Rectangle(relative, Math.abs(event.virtualDisplacementX), Math.abs(event.virtualDisplacementY)); + const rect = Rectangle.fromPointAndSize( + relative, + Math.abs(event.virtualDisplacementX), + Math.abs(event.virtualDisplacementY) + ); for (let model of this.engine.getModel().getSelectionEntities()) { if ((model as unknown as ModelGeometryInterface).getBoundingBox) { diff --git a/packages/react-diagrams-core/src/DiagramEngine.ts b/packages/react-diagrams-core/src/DiagramEngine.ts index 41b3ab2..3f6be24 100644 --- a/packages/react-diagrams-core/src/DiagramEngine.ts +++ b/packages/react-diagrams-core/src/DiagramEngine.ts @@ -2,17 +2,17 @@ import { NodeModel } from './entities/node/NodeModel'; import { PortModel } from './entities/port/PortModel'; import { LinkModel } from './entities/link/LinkModel'; import { LabelModel } from './entities/label/LabelModel'; -import { Point, Rectangle, Polygon } from '@projectstorm/geometry'; +import { boundingBoxFromPolygons, Point, Rectangle } from '@projectstorm/geometry'; import { MouseEvent } from 'react'; import { AbstractModelFactory, AbstractReactFactory, BaseModel, CanvasEngine, - FactoryBank, - Toolkit, CanvasEngineListener, - CanvasEngineOptions + CanvasEngineOptions, + FactoryBank, + Toolkit } from '@projectstorm/react-canvas-core'; import { DiagramModel } from './models/DiagramModel'; @@ -187,7 +187,7 @@ export class DiagramEngine extends CanvasEngine node.getBoundingBox())); + return new Rectangle(boundingBoxFromPolygons(nodes.map((node) => node.getBoundingBox()))); } } diff --git a/packages/react-diagrams-core/src/entities/link/LinkModel.ts b/packages/react-diagrams-core/src/entities/link/LinkModel.ts index cf98b39..d0059ee 100644 --- a/packages/react-diagrams-core/src/entities/link/LinkModel.ts +++ b/packages/react-diagrams-core/src/entities/link/LinkModel.ts @@ -4,7 +4,7 @@ import * as _ from 'lodash'; import { LabelModel } from '../label/LabelModel'; import { DiagramEngine } from '../../DiagramEngine'; import { DiagramModel } from '../../models/DiagramModel'; -import { Point, Polygon, Rectangle } from '@projectstorm/geometry'; +import { boundingBoxFromPoints, Point, Rectangle } from '@projectstorm/geometry'; import { BaseEntityEvent, BaseModel, @@ -54,10 +54,12 @@ export class LinkModel } getBoundingBox(): Rectangle { - return Polygon.boundingBoxFromPoints( - _.map(this.points, (point: PointModel) => { - return point.getPosition(); - }) + return new Rectangle( + boundingBoxFromPoints( + _.map(this.points, (point: PointModel) => { + return point.getPosition(); + }) + ) ); } diff --git a/packages/react-diagrams-core/src/entities/node/NodeModel.ts b/packages/react-diagrams-core/src/entities/node/NodeModel.ts index c7a3f42..e265958 100644 --- a/packages/react-diagrams-core/src/entities/node/NodeModel.ts +++ b/packages/react-diagrams-core/src/entities/node/NodeModel.ts @@ -36,7 +36,7 @@ export class NodeModel extends } getBoundingBox(): Rectangle { - return new Rectangle(this.getPosition(), this.width, this.height); + return Rectangle.fromPointAndSize(this.getPosition(), this.width, this.height); } setPosition(point: Point): void; diff --git a/packages/react-diagrams-core/src/entities/port/PortModel.ts b/packages/react-diagrams-core/src/entities/port/PortModel.ts index 7e5af39..efc05cc 100644 --- a/packages/react-diagrams-core/src/entities/port/PortModel.ts +++ b/packages/react-diagrams-core/src/entities/port/PortModel.ts @@ -143,7 +143,7 @@ export class PortModel extends } getBoundingBox(): Rectangle { - return new Rectangle(this.position, this.width, this.height); + return Rectangle.fromPointAndSize(this.position, this.width, this.height); } updateCoords(coords: Rectangle) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9480744..6b30f12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,10 +7,10 @@ importers: '@changesets/cli': ^2.26.0 '@types/jest': ^29.2.6 '@types/node': ^18.11.18 - jest: ^29.3.1 - jest-cli: ^29.3.1 + jest: ^29.4.0 + jest-cli: ^29.4.0 prettier: ^2.8.3 - rimraf: ^4.1.1 + rimraf: ^4.1.2 source-map-loader: ^4.0.1 terser-webpack-plugin: ^5.3.6 ts-jest: ^29.0.5 @@ -24,13 +24,13 @@ importers: '@changesets/cli': 2.26.0 '@types/jest': 29.2.6 '@types/node': 18.11.18 - jest: 29.3.1_@types+node@18.11.18 - jest-cli: 29.3.1_@types+node@18.11.18 + jest: 29.4.0_@types+node@18.11.18 + jest-cli: 29.4.0_@types+node@18.11.18 prettier: 2.8.3 - rimraf: 4.1.1 + rimraf: 4.1.2 source-map-loader: 4.0.1_webpack@5.75.0 terser-webpack-plugin: 5.3.6_webpack@5.75.0 - ts-jest: 29.0.5_p6ekqnroyms5nhqbfxosryz7rm + ts-jest: 29.0.5_bk6nxanhkkb7wku3szaryrtsfq ts-loader: 9.4.2_3fkjkrd3audxnith3e7fo4fnxi typescript: 4.9.4 webpack: 5.75.0_webpack-cli@5.0.1 @@ -88,8 +88,10 @@ importers: '@types/react-dom': ^18.0.10 babel-loader: ^9.1.2 css-loader: ^6.7.3 + html-webpack-plugin: ^5.5.0 react: ^18.2.0 react-dom: ^18.2.0 + source-map-loader: ^4.0.1 style-loader: ^3.3.1 webpack: ^5.75.0 webpack-cli: ^5.0.1 @@ -105,6 +107,8 @@ importers: '@types/react-dom': 18.0.10 babel-loader: 9.1.2_la66t7xldg4uecmyawueag5wkm css-loader: 6.7.3_webpack@5.75.0 + html-webpack-plugin: 5.5.0_webpack@5.75.0 + source-map-loader: 4.0.1_webpack@5.75.0 style-loader: 3.3.1_webpack@5.75.0 webpack: 5.75.0_webpack-cli@5.0.1 webpack-cli: 5.0.1_uaydpeuxkjjcxdbyfgk36cjdxi @@ -2204,20 +2208,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/29.3.1: - resolution: {integrity: sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg==} + /@jest/console/29.4.0: + resolution: {integrity: sha512-xpXud7e/8zo4syxQlAMDz+EQiFsf8/zXDPslBYm+UaSJ5uGTKQHhbSHfECp7Fw1trQtopjYumeved0n3waijhQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@jest/types': 29.4.0 '@types/node': 18.11.18 chalk: 4.1.2 - jest-message-util: 29.3.1 - jest-util: 29.3.1 + jest-message-util: 29.4.0 + jest-util: 29.4.0 slash: 3.0.0 dev: true - /@jest/core/29.3.1: - resolution: {integrity: sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw==} + /@jest/core/29.4.0: + resolution: {integrity: sha512-E7oCMcENobBFwQXYjnN2IsuUSpRo5jSv7VYk6O9GyQ5kVAfVSS8819I4W5iCCYvqD6+1TzyzLpeEdZEik81kNw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2225,32 +2229,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.3.1 - '@jest/reporters': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 + '@jest/console': 29.4.0 + '@jest/reporters': 29.4.0 + '@jest/test-result': 29.4.0 + '@jest/transform': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.1 exit: 0.1.2 graceful-fs: 4.2.10 - jest-changed-files: 29.2.0 - jest-config: 29.3.1_@types+node@18.11.18 - jest-haste-map: 29.3.1 - jest-message-util: 29.3.1 + jest-changed-files: 29.4.0 + jest-config: 29.4.0_@types+node@18.11.18 + jest-haste-map: 29.4.0 + jest-message-util: 29.4.0 jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-resolve-dependencies: 29.3.1 - jest-runner: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 - jest-watcher: 29.3.1 + jest-resolve: 29.4.0 + jest-resolve-dependencies: 29.4.0 + jest-runner: 29.4.0 + jest-runtime: 29.4.0 + jest-snapshot: 29.4.0 + jest-util: 29.4.0 + jest-validate: 29.4.0 + jest-watcher: 29.4.0 micromatch: 4.0.5 - pretty-format: 29.3.1 + pretty-format: 29.4.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -2258,14 +2262,14 @@ packages: - ts-node dev: true - /@jest/environment/29.3.1: - resolution: {integrity: sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==} + /@jest/environment/29.4.0: + resolution: {integrity: sha512-ocl1VGDcZHfHnYLTqkBY7yXme1bF4x0BevJ9wb6y0sLOSyBCpp8L5fEASChB+wU53WMrIK6kBfGt+ZYoM2kcdw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 + '@jest/fake-timers': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 - jest-mock: 29.3.1 + jest-mock: 29.4.0 dev: true /@jest/expect-utils/29.3.1: @@ -2275,42 +2279,49 @@ packages: jest-get-type: 29.2.0 dev: true - /@jest/expect/29.3.1: - resolution: {integrity: sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg==} + /@jest/expect-utils/29.4.0: + resolution: {integrity: sha512-w/JzTYIqjmPFIM5OOQHF9CawFx2daw1256Nzj4ZqWX96qRKbCq9WYRVqdySBKHHzuvsXLyTDIF6y61FUyrhmwg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.3.1 - jest-snapshot: 29.3.1 + jest-get-type: 29.2.0 + dev: true + + /@jest/expect/29.4.0: + resolution: {integrity: sha512-IiDZYQ/Oi94aBT0nKKKRvNsB5JTyHoGb+G3SiGoDxz90JfL7SLx/z5IjB0fzBRzy7aLFQOCbVJlaC2fIgU6Y9Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.4.0 + jest-snapshot: 29.4.0 transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers/29.3.1: - resolution: {integrity: sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==} + /@jest/fake-timers/29.4.0: + resolution: {integrity: sha512-8sitzN2QrhDwEwH3kKcMMgrv/UIkmm9AUgHixmn4L++GQ0CqVTIztm3YmaIQooLmW3O4GhizNTTCyq3iLbWcMw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 - '@sinonjs/fake-timers': 9.1.2 + '@jest/types': 29.4.0 + '@sinonjs/fake-timers': 10.0.2 '@types/node': 18.11.18 - jest-message-util: 29.3.1 - jest-mock: 29.3.1 - jest-util: 29.3.1 + jest-message-util: 29.4.0 + jest-mock: 29.4.0 + jest-util: 29.4.0 dev: true - /@jest/globals/29.3.1: - resolution: {integrity: sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q==} + /@jest/globals/29.4.0: + resolution: {integrity: sha512-Q64ZRgGMVL40RcYTfD2GvyjK7vJLPSIvi8Yp3usGPNPQ3SCW+UCY9KEH6+sVtBo8LzhcjtCXuZEd7avnj/T0mQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/expect': 29.3.1 - '@jest/types': 29.3.1 - jest-mock: 29.3.1 + '@jest/environment': 29.4.0 + '@jest/expect': 29.4.0 + '@jest/types': 29.4.0 + jest-mock: 29.4.0 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters/29.3.1: - resolution: {integrity: sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA==} + /@jest/reporters/29.4.0: + resolution: {integrity: sha512-FjJwrD1XOQq/AXKrvnOSf0RgAs6ziUuGKx8+/R53Jscc629JIhg7/m241gf1shUm/fKKxoHd7aCexcg7kxvkWQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2319,10 +2330,10 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 + '@jest/console': 29.4.0 + '@jest/test-result': 29.4.0 + '@jest/transform': 29.4.0 + '@jest/types': 29.4.0 '@jridgewell/trace-mapping': 0.3.17 '@types/node': 18.11.18 chalk: 4.1.2 @@ -2335,9 +2346,9 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.3.1 - jest-util: 29.3.1 - jest-worker: 29.3.1 + jest-message-util: 29.4.0 + jest-util: 29.4.0 + jest-worker: 29.4.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -2353,6 +2364,13 @@ packages: '@sinclair/typebox': 0.24.51 dev: true + /@jest/schemas/29.4.0: + resolution: {integrity: sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.25.21 + dev: true + /@jest/source-map/29.2.0: resolution: {integrity: sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2362,45 +2380,45 @@ packages: graceful-fs: 4.2.10 dev: true - /@jest/test-result/29.3.1: - resolution: {integrity: sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw==} + /@jest/test-result/29.4.0: + resolution: {integrity: sha512-EtRklzjpddZU/aBVxJqqejfzfOcnehmjNXufs6u6qwd05kkhXpAPhZdt8bLlQd7cA2nD+JqZQ5Dx9NX5Jh6mjA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 - '@jest/types': 29.3.1 + '@jest/console': 29.4.0 + '@jest/types': 29.4.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.3.1: - resolution: {integrity: sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA==} + /@jest/test-sequencer/29.4.0: + resolution: {integrity: sha512-pEwIgdfvEgF2lBOYX3DVn3SrvsAZ9FXCHw7+C6Qz87HnoDGQwbAselhWLhpgbxDjs6RC9QUJpFnrLmM5uwZV+g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.3.1 + '@jest/test-result': 29.4.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 + jest-haste-map: 29.4.0 slash: 3.0.0 dev: true - /@jest/transform/29.3.1: - resolution: {integrity: sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug==} + /@jest/transform/29.4.0: + resolution: {integrity: sha512-hDjw3jz4GnvbyLMgcFpC9/34QcUhVIzJkBqz7o+3AhgfhGRzGuQppuLf5r/q7lDAAyJ6jzL+SFG7JGsScHOcLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.12 - '@jest/types': 29.3.1 + '@jest/types': 29.4.0 '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 + jest-haste-map: 29.4.0 jest-regex-util: 29.2.0 - jest-util: 29.3.1 + jest-util: 29.4.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - write-file-atomic: 4.0.2 + write-file-atomic: 5.0.0 transitivePeerDependencies: - supports-color dev: true @@ -2417,6 +2435,18 @@ packages: chalk: 4.1.2 dev: true + /@jest/types/29.4.0: + resolution: {integrity: sha512-1S2Dt5uQp7R0bGY/L2BpuwCSji7v12kY3o8zqwlkbYBmOY956SKk+zOWqmfhHSINegiAVqOXydAYuWpzX6TYsQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.0 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.11.18 + '@types/yargs': 17.0.20 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping/0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -2622,16 +2652,20 @@ packages: resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} dev: true - /@sinonjs/commons/1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + /@sinclair/typebox/0.25.21: + resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} + dev: true + + /@sinonjs/commons/2.0.0: + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/9.1.2: - resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} + /@sinonjs/fake-timers/10.0.2: + resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: - '@sinonjs/commons': 1.8.6 + '@sinonjs/commons': 2.0.0 dev: true /@storybook/addon-actions/6.5.15_react@18.2.0: @@ -4804,17 +4838,17 @@ packages: engines: {node: '>= 0.4'} dev: true - /babel-jest/29.3.1_@babel+core@7.20.12: - resolution: {integrity: sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==} + /babel-jest/29.4.0_@babel+core@7.20.12: + resolution: {integrity: sha512-M61cGPg4JBashDvIzKoIV/y95mSF6x3ome7CMEaszUTHD4uo6dtC6Nln+fvRTspYNtwy8lDHl5lmoTBSNY/a+g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.20.12 - '@jest/transform': 29.3.1 + '@jest/transform': 29.4.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.2.0_@babel+core@7.20.12 + babel-preset-jest: 29.4.0_@babel+core@7.20.12 chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -4913,8 +4947,8 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/29.2.0: - resolution: {integrity: sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==} + /babel-plugin-jest-hoist/29.4.0: + resolution: {integrity: sha512-a/sZRLQJEmsmejQ2rPEUe35nO1+C9dc9O1gplH1SXmJxveQSRUYdBk8yGZG/VOUuZs1u2aHZJusEGoRMbhhwCg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.20.7 @@ -5025,14 +5059,14 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 dev: true - /babel-preset-jest/29.2.0_@babel+core@7.20.12: - resolution: {integrity: sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==} + /babel-preset-jest/29.4.0_@babel+core@7.20.12: + resolution: {integrity: sha512-fUB9vZflUSM3dO/6M2TCAepTzvA4VkOvl67PjErcrQMGt9Eve7uazaeyCZ2th3UtI7ljpiBJES0F7A1vBRsLZA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - babel-plugin-jest-hoist: 29.2.0 + babel-plugin-jest-hoist: 29.4.0 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 dev: true @@ -6812,6 +6846,17 @@ packages: jest-util: 29.3.1 dev: true + /expect/29.4.0: + resolution: {integrity: sha512-pzaAwjBgLEVxBh6ZHiqb9Wv3JYuv6m8ntgtY7a48nS+2KbX0EJkPS3FQlKiTZNcqzqJHNyQsfjqN60w1hPUBfQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.4.0 + jest-get-type: 29.2.0 + jest-matcher-utils: 29.4.0 + jest-message-util: 29.4.0 + jest-util: 29.4.0 + dev: true + /express/4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -7842,7 +7887,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.75.0 + webpack: 5.75.0_webpack-cli@5.0.1 dev: true /htmlparser2/6.1.0: @@ -8544,43 +8589,43 @@ packages: iterate-iterator: 1.0.2 dev: true - /jest-changed-files/29.2.0: - resolution: {integrity: sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==} + /jest-changed-files/29.4.0: + resolution: {integrity: sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 dev: true - /jest-circus/29.3.1: - resolution: {integrity: sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg==} + /jest-circus/29.4.0: + resolution: {integrity: sha512-/pFBaCeLzCavRWyz14JwFgpZgPpEZdS6nPnREhczbHl2wy2UezvYcVp5akVFfUmBaA4ThAUp0I8cpgkbuNOm3g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/expect': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 + '@jest/environment': 29.4.0 + '@jest/expect': 29.4.0 + '@jest/test-result': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 + jest-each: 29.4.0 + jest-matcher-utils: 29.4.0 + jest-message-util: 29.4.0 + jest-runtime: 29.4.0 + jest-snapshot: 29.4.0 + jest-util: 29.4.0 p-limit: 3.1.0 - pretty-format: 29.3.1 + pretty-format: 29.4.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - supports-color dev: true - /jest-cli/29.3.1_@types+node@18.11.18: - resolution: {integrity: sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ==} + /jest-cli/29.4.0_@types+node@18.11.18: + resolution: {integrity: sha512-YUkICcxjUd864VOzbfQEi2qd2hIIOd9bRF7LJUNyhWb3Khh3YKrbY0LWwoZZ4WkvukiNdvQu0Z4s6zLsY4hYfg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -8589,16 +8634,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 + '@jest/core': 29.4.0 + '@jest/test-result': 29.4.0 + '@jest/types': 29.4.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.3.1_@types+node@18.11.18 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-config: 29.4.0_@types+node@18.11.18 + jest-util: 29.4.0 + jest-validate: 29.4.0 prompts: 2.4.2 yargs: 17.6.2 transitivePeerDependencies: @@ -8607,8 +8652,8 @@ packages: - ts-node dev: true - /jest-config/29.3.1_@types+node@18.11.18: - resolution: {integrity: sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg==} + /jest-config/29.4.0_@types+node@18.11.18: + resolution: {integrity: sha512-jtgd72nN4Mob4Oego3N/pLRVfR2ui1hv+yO6xR/SUi5G7NtZ/grr95BJ1qRSDYZshuA0Jw57fnttZHZKb04+CA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -8620,26 +8665,26 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.3.1 - '@jest/types': 29.3.1 + '@jest/test-sequencer': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 - babel-jest: 29.3.1_@babel+core@7.20.12 + babel-jest: 29.4.0_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.1 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 29.3.1 - jest-environment-node: 29.3.1 + jest-circus: 29.4.0 + jest-environment-node: 29.4.0 jest-get-type: 29.2.0 jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-runner: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-resolve: 29.4.0 + jest-runner: 29.4.0 + jest-util: 29.4.0 + jest-validate: 29.4.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.3.1 + pretty-format: 29.4.0 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -8653,7 +8698,17 @@ packages: chalk: 4.1.2 diff-sequences: 29.3.1 jest-get-type: 29.2.0 - pretty-format: 29.3.1 + pretty-format: 29.4.0 + dev: true + + /jest-diff/29.4.0: + resolution: {integrity: sha512-s8KNvFx8YgdQ4fn2YLDQ7N6kmVOP68dUDVJrCHNsTc3UM5jcmyyFeYKL8EPWBQbJ0o0VvDGbWp8oYQ1nsnqnWw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.3.1 + jest-get-type: 29.2.0 + pretty-format: 29.4.0 dev: true /jest-docblock/29.2.0: @@ -8663,27 +8718,27 @@ packages: detect-newline: 3.1.0 dev: true - /jest-each/29.3.1: - resolution: {integrity: sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA==} + /jest-each/29.4.0: + resolution: {integrity: sha512-LTOvB8JDVFjrwXItyQiyLuDYy5PMApGLLzbfIYR79QLpeohS0bcS6j2HjlWuRGSM8QQQyp+ico59Blv+Jx3fMw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@jest/types': 29.4.0 chalk: 4.1.2 jest-get-type: 29.2.0 - jest-util: 29.3.1 - pretty-format: 29.3.1 + jest-util: 29.4.0 + pretty-format: 29.4.0 dev: true - /jest-environment-node/29.3.1: - resolution: {integrity: sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag==} + /jest-environment-node/29.4.0: + resolution: {integrity: sha512-WVveE3fYSH6FhDtZdvXhFKeLsDRItlQgnij+HQv6ZKxTdT1DB5O0sHXKCEC3K5mHraMs1Kzn4ch9jXC7H4L4wA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 + '@jest/environment': 29.4.0 + '@jest/fake-timers': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 - jest-mock: 29.3.1 - jest-util: 29.3.1 + jest-mock: 29.4.0 + jest-util: 29.4.0 dev: true /jest-get-type/29.2.0: @@ -8691,31 +8746,31 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.3.1: - resolution: {integrity: sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A==} + /jest-haste-map/29.4.0: + resolution: {integrity: sha512-m/pIEfoK0HoJz4c9bkgS5F9CXN2AM22eaSmUcmqTpadRlNVBOJE2CwkgaUzbrNn5MuAqTV1IPVYwWwjHNnk8eA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@jest/types': 29.4.0 '@types/graceful-fs': 4.1.6 '@types/node': 18.11.18 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 jest-regex-util: 29.2.0 - jest-util: 29.3.1 - jest-worker: 29.3.1 + jest-util: 29.4.0 + jest-worker: 29.4.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.3.1: - resolution: {integrity: sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA==} + /jest-leak-detector/29.4.0: + resolution: {integrity: sha512-fEGHS6ijzgSv5exABkCecMHNmyHcV52+l39ZsxuwfxmQMp43KBWJn2/Fwg8/l4jTI9uOY9jv8z1dXGgL0PHFjA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.2.0 - pretty-format: 29.3.1 + pretty-format: 29.4.0 dev: true /jest-matcher-utils/29.3.1: @@ -8728,12 +8783,22 @@ packages: pretty-format: 29.3.1 dev: true + /jest-matcher-utils/29.4.0: + resolution: {integrity: sha512-pU4OjBn96rDdRIaPUImbPiO2ETyRVzkA1EZVu9AxBDv/XPDJ7JWfkb6IiDT5jwgicaPHMrB/fhVa6qjG6potfA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.4.0 + jest-get-type: 29.2.0 + pretty-format: 29.4.0 + dev: true + /jest-message-util/29.3.1: resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.18.6 - '@jest/types': 29.3.1 + '@jest/types': 29.4.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 @@ -8743,16 +8808,31 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock/29.3.1: - resolution: {integrity: sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==} + /jest-message-util/29.4.0: + resolution: {integrity: sha512-0FvobqymmhE9pDEifvIcni9GeoKLol8eZspzH5u41g1wxYtLS60a9joT95dzzoCgrKRidNz64eaAXyzaULV8og==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@babel/code-frame': 7.18.6 + '@jest/types': 29.4.0 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 29.4.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock/29.4.0: + resolution: {integrity: sha512-+ShT5i+hcu/OFQRV0f/V/YtwpdFcHg64JZ9A8b40JueP+X9HNrZAYGdkupGIzsUK8AucecxCt4wKauMchxubLQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.0 '@types/node': 18.11.18 - jest-util: 29.3.1 + jest-util: 29.4.0 dev: true - /jest-pnp-resolver/1.2.3_jest-resolve@29.3.1: + /jest-pnp-resolver/1.2.3_jest-resolve@29.4.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -8761,7 +8841,7 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.3.1 + jest-resolve: 29.4.0 dev: true /jest-regex-util/29.2.0: @@ -8769,92 +8849,93 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.3.1: - resolution: {integrity: sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA==} + /jest-resolve-dependencies/29.4.0: + resolution: {integrity: sha512-hxfC84trREyULSj1Cm+fMjnudrrI2dVQ04COjZRcjCZ97boJlPtfJ+qrl/pN7YXS2fnu3wTHEc3LO094pngL6A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.2.0 - jest-snapshot: 29.3.1 + jest-snapshot: 29.4.0 transitivePeerDependencies: - supports-color dev: true - /jest-resolve/29.3.1: - resolution: {integrity: sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw==} + /jest-resolve/29.4.0: + resolution: {integrity: sha512-g7k7l53T+uC9Dp1mbHyDNkcCt0PMku6Wcfpr1kcMLwOHmM3vucKjSM5+DSa1r4vlDZojh8XH039J3z4FKmtTSw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 - jest-pnp-resolver: 1.2.3_jest-resolve@29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-haste-map: 29.4.0 + jest-pnp-resolver: 1.2.3_jest-resolve@29.4.0 + jest-util: 29.4.0 + jest-validate: 29.4.0 resolve: 1.22.1 - resolve.exports: 1.1.1 + resolve.exports: 2.0.0 slash: 3.0.0 dev: true - /jest-runner/29.3.1: - resolution: {integrity: sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA==} + /jest-runner/29.4.0: + resolution: {integrity: sha512-4zpcv0NOiJleqT0NAs8YcVbK8MhVRc58CBBn9b0Exc8VPU9GKI+DbzDUZqJYdkJhJSZFy2862l/F6hAqIow1hg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 - '@jest/environment': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 + '@jest/console': 29.4.0 + '@jest/environment': 29.4.0 + '@jest/test-result': 29.4.0 + '@jest/transform': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 jest-docblock: 29.2.0 - jest-environment-node: 29.3.1 - jest-haste-map: 29.3.1 - jest-leak-detector: 29.3.1 - jest-message-util: 29.3.1 - jest-resolve: 29.3.1 - jest-runtime: 29.3.1 - jest-util: 29.3.1 - jest-watcher: 29.3.1 - jest-worker: 29.3.1 + jest-environment-node: 29.4.0 + jest-haste-map: 29.4.0 + jest-leak-detector: 29.4.0 + jest-message-util: 29.4.0 + jest-resolve: 29.4.0 + jest-runtime: 29.4.0 + jest-util: 29.4.0 + jest-watcher: 29.4.0 + jest-worker: 29.4.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime/29.3.1: - resolution: {integrity: sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A==} + /jest-runtime/29.4.0: + resolution: {integrity: sha512-2zumwaGXsIuSF92Ui5Pn5hZV9r7AHMclfBLikrXSq87/lHea9anQ+mC+Cjz/DYTbf/JMjlK1sjZRh8K3yYNvWg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/fake-timers': 29.3.1 - '@jest/globals': 29.3.1 + '@jest/environment': 29.4.0 + '@jest/fake-timers': 29.4.0 + '@jest/globals': 29.4.0 '@jest/source-map': 29.2.0 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 + '@jest/test-result': 29.4.0 + '@jest/transform': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 - jest-message-util: 29.3.1 - jest-mock: 29.3.1 + jest-haste-map: 29.4.0 + jest-message-util: 29.4.0 + jest-mock: 29.4.0 jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 + jest-resolve: 29.4.0 + jest-snapshot: 29.4.0 + jest-util: 29.4.0 + semver: 7.3.8 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot/29.3.1: - resolution: {integrity: sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA==} + /jest-snapshot/29.4.0: + resolution: {integrity: sha512-UnK3MhdEWrQ2J6MnlKe51tvN5FjRUBQnO4m1LPlDx61or3w9+cP/U0x9eicutgunu/QzE4WC82jj6CiGIAFYzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.12 @@ -8863,23 +8944,23 @@ packages: '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 - '@jest/expect-utils': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 + '@jest/expect-utils': 29.4.0 + '@jest/transform': 29.4.0 + '@jest/types': 29.4.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 chalk: 4.1.2 - expect: 29.3.1 + expect: 29.4.0 graceful-fs: 4.2.10 - jest-diff: 29.3.1 + jest-diff: 29.4.0 jest-get-type: 29.2.0 - jest-haste-map: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-util: 29.3.1 + jest-haste-map: 29.4.0 + jest-matcher-utils: 29.4.0 + jest-message-util: 29.4.0 + jest-util: 29.4.0 natural-compare: 1.4.0 - pretty-format: 29.3.1 + pretty-format: 29.4.0 semver: 7.3.8 transitivePeerDependencies: - supports-color @@ -8897,29 +8978,41 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate/29.3.1: - resolution: {integrity: sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g==} + /jest-util/29.4.0: + resolution: {integrity: sha512-lCCwlze7UEV8TpR9ArS8w0cTbcMry5tlBkg7QSc5og5kNyV59dnY2aKHu5fY2k5aDJMQpCUGpvL2w6ZU44lveA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@jest/types': 29.4.0 + '@types/node': 18.11.18 + chalk: 4.1.2 + ci-info: 3.7.1 + graceful-fs: 4.2.10 + picomatch: 2.3.1 + dev: true + + /jest-validate/29.4.0: + resolution: {integrity: sha512-EXS7u594nX3aAPBnARxBdJ1eZ1cByV6MWrK0Qpt9lt/BcY0p0yYGp/EGJ8GhdLDQh+RFf8qMt2wzbbVzpj5+Vg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.0 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.2.0 leven: 3.1.0 - pretty-format: 29.3.1 + pretty-format: 29.4.0 dev: true - /jest-watcher/29.3.1: - resolution: {integrity: sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg==} + /jest-watcher/29.4.0: + resolution: {integrity: sha512-PnnfLygNKelWOJwpAYlcsQjB+OxRRdckD0qiGmYng4Hkz1ZwK3jvCaJJYiywz2msQn4rBNLdriasJtv7YpWHpA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 + '@jest/test-result': 29.4.0 + '@jest/types': 29.4.0 '@types/node': 18.11.18 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.3.1 + jest-util: 29.4.0 string-length: 4.0.2 dev: true @@ -8941,18 +9034,18 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/29.3.1: - resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} + /jest-worker/29.4.0: + resolution: {integrity: sha512-dICMQ+Q4W0QVMsaQzWlA1FVQhKNz7QcDCOGtbk1GCAd0Lai+wdkQvfmQwL4MjGumineh1xz+6M5oMj3rfWS02A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/node': 18.11.18 - jest-util: 29.3.1 + jest-util: 29.4.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/29.3.1_@types+node@18.11.18: - resolution: {integrity: sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA==} + /jest/29.4.0_@types+node@18.11.18: + resolution: {integrity: sha512-Zfd4UzNxPkSoHRBkg225rBjQNa6pVqbh20MGniAzwaOzYLd+pQUcAwH+WPxSXxKFs+QWYfPYIq9hIVSmdVQmPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -8961,10 +9054,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1 - '@jest/types': 29.3.1 + '@jest/core': 29.4.0 + '@jest/types': 29.4.0 import-local: 3.1.0 - jest-cli: 29.3.1_@types+node@18.11.18 + jest-cli: 29.4.0_@types+node@18.11.18 transitivePeerDependencies: - '@types/node' - supports-color @@ -10579,6 +10672,15 @@ packages: react-is: 18.2.0 dev: true + /pretty-format/29.4.0: + resolution: {integrity: sha512-J+EVUPXIBHCdWAbvGBwXs0mk3ljGppoh/076g1S8qYS8nVG4u/yrhMvyTFHYYYKWnDdgRLExx0vA7pzxVGdlNw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.0 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-hrtime/1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} @@ -11190,8 +11292,8 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports/1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + /resolve.exports/2.0.0: + resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} engines: {node: '>=10'} dev: true @@ -11232,8 +11334,8 @@ packages: glob: 7.2.3 dev: true - /rimraf/4.1.1: - resolution: {integrity: sha512-Z4Y81w8atcvaJuJuBB88VpADRH66okZAuEm+Jtaufa+s7rZmIz+Hik2G53kGaNytE7lsfXyWktTmfVz0H9xuDg==} + /rimraf/4.1.2: + resolution: {integrity: sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==} engines: {node: '>=14'} hasBin: true dev: true @@ -12304,7 +12406,7 @@ packages: engines: {node: '>=6.10'} dev: true - /ts-jest/29.0.5_p6ekqnroyms5nhqbfxosryz7rm: + /ts-jest/29.0.5_bk6nxanhkkb7wku3szaryrtsfq: resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -12327,7 +12429,7 @@ packages: dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.3.1_@types+node@18.11.18 + jest: 29.4.0_@types+node@18.11.18 jest-util: 29.3.1 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -13262,9 +13364,9 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic/4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + /write-file-atomic/5.0.0: + resolution: {integrity: sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7