diff --git a/front/.eslintrc.js b/front/.eslintrc.js index 085b06b32..17c3e2c37 100644 --- a/front/.eslintrc.js +++ b/front/.eslintrc.js @@ -5,7 +5,7 @@ module.exports = { tsconfigRootDir: __dirname, sourceType: 'module', }, - plugins: ['@typescript-eslint/eslint-plugin'], + plugins: ['@typescript-eslint/eslint-plugin', 'simple-import-sort'], extends: [ 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', @@ -17,12 +17,33 @@ module.exports = { node: true, jest: true, }, - - ignorePatterns: ['.eslintrc.js', 'codegen.js', '**/generated/*'], + overrides: [ + { + files: ['*.js', '*.jsx', '*.ts', '*.tsx'], + rules: { + 'simple-import-sort/imports': [ + 'error', + { + groups: [ + ['^react', '^@?\\w'], + ['^(@|~)(/.*|$)'], + ['^\\u0000'], + ['^\\.\\.(?!/?$)', '^\\.\\./?$'], + ['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'], + ['^.+\\.?(css)$'] + ] + } + ] + } + }, + ], + ignorePatterns: ['.eslintrc.js', 'codegen.js', '**/generated/*', '*.config.js'], rules: { '@typescript-eslint/interface-name-prefix': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 'off', + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error' }, }; diff --git a/front/.storybook/main.ts b/front/.storybook/main.js similarity index 83% rename from front/.storybook/main.ts rename to front/.storybook/main.js index 22274195f..020f4b46b 100644 --- a/front/.storybook/main.ts +++ b/front/.storybook/main.js @@ -1,3 +1,5 @@ +const path = require('path'); + module.exports = { webpackFinal: config => { config.module.rules.push({ @@ -19,6 +21,11 @@ module.exports = { type: 'javascript/auto' }); config.resolve.extensions.push('.mjs'); + config.resolve.alias = { + ...config.resolve.alias, + '~': path.resolve(__dirname, "../src"), + '@': path.resolve(__dirname, "../src/modules"), + }; return config; }, stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"], diff --git a/front/craco.config.js b/front/craco.config.js new file mode 100644 index 000000000..5df42ad77 --- /dev/null +++ b/front/craco.config.js @@ -0,0 +1,20 @@ +const path = require("path"); + +module.exports = { + webpack: { + alias: { + '~': path.resolve(__dirname, 'src'), + '@': path.resolve(__dirname, 'src/modules'), + '@testing': path.resolve(__dirname, 'src/testing'), + } + }, + jest: { + configure: { + "moduleNameMapper": { + '~/(.+)': "/src/$1", + '@/(.+)': "/src/modules/$1", + '@testing/(.+)': "/src/testing/$1", + } + } + }, +}; diff --git a/front/jest.config.js b/front/jest.config.js new file mode 100644 index 000000000..914d641b5 --- /dev/null +++ b/front/jest.config.js @@ -0,0 +1,5 @@ +const { createJestConfig } = require("@craco/craco"); +const cracoConfig = require("./craco.config.js"); +const jestConfig = createJestConfig(cracoConfig); + +module.exports = jestConfig; \ No newline at end of file diff --git a/front/package-lock.json b/front/package-lock.json index a11517dad..407b0727d 100644 --- a/front/package-lock.json +++ b/front/package-lock.json @@ -32,6 +32,7 @@ "web-vitals": "^2.1.4" }, "devDependencies": { + "@craco/craco": "^7.1.0", "@graphql-codegen/cli": "^3.3.1", "@graphql-codegen/typescript": "^3.0.4", "@graphql-codegen/typescript-operations": "^3.0.4", @@ -69,6 +70,7 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.31.11", + "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-storybook": "^0.6.11", "http-server": "^14.1.1", "mock-apollo-client": "^1.2.1", @@ -78,6 +80,7 @@ "prop-types": "^15.8.1", "react-scripts": "5.0.1", "storybook": "^7.0.2", + "ts-jest": "^29.1.0", "typescript": "^4.9.3", "webpack": "^5.75.0" } @@ -2749,6 +2752,85 @@ "node": ">=0.1.90" } }, + "node_modules/@craco/craco": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz", + "integrity": "sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==", + "dev": true, + "dependencies": { + "autoprefixer": "^10.4.12", + "cosmiconfig": "^7.0.1", + "cosmiconfig-typescript-loader": "^1.0.0", + "cross-spawn": "^7.0.3", + "lodash": "^4.17.21", + "semver": "^7.3.7", + "webpack-merge": "^5.8.0" + }, + "bin": { + "craco": "dist/bin/craco.js" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "react-scripts": "^5.0.0" + } + }, + "node_modules/@craco/craco/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@craco/craco/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@craco/craco/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@csstools/normalize.css": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", @@ -4622,43 +4704,43 @@ } }, "node_modules/@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", "dev": true, + "peer": true, "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4669,72 +4751,158 @@ } } }, - "node_modules/@jest/core/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/@jest/core/node_modules/@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, + "peer": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/core/node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true + "node_modules/@jest/core/node_modules/@jest/environment": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "dev": true, + "peer": true, + "dependencies": { + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/fake-timers": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/globals": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/source-map": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@jest/core/node_modules/@sinonjs/fake-timers": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", + "dev": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4745,11 +4913,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@jest/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4761,79 +4943,398 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@jest/core/node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@jest/core/node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "node_modules/@jest/core/node_modules/jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", "dev": true, + "peer": true, "dependencies": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-environment-node": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "node_modules/@jest/core/node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, + "peer": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "node_modules/@jest/core/node_modules/jest-leak-detector": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", "dev": true, + "peer": true, "dependencies": { - "@jest/types": "^28.1.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-mock": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-resolve": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-runner": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-runtime": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-snapshot": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.5.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-validate": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-watcher": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.5.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-worker": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/@jest/core/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, + "peer": true, "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { @@ -4841,6 +5342,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -4852,13 +5354,41 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "peer": true + }, + "node_modules/@jest/core/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/core/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4866,6 +5396,13 @@ "node": ">=8" } }, + "node_modules/@jest/core/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, "node_modules/@jest/environment": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", @@ -5242,17 +5779,18 @@ } }, "node_modules/@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", "dev": true, + "peer": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -5264,17 +5802,16 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -5285,72 +5822,46 @@ } } }, - "node_modules/@jest/reporters/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/@jest/reporters/node_modules/@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, + "peer": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/reporters/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true + "node_modules/@jest/reporters/node_modules/@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -5366,6 +5877,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5382,66 +5894,105 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "node_modules/@jest/reporters/node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "dev": true, + "peer": true, "dependencies": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/@jest/reporters/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, + "peer": true + }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5578,60 +6129,61 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", "dev": true, + "peer": true, "dependencies": { - "@jest/test-result": "^28.1.3", + "@jest/test-result": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.5.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/@jest/test-sequencer/node_modules/@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, + "peer": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-sequencer/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true + "node_modules/@jest/test-sequencer/node_modules/@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/@jest/test-sequencer/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -5647,6 +6199,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5663,66 +6216,73 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/@jest/test-sequencer/node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "node_modules/@jest/test-sequencer/node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "dev": true, + "peer": true, "dependencies": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/@jest/test-sequencer/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-sequencer/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/test-sequencer/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, + "peer": true + }, "node_modules/@jest/test-sequencer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8595,6 +9155,283 @@ "test-storybook": "bin/test-storybook.js" } }, + "node_modules/@storybook/test-runner/node_modules/@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, + "node_modules/@storybook/test-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/test-runner/node_modules/babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@storybook/test-runner/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -8604,6 +9441,22 @@ "balanced-match": "^1.0.0" } }, + "node_modules/@storybook/test-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@storybook/test-runner/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -8623,6 +9476,259 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@storybook/test-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/types": "^28.1.3", + "import-local": "^3.0.2", + "jest-cli": "^28.1.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-config/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-playwright-preset": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-playwright-preset/-/jest-playwright-preset-2.0.0.tgz", + "integrity": "sha512-pV5ruTJJMen3lwshUL4dlSqLlP8z4q9MXqWJkmy+sB6HYfzXoqBHzhl+5hslznhnSVTe4Dwu+reiiwcUJpYUbw==", + "dev": true, + "dependencies": { + "expect-playwright": "^0.8.0", + "jest-process-manager": "^0.3.1", + "nyc": "^15.1.0", + "playwright-core": ">=1.2.0", + "rimraf": "^3.0.2", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "jest": "^28.0.0", + "jest-circus": "^28.0.0", + "jest-environment-node": "^28.0.0", + "jest-runner": "^28.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@storybook/test-runner/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -8647,6 +9753,39 @@ "node": ">=10" } }, + "node_modules/@storybook/test-runner/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@storybook/test-runner/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/test-runner/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@storybook/test-runner/node_modules/semver": { "version": "7.5.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", @@ -8662,6 +9801,27 @@ "node": ">=10" } }, + "node_modules/@storybook/test-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/test-runner/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@storybook/test-runner/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -9371,6 +10531,30 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, "node_modules/@types/aria-query": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", @@ -11773,92 +12957,33 @@ } }, "node_modules/babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", "dev": true, + "peer": true, "dependencies": { - "@jest/transform": "^28.1.3", + "@jest/transform": "^29.5.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", + "babel-preset-jest": "^29.5.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/babel-jest/node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/babel-jest/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -11874,6 +12999,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11890,66 +13016,17 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/babel-jest/node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/babel-jest/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/babel-jest/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/babel-jest/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12068,10 +13145,11 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dev": true, + "peer": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -12079,7 +13157,7 @@ "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-plugin-macros": { @@ -12739,16 +13817,17 @@ } }, "node_modules/babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dev": true, + "peer": true, "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", + "babel-plugin-jest-hoist": "^29.5.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -13452,6 +14531,18 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -14621,6 +15712,31 @@ "node": ">=10" } }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz", + "integrity": "sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7", + "ts-node": "^10.7.0" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "typescript": ">=3" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-fetch": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", @@ -16919,6 +18035,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", + "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-plugin-storybook": { "version": "0.6.12", "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.12.tgz", @@ -20980,21 +22105,22 @@ } }, "node_modules/jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", "dev": true, + "peer": true, "dependencies": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", "import-local": "^3.0.2", - "jest-cli": "^28.1.3" + "jest-cli": "^29.5.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -21006,16 +22132,17 @@ } }, "node_modules/jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, + "peer": true, "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { @@ -21225,21 +22352,22 @@ } }, "node_modules/jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", "dev": true, + "peer": true, "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -21247,7 +22375,7 @@ "jest": "bin/jest.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -21258,46 +22386,46 @@ } } }, - "node_modules/jest-cli/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/jest-cli/node_modules/@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, + "peer": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-cli/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true + "node_modules/jest-cli/node_modules/@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -21308,11 +22436,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-cli/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -21329,32 +22471,101 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/jest-cli/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "node_modules/jest-cli/node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli/node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "peer": true, "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-cli/node_modules/jest-validate": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, + "peer": true + }, "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -21363,36 +22574,37 @@ } }, "node_modules/jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@types/node": "*", @@ -21407,46 +22619,158 @@ } } }, - "node_modules/jest-config/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/jest-config/node_modules/@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, + "peer": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true + "node_modules/jest-config/node_modules/@jest/environment": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "dev": true, + "peer": true, + "dependencies": { + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/fake-timers": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/globals": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/source-map": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jest-config/node_modules/@sinonjs/fake-timers": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", + "dev": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -21457,11 +22781,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-config/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -21473,54 +22811,447 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-config/node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/jest-config/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-config/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "node_modules/jest-config/node_modules/jest-circus": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", "dev": true, + "peer": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-each": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-environment-node": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-leak-detector": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-mock": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-resolve": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-runner": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-runtime": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-snapshot": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.5.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-validate": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-watcher": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.5.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-worker": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/jest-config/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, + "peer": true, "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { @@ -21528,6 +23259,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -21539,13 +23271,41 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "peer": true + }, + "node_modules/jest-config/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-config/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -21553,6 +23313,13 @@ "node": ">=8" } }, + "node_modules/jest-config/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, "node_modules/jest-diff": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", @@ -23111,35 +24878,6 @@ "node": ">=8" } }, - "node_modules/jest-playwright-preset": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jest-playwright-preset/-/jest-playwright-preset-2.0.0.tgz", - "integrity": "sha512-pV5ruTJJMen3lwshUL4dlSqLlP8z4q9MXqWJkmy+sB6HYfzXoqBHzhl+5hslznhnSVTe4Dwu+reiiwcUJpYUbw==", - "dev": true, - "dependencies": { - "expect-playwright": "^0.8.0", - "jest-process-manager": "^0.3.1", - "nyc": "^15.1.0", - "playwright-core": ">=1.2.0", - "rimraf": "^3.0.2", - "uuid": "^8.3.2" - }, - "peerDependencies": { - "jest": "^28.0.0", - "jest-circus": "^28.0.0", - "jest-environment-node": "^28.0.0", - "jest-runner": "^28.0.0" - } - }, - "node_modules/jest-playwright-preset/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", @@ -23257,27 +24995,284 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", "dev": true, + "peer": true, "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "node_modules/jest-resolve-dependencies/node_modules/@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-resolve-dependencies/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-snapshot": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.5.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, + "peer": true + }, + "node_modules/jest-resolve-dependencies/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, "node_modules/jest-resolve/node_modules/@jest/schemas": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", @@ -24958,93 +26953,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "node_modules/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jiti": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", @@ -26087,6 +27995,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -29657,6 +31571,23 @@ "async-limiter": "~1.0.0" } }, + "node_modules/pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "peer": true + }, "node_modules/pvtsutils": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.2.tgz", @@ -34496,12 +36427,167 @@ "node": ">=8" } }, + "node_modules/ts-jest": { + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", + "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/ts-log": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.5.tgz", "integrity": "sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==", "dev": true }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/ts-pnp": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", @@ -35123,6 +37209,12 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", @@ -35645,6 +37737,19 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -35834,6 +37939,12 @@ "node": ">=8" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -36383,6 +38494,15 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/front/package.json b/front/package.json index ce4bef350..3785cda93 100644 --- a/front/package.json +++ b/front/package.json @@ -27,10 +27,9 @@ "web-vitals": "^2.1.4" }, "scripts": { - "start": "PORT=3001 react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject", + "start": "PORT=3001 craco start", + "build": "craco build", + "test": "craco test", "lint": "eslint src --max-warnings=0", "storybook": "storybook dev -p 6006 -s ../public", "test-storybook": "test-storybook", @@ -77,6 +76,7 @@ ] }, "devDependencies": { + "@craco/craco": "^7.1.0", "@graphql-codegen/cli": "^3.3.1", "@graphql-codegen/typescript": "^3.0.4", "@graphql-codegen/typescript-operations": "^3.0.4", @@ -114,6 +114,7 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-react": "^7.31.11", + "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-storybook": "^0.6.11", "http-server": "^14.1.1", "mock-apollo-client": "^1.2.1", @@ -123,6 +124,7 @@ "prop-types": "^15.8.1", "react-scripts": "5.0.1", "storybook": "^7.0.2", + "ts-jest": "^29.1.0", "typescript": "^4.9.3", "webpack": "^5.75.0" }, diff --git a/front/src/App.tsx b/front/src/App.tsx index 8cb19a087..fe73a1555 100644 --- a/front/src/App.tsx +++ b/front/src/App.tsx @@ -1,17 +1,18 @@ import React, { useEffect, useState } from 'react'; -import People from './pages/people/People'; -import Companies from './pages/companies/Companies'; -import AuthCallback from './pages/auth/Callback'; -import Login from './pages/auth/Login'; -import AppLayout from './layout/AppLayout'; -import { Routes, Route, Navigate } from 'react-router-dom'; -import RequireAuth from './components/auth/RequireAuth'; -import Opportunities from './pages/opportunities/Opportunities'; -import { User, mapToUser } from './interfaces/entities/user.interface'; -import { useGetCurrentUserQuery } from './services/api/users'; -import { getUserIdFromToken } from './services/auth/AuthService'; +import { Navigate, Route, Routes } from 'react-router-dom'; -function App() { +import { RequireAuth } from './modules/auth/components/RequireAuth'; +import { getUserIdFromToken } from './modules/auth/services/AuthService'; +import { AppLayout } from './modules/ui/layout/AppLayout'; +import { mapToUser, User } from './modules/users/interfaces/user.interface'; +import { useGetCurrentUserQuery } from './modules/users/services'; +import AuthCallback from './pages/auth/Callback'; +import { Login } from './pages/auth/Login'; +import { Companies } from './pages/companies/Companies'; +import { Opportunities } from './pages/opportunities/Opportunities'; +import { People } from './pages/people/People'; + +export function App() { const [user, setUser] = useState(undefined); const userIdFromToken = getUserIdFromToken(); @@ -68,5 +69,3 @@ function App() { ); } - -export default App; diff --git a/front/src/__stories__/App.stories.tsx b/front/src/__stories__/App.stories.tsx index 310be4db3..f4acae938 100644 --- a/front/src/__stories__/App.stories.tsx +++ b/front/src/__stories__/App.stories.tsx @@ -1,15 +1,15 @@ -import type { Meta, StoryObj } from '@storybook/react'; -import { RecoilRoot } from 'recoil'; -import { ThemeProvider } from '@emotion/react'; import { MemoryRouter } from 'react-router-dom'; import { ApolloProvider } from '@apollo/client'; +import { ThemeProvider } from '@emotion/react'; +import type { Meta, StoryObj } from '@storybook/react'; +import { RecoilRoot } from 'recoil'; -import App from '../App'; -import { FullHeightStorybookLayout } from '../testing/FullHeightStorybookLayout'; -import { lightTheme } from '../layout/styles/themes'; -import { mockedClient } from '../testing/mockedClient'; -import { graphqlMocks } from '../testing/graphqlMocks'; -import { mockedUserJWT } from '../testing/mock-data/jwt'; +import { lightTheme } from '@/ui/layout/styles/themes'; +import { App } from '~/App'; +import { FullHeightStorybookLayout } from '~/testing/FullHeightStorybookLayout'; +import { graphqlMocks } from '~/testing/graphqlMocks'; +import { mockedUserJWT } from '~/testing/mock-data/jwt'; +import { mockedClient } from '~/testing/mockedClient'; const meta: Meta = { title: 'App/App', diff --git a/front/src/apollo.tsx b/front/src/apollo.tsx index ad9b75ac3..80aa3ee10 100644 --- a/front/src/apollo.tsx +++ b/front/src/apollo.tsx @@ -1,14 +1,15 @@ import { ApolloClient, - InMemoryCache, - Observable, createHttpLink, from, + InMemoryCache, + Observable, } from '@apollo/client'; import { setContext } from '@apollo/client/link/context'; -import { RestLink } from 'apollo-link-rest'; import { onError } from '@apollo/client/link/error'; -import { refreshAccessToken } from './services/auth/AuthService'; +import { RestLink } from 'apollo-link-rest'; + +import { refreshAccessToken } from './modules/auth/services/AuthService'; const apiLink = createHttpLink({ uri: `${process.env.REACT_APP_API_URL}`, diff --git a/front/src/index.tsx b/front/src/index.tsx index 399a9083f..7a2d75f1a 100644 --- a/front/src/index.tsx +++ b/front/src/index.tsx @@ -1,14 +1,17 @@ import React, { StrictMode } from 'react'; import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; import { BrowserRouter } from 'react-router-dom'; import { ApolloProvider } from '@apollo/client'; -import '@emotion/react'; -import { ThemeType } from './layout/styles/themes'; -import { apiClient } from './apollo'; import { RecoilRoot } from 'recoil'; +import '@emotion/react'; + +import { ThemeType } from './modules/ui/layout/styles/themes'; +import { apiClient } from './apollo'; +import { App } from './App'; + +import './index.css'; + const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement, ); diff --git a/front/src/components/auth/RequireAuth.tsx b/front/src/modules/auth/components/RequireAuth.tsx similarity index 58% rename from front/src/components/auth/RequireAuth.tsx rename to front/src/modules/auth/components/RequireAuth.tsx index 07001e584..edd4ba91b 100644 --- a/front/src/components/auth/RequireAuth.tsx +++ b/front/src/modules/auth/components/RequireAuth.tsx @@ -1,8 +1,13 @@ -import { useNavigate } from 'react-router-dom'; import { useEffect } from 'react'; -import { hasAccessToken } from '../../services/auth/AuthService'; +import { useNavigate } from 'react-router-dom'; -function RequireAuth({ children }: { children: JSX.Element }): JSX.Element { +import { hasAccessToken } from '../services/AuthService'; + +export function RequireAuth({ + children, +}: { + children: JSX.Element; +}): JSX.Element { const navigate = useNavigate(); useEffect(() => { @@ -13,5 +18,3 @@ function RequireAuth({ children }: { children: JSX.Element }): JSX.Element { return children; } - -export default RequireAuth; diff --git a/front/src/services/auth/AuthService.ts b/front/src/modules/auth/services/AuthService.ts similarity index 100% rename from front/src/services/auth/AuthService.ts rename to front/src/modules/auth/services/AuthService.ts diff --git a/front/src/services/auth/__tests__/AuthService.test.tsx b/front/src/modules/auth/services/__tests__/AuthService.test.tsx similarity index 99% rename from front/src/services/auth/__tests__/AuthService.test.tsx rename to front/src/modules/auth/services/__tests__/AuthService.test.tsx index 61a2babec..97383b64d 100644 --- a/front/src/services/auth/__tests__/AuthService.test.tsx +++ b/front/src/modules/auth/services/__tests__/AuthService.test.tsx @@ -1,9 +1,10 @@ import { waitFor } from '@testing-library/react'; + import { + getUserIdFromToken, hasAccessToken, hasRefreshToken, refreshAccessToken, - getUserIdFromToken, } from '../AuthService'; const mockFetch = async ( diff --git a/front/src/components/comments/CellCommentChip.tsx b/front/src/modules/comments/components/comments/CellCommentChip.tsx similarity index 99% rename from front/src/components/comments/CellCommentChip.tsx rename to front/src/modules/comments/components/comments/CellCommentChip.tsx index 5fe5bf077..a0641916d 100644 --- a/front/src/components/comments/CellCommentChip.tsx +++ b/front/src/modules/comments/components/comments/CellCommentChip.tsx @@ -1,4 +1,5 @@ import styled from '@emotion/styled'; + import { CommentChip, CommentChipProps } from './CommentChip'; const StyledCellWrapper = styled.div` diff --git a/front/src/components/comments/CommentChip.tsx b/front/src/modules/comments/components/comments/CommentChip.tsx similarity index 96% rename from front/src/components/comments/CommentChip.tsx rename to front/src/modules/comments/components/comments/CommentChip.tsx index f4d67d875..d305bbf38 100644 --- a/front/src/components/comments/CommentChip.tsx +++ b/front/src/modules/comments/components/comments/CommentChip.tsx @@ -1,5 +1,6 @@ import styled from '@emotion/styled'; -import { IconComment } from '../icons'; + +import { IconComment } from '@/ui/icons'; export type CommentChipProps = { count: number; diff --git a/front/src/components/comments/CommentTextInput.tsx b/front/src/modules/comments/components/comments/CommentTextInput.tsx similarity index 97% rename from front/src/components/comments/CommentTextInput.tsx rename to front/src/modules/comments/components/comments/CommentTextInput.tsx index f9e5f8c14..af6798007 100644 --- a/front/src/components/comments/CommentTextInput.tsx +++ b/front/src/modules/comments/components/comments/CommentTextInput.tsx @@ -1,10 +1,11 @@ -import styled from '@emotion/styled'; import { useState } from 'react'; -import { HiArrowSmRight } from 'react-icons/hi'; -import TextareaAutosize from 'react-textarea-autosize'; -import { IconButton } from '../buttons/IconButton'; import { useHotkeys } from 'react-hotkeys-hook'; import { HotkeysEvent } from 'react-hotkeys-hook/dist/types'; +import { HiArrowSmRight } from 'react-icons/hi'; +import TextareaAutosize from 'react-textarea-autosize'; +import styled from '@emotion/styled'; + +import { IconButton } from '@/ui/components/buttons/IconButton'; type OwnProps = { onSend?: (text: string) => void; diff --git a/front/src/components/comments/RightDrawerComments.tsx b/front/src/modules/comments/components/comments/RightDrawerComments.tsx similarity index 66% rename from front/src/components/comments/RightDrawerComments.tsx rename to front/src/modules/comments/components/comments/RightDrawerComments.tsx index 2ad002d88..00a92862d 100644 --- a/front/src/components/comments/RightDrawerComments.tsx +++ b/front/src/modules/comments/components/comments/RightDrawerComments.tsx @@ -1,9 +1,12 @@ import { useRecoilState } from 'recoil'; -import { RightDrawerBody } from '../../layout/right-drawer/RightDrawerBody'; -import { RightDrawerPage } from '../../layout/right-drawer/RightDrawerPage'; -import { RightDrawerTopBar } from '../../layout/right-drawer/RightDrawerTopBar'; + +import { RightDrawerBody } from '@/ui/layout/right-drawer/components/RightDrawerBody'; +import { RightDrawerPage } from '@/ui/layout/right-drawer/components/RightDrawerPage'; +import { RightDrawerTopBar } from '@/ui/layout/right-drawer/components/RightDrawerTopBar'; + +import { commentableEntityArrayState } from '../../states/commentableEntityArrayState'; + import { CommentTextInput } from './CommentTextInput'; -import { commentableEntityArrayState } from '../../modules/comments/states/commentableEntityArrayState'; export function RightDrawerComments() { const [commentableEntityArray] = useRecoilState(commentableEntityArrayState); diff --git a/front/src/components/comments/__stories__/CommentChip.stories.tsx b/front/src/modules/comments/components/comments/__stories__/CommentChip.stories.tsx similarity index 91% rename from front/src/components/comments/__stories__/CommentChip.stories.tsx rename to front/src/modules/comments/components/comments/__stories__/CommentChip.stories.tsx index c49b16064..20f875a48 100644 --- a/front/src/components/comments/__stories__/CommentChip.stories.tsx +++ b/front/src/modules/comments/components/comments/__stories__/CommentChip.stories.tsx @@ -1,8 +1,10 @@ -import type { Meta, StoryObj } from '@storybook/react'; -import { getRenderWrapperForComponent } from '../../../testing/renderWrappers'; -import { CellCommentChip } from '../CellCommentChip'; import styled from '@emotion/styled'; -import { CellBaseContainer } from '../../editable-cell/CellBaseContainer'; +import type { Meta, StoryObj } from '@storybook/react'; + +import { CellBaseContainer } from '@/ui/components/editable-cell/CellBaseContainer'; +import { getRenderWrapperForComponent } from '~/testing/renderWrappers'; + +import { CellCommentChip } from '../CellCommentChip'; import { CommentChip } from '../CommentChip'; const meta: Meta = { diff --git a/front/src/components/comments/__stories__/CommentTextInput.stories.tsx b/front/src/modules/comments/components/comments/__stories__/CommentTextInput.stories.tsx similarity index 81% rename from front/src/components/comments/__stories__/CommentTextInput.stories.tsx rename to front/src/modules/comments/components/comments/__stories__/CommentTextInput.stories.tsx index 2a7f7ff54..88210be51 100644 --- a/front/src/components/comments/__stories__/CommentTextInput.stories.tsx +++ b/front/src/modules/comments/components/comments/__stories__/CommentTextInput.stories.tsx @@ -1,7 +1,9 @@ import type { Meta, StoryObj } from '@storybook/react'; -import { graphqlMocks } from '../../../testing/graphqlMocks'; + +import { graphqlMocks } from '~/testing/graphqlMocks'; +import { getRenderWrapperForComponent } from '~/testing/renderWrappers'; + import { CommentTextInput } from '../CommentTextInput'; -import { getRenderWrapperForComponent } from '../../../testing/renderWrappers'; const meta: Meta = { title: 'Components/CommentTextInput', diff --git a/front/src/modules/comments/hooks/useOpenCommentRightDrawer.ts b/front/src/modules/comments/hooks/useOpenCommentRightDrawer.ts index 2ab7e5a10..6f237e681 100644 --- a/front/src/modules/comments/hooks/useOpenCommentRightDrawer.ts +++ b/front/src/modules/comments/hooks/useOpenCommentRightDrawer.ts @@ -1,7 +1,8 @@ import { useRecoilState } from 'recoil'; + import { useOpenRightDrawer } from '../../ui/layout/right-drawer/hooks/useOpenRightDrawer'; -import { CommentableEntity } from '../types/CommentableEntity'; import { commentableEntityArrayState } from '../states/commentableEntityArrayState'; +import { CommentableEntity } from '../types/CommentableEntity'; export function useOpenCommentRightDrawer() { const openRightDrawer = useOpenRightDrawer(); diff --git a/front/src/modules/comments/states/commentableEntityArrayState.ts b/front/src/modules/comments/states/commentableEntityArrayState.ts index 648fe7ba3..1a82760e7 100644 --- a/front/src/modules/comments/states/commentableEntityArrayState.ts +++ b/front/src/modules/comments/states/commentableEntityArrayState.ts @@ -1,4 +1,5 @@ import { atom } from 'recoil'; + import { CommentableEntity } from '../types/CommentableEntity'; export const commentableEntityArrayState = atom({ diff --git a/front/src/modules/comments/types/CommentableEntity.ts b/front/src/modules/comments/types/CommentableEntity.ts index 1e4ed3f9b..e33bdfd42 100644 --- a/front/src/modules/comments/types/CommentableEntity.ts +++ b/front/src/modules/comments/types/CommentableEntity.ts @@ -1,4 +1,4 @@ -import { CommentableType } from '../../../generated/graphql'; +import { CommentableType } from '~/generated/graphql'; export type CommentableEntity = { type: keyof typeof CommentableType; diff --git a/front/src/components/chips/CompanyChip.tsx b/front/src/modules/companies/components/CompanyChip.tsx similarity index 100% rename from front/src/components/chips/CompanyChip.tsx rename to front/src/modules/companies/components/CompanyChip.tsx diff --git a/front/src/components/companies/CompanyEditableNameCell.tsx b/front/src/modules/companies/components/CompanyEditableNameCell.tsx similarity index 63% rename from front/src/components/companies/CompanyEditableNameCell.tsx rename to front/src/modules/companies/components/CompanyEditableNameCell.tsx index 0e24124d9..d1ca7984d 100644 --- a/front/src/components/companies/CompanyEditableNameCell.tsx +++ b/front/src/modules/companies/components/CompanyEditableNameCell.tsx @@ -1,9 +1,11 @@ -import { Company } from '../../interfaces/entities/company.interface'; -import { useOpenCommentRightDrawer } from '../../modules/comments/hooks/useOpenCommentRightDrawer'; -import { updateCompany } from '../../services/api/companies'; -import { getLogoUrlFromDomainName } from '../../services/utils'; -import CompanyChip from '../chips/CompanyChip'; -import EditableChip from '../editable-cell/EditableChip'; +import { useOpenCommentRightDrawer } from '@/comments/hooks/useOpenCommentRightDrawer'; +import EditableChip from '@/ui/components/editable-cell/EditableChip'; +import { getLogoUrlFromDomainName } from '@/utils/utils'; + +import { Company } from '../interfaces/company.interface'; +import { updateCompany } from '../services'; + +import CompanyChip from './CompanyChip'; type OwnProps = { company: Company; diff --git a/front/src/interfaces/entities/__tests__/company.interface.test.ts b/front/src/modules/companies/interfaces/__tests__/company.interface.test.ts similarity index 100% rename from front/src/interfaces/entities/__tests__/company.interface.test.ts rename to front/src/modules/companies/interfaces/__tests__/company.interface.test.ts index 8d7875044..e9300c844 100644 --- a/front/src/interfaces/entities/__tests__/company.interface.test.ts +++ b/front/src/modules/companies/interfaces/__tests__/company.interface.test.ts @@ -1,9 +1,9 @@ import { - mapToGqlCompany, - mapToCompany, Company, GraphqlMutationCompany, GraphqlQueryCompany, + mapToCompany, + mapToGqlCompany, } from '../company.interface'; describe('Company mappers', () => { diff --git a/front/src/interfaces/entities/company.interface.ts b/front/src/modules/companies/interfaces/company.interface.ts similarity index 84% rename from front/src/interfaces/entities/company.interface.ts rename to front/src/modules/companies/interfaces/company.interface.ts index 408ed5c5b..5be8d36b6 100644 --- a/front/src/interfaces/entities/company.interface.ts +++ b/front/src/modules/companies/interfaces/company.interface.ts @@ -1,6 +1,12 @@ -import { Pipe } from 'stream'; -import { GraphqlQueryUser, User, mapToUser } from './user.interface'; -import { GraphqlQueryPipe } from './pipe.interface'; +import { + GraphqlQueryPipeline, + Pipeline, +} from '../../pipelines/interfaces/pipeline.interface'; +import { + GraphqlQueryUser, + mapToUser, + User, +} from '../../users/interfaces/user.interface'; export type Company = { __typename: 'companies'; @@ -12,7 +18,7 @@ export type Company = { createdAt?: Date; - pipes?: Pipe[]; + pipes?: Pipeline[]; accountOwner?: User | null; }; @@ -26,7 +32,7 @@ export type GraphqlQueryCompany = { createdAt?: string; accountOwner?: GraphqlQueryUser | null; - pipes?: GraphqlQueryPipe[] | null; + pipes?: GraphqlQueryPipeline[] | null; __typename: string; }; diff --git a/front/src/services/api/companies/__tests__/select.test.ts b/front/src/modules/companies/services/__tests__/select.test.ts similarity index 86% rename from front/src/services/api/companies/__tests__/select.test.ts rename to front/src/modules/companies/services/__tests__/select.test.ts index 764195951..ccdd080a6 100644 --- a/front/src/services/api/companies/__tests__/select.test.ts +++ b/front/src/modules/companies/services/__tests__/select.test.ts @@ -1,4 +1,5 @@ -import { reduceSortsToOrderBy } from '../../../../components/table/table-header/helpers'; +import { reduceSortsToOrderBy } from '@/filters-and-sorts/helpers'; + import { CompaniesSelectedSortType } from '../select'; describe('reduceSortsToOrderBy', () => { diff --git a/front/src/services/api/companies/index.ts b/front/src/modules/companies/services/index.ts similarity index 100% rename from front/src/services/api/companies/index.ts rename to front/src/modules/companies/services/index.ts diff --git a/front/src/services/api/companies/select.ts b/front/src/modules/companies/services/select.ts similarity index 78% rename from front/src/services/api/companies/select.ts rename to front/src/modules/companies/services/select.ts index 2fb4f464a..df0a7cdc1 100644 --- a/front/src/services/api/companies/select.ts +++ b/front/src/modules/companies/services/select.ts @@ -1,11 +1,13 @@ -import { QueryResult, gql, useQuery } from '@apollo/client'; +import { gql, QueryResult, useQuery } from '@apollo/client'; + +import { SelectedSortType } from '@/filters-and-sorts/interfaces/sorts/interface'; import { - SortOrder as Order_By, CompanyOrderByWithRelationInput as Companies_Order_By, CompanyWhereInput as Companies_Bool_Exp, -} from '../../../generated/graphql'; -import { GraphqlQueryCompany } from '../../../interfaces/entities/company.interface'; -import { SelectedSortType } from '../../../interfaces/sorts/interface'; + SortOrder as Order_By, +} from '~/generated/graphql'; + +import { GraphqlQueryCompany } from '../interfaces/company.interface'; export type CompaniesSelectedSortType = SelectedSortType; diff --git a/front/src/services/api/companies/update.ts b/front/src/modules/companies/services/update.ts similarity index 93% rename from front/src/services/api/companies/update.ts rename to front/src/modules/companies/services/update.ts index 0885a1918..260d459da 100644 --- a/front/src/services/api/companies/update.ts +++ b/front/src/modules/companies/services/update.ts @@ -1,9 +1,8 @@ import { FetchResult, gql } from '@apollo/client'; -import { - Company, - mapToGqlCompany, -} from '../../../interfaces/entities/company.interface'; -import { apiClient } from '../../../apollo'; + +import { apiClient } from '~/apollo'; + +import { Company, mapToGqlCompany } from '../interfaces/company.interface'; export const UPDATE_COMPANY = gql` mutation UpdateCompany( diff --git a/front/src/components/table/table-header/helpers.ts b/front/src/modules/filters-and-sorts/helpers.ts similarity index 81% rename from front/src/components/table/table-header/helpers.ts rename to front/src/modules/filters-and-sorts/helpers.ts index 1304ca642..ef2198b8c 100644 --- a/front/src/components/table/table-header/helpers.ts +++ b/front/src/modules/filters-and-sorts/helpers.ts @@ -1,11 +1,13 @@ -import { SortOrder as Order_By } from '../../../generated/graphql'; -import { BoolExpType } from '../../../interfaces/entities/generic.interface'; +import { SortOrder as Order_By } from '~/generated/graphql'; + +import { BoolExpType } from '../utils/interfaces/generic.interface'; + import { FilterableFieldsType, FilterWhereType, SelectedFilterType, -} from '../../../interfaces/filters/interface'; -import { SelectedSortType } from '../../../interfaces/sorts/interface'; +} from './interfaces/filters/interface'; +import { SelectedSortType } from './interfaces/sorts/interface'; export const reduceFiltersToWhere = < ValueType extends FilterableFieldsType, diff --git a/front/src/interfaces/filters/interface.ts b/front/src/modules/filters-and-sorts/interfaces/filters/interface.ts similarity index 95% rename from front/src/interfaces/filters/interface.ts rename to front/src/modules/filters-and-sorts/interfaces/filters/interface.ts index 38d85d83e..4fbb43432 100644 --- a/front/src/interfaces/filters/interface.ts +++ b/front/src/modules/filters-and-sorts/interfaces/filters/interface.ts @@ -1,10 +1,11 @@ import { ReactNode } from 'react'; -import { SearchConfigType } from '../search/interface'; + +import { SearchConfigType } from '@/search/interfaces/interface'; import { AnyEntity, BoolExpType, UnknownType, -} from '../entities/generic.interface'; +} from '@/utils/interfaces/generic.interface'; export type FilterableFieldsType = AnyEntity; export type FilterWhereRelationType = AnyEntity; diff --git a/front/src/interfaces/sorts/interface.ts b/front/src/modules/filters-and-sorts/interfaces/sorts/interface.ts similarity index 88% rename from front/src/interfaces/sorts/interface.ts rename to front/src/modules/filters-and-sorts/interfaces/sorts/interface.ts index b5d64afb7..e222f7ab3 100644 --- a/front/src/interfaces/sorts/interface.ts +++ b/front/src/modules/filters-and-sorts/interfaces/sorts/interface.ts @@ -1,5 +1,6 @@ import { ReactNode } from 'react'; -import { SortOrder as Order_By } from '../../generated/graphql'; + +import { SortOrder as Order_By } from '~/generated/graphql'; export type SortType = | { diff --git a/front/src/components/people/EditablePeopleFullName.tsx b/front/src/modules/people/components/EditablePeopleFullName.tsx similarity index 86% rename from front/src/components/people/EditablePeopleFullName.tsx rename to front/src/modules/people/components/EditablePeopleFullName.tsx index 61d9a5be9..03273ef28 100644 --- a/front/src/components/people/EditablePeopleFullName.tsx +++ b/front/src/modules/people/components/EditablePeopleFullName.tsx @@ -1,9 +1,11 @@ import { useState } from 'react'; -import PersonChip from '../chips/PersonChip'; -import { EditableDoubleText } from '../editable-cell/EditableDoubleText'; -import { CellCommentChip } from '../comments/CellCommentChip'; import styled from '@emotion/styled'; +import { CellCommentChip } from '@/comments/components/comments/CellCommentChip'; +import { EditableDoubleText } from '@/ui/components/editable-cell/EditableDoubleText'; + +import { PersonChip } from './PersonChip'; + type OwnProps = { firstname: string; lastname: string; diff --git a/front/src/components/people/PeopleCompanyCell.tsx b/front/src/modules/people/components/PeopleCompanyCell.tsx similarity index 83% rename from front/src/components/people/PeopleCompanyCell.tsx rename to front/src/modules/people/components/PeopleCompanyCell.tsx index fa82f06d5..adf812232 100644 --- a/front/src/components/people/PeopleCompanyCell.tsx +++ b/front/src/modules/people/components/PeopleCompanyCell.tsx @@ -1,25 +1,26 @@ +import { useState } from 'react'; +import { v4 } from 'uuid'; + +import CompanyChip, { + CompanyChipPropsType, +} from '@/companies/components/CompanyChip'; +import { + Company, + mapToCompany, +} from '@/companies/interfaces/company.interface'; +import { SearchConfigType } from '@/search/interfaces/interface'; +import { SEARCH_COMPANY_QUERY } from '@/search/services/search'; +import { EditableRelation } from '@/ui/components/editable-cell/EditableRelation'; +import { getLogoUrlFromDomainName } from '@/utils/utils'; import { QueryMode, useInsertCompanyMutation, useUpdatePeopleMutation, -} from '../../generated/graphql'; -import { - Person, - mapToGqlPerson, -} from '../../interfaces/entities/person.interface'; +} from '~/generated/graphql'; + +import { mapToGqlPerson, Person } from '../interfaces/person.interface'; -import { - Company, - mapToCompany, -} from '../../interfaces/entities/company.interface'; -import CompanyChip, { CompanyChipPropsType } from '../chips/CompanyChip'; -import EditableRelation from '../editable-cell/EditableRelation'; -import { SEARCH_COMPANY_QUERY } from '../../services/api/search/search'; -import { SearchConfigType } from '../../interfaces/search/interface'; -import { useState } from 'react'; import { PeopleCompanyCreateCell } from './PeopleCompanyCreateCell'; -import { v4 } from 'uuid'; -import { getLogoUrlFromDomainName } from '../../services/utils'; export type OwnProps = { people: Person; diff --git a/front/src/components/people/PeopleCompanyCreateCell.tsx b/front/src/modules/people/components/PeopleCompanyCreateCell.tsx similarity index 80% rename from front/src/components/people/PeopleCompanyCreateCell.tsx rename to front/src/modules/people/components/PeopleCompanyCreateCell.tsx index 553fa2991..c24791b66 100644 --- a/front/src/components/people/PeopleCompanyCreateCell.tsx +++ b/front/src/modules/people/components/PeopleCompanyCreateCell.tsx @@ -1,9 +1,10 @@ import { useRef, useState } from 'react'; -import { DoubleTextInput } from '../inputs/DoubleTextInput'; -import { useListenClickOutsideArrayOfRef } from '../../modules/ui/common/hooks/useListenClickOutsideArrayOfRef'; import { useHotkeys } from 'react-hotkeys-hook'; -import { CellBaseContainer } from '../editable-cell/CellBaseContainer'; -import { CellEditModeContainer } from '../editable-cell/CellEditModeContainer'; + +import { CellBaseContainer } from '@/ui/components/editable-cell/CellBaseContainer'; +import { CellEditModeContainer } from '@/ui/components/editable-cell/CellEditModeContainer'; +import { DoubleTextInput } from '@/ui/components/inputs/DoubleTextInput'; +import { useListenClickOutsideArrayOfRef } from '@/ui/hooks/useListenClickOutsideArrayOfRef'; type OwnProps = { initialCompanyName: string; diff --git a/front/src/components/chips/PersonChip.tsx b/front/src/modules/people/components/PersonChip.tsx similarity index 91% rename from front/src/components/chips/PersonChip.tsx rename to front/src/modules/people/components/PersonChip.tsx index 48f5bb2c6..b5a997ca6 100644 --- a/front/src/components/chips/PersonChip.tsx +++ b/front/src/modules/people/components/PersonChip.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import styled from '@emotion/styled'; + import PersonPlaceholder from './person-placeholder.png'; export type PersonChipPropsType = { @@ -31,7 +32,7 @@ const StyledContainer = styled.span` } `; -function PersonChip({ name, picture }: PersonChipPropsType) { +export function PersonChip({ name, picture }: PersonChipPropsType) { return ( ); } - -export default PersonChip; diff --git a/front/src/components/chips/person-placeholder.png b/front/src/modules/people/components/person-placeholder.png similarity index 100% rename from front/src/components/chips/person-placeholder.png rename to front/src/modules/people/components/person-placeholder.png diff --git a/front/src/interfaces/entities/__tests__/person.interface.test.ts b/front/src/modules/people/interfaces/__tests__/person.interface.test.ts similarity index 100% rename from front/src/interfaces/entities/__tests__/person.interface.test.ts rename to front/src/modules/people/interfaces/__tests__/person.interface.test.ts index e406839e7..73320000b 100644 --- a/front/src/interfaces/entities/__tests__/person.interface.test.ts +++ b/front/src/modules/people/interfaces/__tests__/person.interface.test.ts @@ -1,9 +1,9 @@ import { + GraphqlMutationPerson, + GraphqlQueryPerson, mapToGqlPerson, mapToPerson, Person, - GraphqlMutationPerson, - GraphqlQueryPerson, } from '../person.interface'; describe('Person mappers', () => { diff --git a/front/src/interfaces/entities/person.interface.ts b/front/src/modules/people/interfaces/person.interface.ts similarity index 90% rename from front/src/interfaces/entities/person.interface.ts rename to front/src/modules/people/interfaces/person.interface.ts index 416645d3f..f4d3fdbb7 100644 --- a/front/src/interfaces/entities/person.interface.ts +++ b/front/src/modules/people/interfaces/person.interface.ts @@ -2,8 +2,8 @@ import { Company, GraphqlQueryCompany, mapToCompany, -} from './company.interface'; -import { Pipe } from './pipe.interface'; +} from '@/companies/interfaces/company.interface'; +import { Pipeline } from '@/pipelines/interfaces/pipeline.interface'; export type Person = { __typename: 'people'; @@ -18,7 +18,7 @@ export type Person = { createdAt?: Date; company?: Company | null; - pipes?: Pipe[] | null; + pipes?: Pipeline[] | null; }; export type GraphqlQueryPerson = { diff --git a/front/src/services/api/people/__tests__/select.test.ts b/front/src/modules/people/services/__tests__/select.test.ts similarity index 87% rename from front/src/services/api/people/__tests__/select.test.ts rename to front/src/modules/people/services/__tests__/select.test.ts index 5833346ce..5cccc2d55 100644 --- a/front/src/services/api/people/__tests__/select.test.ts +++ b/front/src/modules/people/services/__tests__/select.test.ts @@ -1,4 +1,5 @@ -import { reduceSortsToOrderBy } from '../../../../components/table/table-header/helpers'; +import { reduceSortsToOrderBy } from '@/filters-and-sorts/helpers'; + import { PeopleSelectedSortType } from '../select'; describe('reduceSortsToOrderBy', () => { diff --git a/front/src/services/api/people/__tests__/update.test.ts b/front/src/modules/people/services/__tests__/update.test.ts similarity index 88% rename from front/src/services/api/people/__tests__/update.test.ts rename to front/src/modules/people/services/__tests__/update.test.ts index bd1fa9038..a1c6ba88a 100644 --- a/front/src/services/api/people/__tests__/update.test.ts +++ b/front/src/modules/people/services/__tests__/update.test.ts @@ -1,12 +1,12 @@ import { GraphqlMutationPerson, GraphqlQueryPerson, -} from '../../../../interfaces/entities/person.interface'; +} from '../../interfaces/person.interface'; import { updatePerson } from '../update'; -jest.mock('../../../../apollo', () => { +jest.mock('~/apollo', () => { const personInterface = jest.requireActual( - '../../../../interfaces/entities/person.interface', + '@/people/interfaces/person.interface', ); return { apiClient: { diff --git a/front/src/services/api/people/index.ts b/front/src/modules/people/services/index.ts similarity index 100% rename from front/src/services/api/people/index.ts rename to front/src/modules/people/services/index.ts diff --git a/front/src/services/api/people/select.ts b/front/src/modules/people/services/select.ts similarity index 78% rename from front/src/services/api/people/select.ts rename to front/src/modules/people/services/select.ts index 76942e3d3..ffa364215 100644 --- a/front/src/services/api/people/select.ts +++ b/front/src/modules/people/services/select.ts @@ -1,11 +1,13 @@ -import { QueryResult, gql, useQuery } from '@apollo/client'; -import { GraphqlQueryPerson } from '../../../interfaces/entities/person.interface'; +import { gql, QueryResult, useQuery } from '@apollo/client'; + +import { SelectedSortType } from '@/filters-and-sorts/interfaces/sorts/interface'; import { - PersonWhereInput as People_Bool_Exp, PersonOrderByWithRelationInput as People_Order_By, + PersonWhereInput as People_Bool_Exp, SortOrder, -} from '../../../generated/graphql'; -import { SelectedSortType } from '../../../interfaces/sorts/interface'; +} from '~/generated/graphql'; + +import { GraphqlQueryPerson } from '../interfaces/person.interface'; export type PeopleSelectedSortType = SelectedSortType; diff --git a/front/src/services/api/people/update.ts b/front/src/modules/people/services/update.ts similarity index 96% rename from front/src/services/api/people/update.ts rename to front/src/modules/people/services/update.ts index cd31c122e..0ee0d20f5 100644 --- a/front/src/services/api/people/update.ts +++ b/front/src/modules/people/services/update.ts @@ -1,9 +1,7 @@ import { FetchResult, gql } from '@apollo/client'; -import { - Person, - mapToGqlPerson, -} from '../../../interfaces/entities/person.interface'; + import { apiClient } from '../../../apollo'; +import { mapToGqlPerson, Person } from '../interfaces/person.interface'; export const UPDATE_PERSON = gql` mutation UpdatePeople( diff --git a/front/src/components/chips/PipeChip.tsx b/front/src/modules/pipelines/components/PipelineChip.tsx similarity index 80% rename from front/src/components/chips/PipeChip.tsx rename to front/src/modules/pipelines/components/PipelineChip.tsx index 03c098821..222c1291a 100644 --- a/front/src/components/chips/PipeChip.tsx +++ b/front/src/modules/pipelines/components/PipelineChip.tsx @@ -1,9 +1,10 @@ import * as React from 'react'; import styled from '@emotion/styled'; -import { Pipe } from '../../interfaces/entities/pipe.interface'; + +import { Pipeline } from '../interfaces/pipeline.interface'; type OwnProps = { - opportunity: Pipe; + opportunity: Pipeline; }; const StyledContainer = styled.span` @@ -20,7 +21,7 @@ const StyledContainer = styled.span` } `; -function PipeChip({ opportunity }: OwnProps) { +function PipelineChip({ opportunity }: OwnProps) { return ( {opportunity.icon && {opportunity.icon}} @@ -29,4 +30,4 @@ function PipeChip({ opportunity }: OwnProps) { ); } -export default PipeChip; +export default PipelineChip; diff --git a/front/src/interfaces/entities/pipe.interface.ts b/front/src/modules/pipelines/interfaces/pipeline.interface.ts similarity index 66% rename from front/src/interfaces/entities/pipe.interface.ts rename to front/src/modules/pipelines/interfaces/pipeline.interface.ts index 1032341fc..29de6dc3a 100644 --- a/front/src/interfaces/entities/pipe.interface.ts +++ b/front/src/modules/pipelines/interfaces/pipeline.interface.ts @@ -1,10 +1,10 @@ -export interface Pipe { +export interface Pipeline { id: string; name?: string; icon?: string | null; } -export interface GraphqlQueryPipe { +export interface GraphqlQueryPipeline { id: string; name?: string; icon?: string | null; diff --git a/front/src/interfaces/search/interface.ts b/front/src/modules/search/interfaces/interface.ts similarity index 92% rename from front/src/interfaces/search/interface.ts rename to front/src/modules/search/interfaces/interface.ts index c5a3b6e4a..609e0d5ec 100644 --- a/front/src/interfaces/search/interface.ts +++ b/front/src/modules/search/interfaces/interface.ts @@ -1,11 +1,12 @@ -import { DocumentNode } from 'graphql'; import { ReactNode } from 'react'; +import { DocumentNode } from 'graphql'; + import { AnyEntity, BoolExpType, GqlType, UnknownType, -} from '../entities/generic.interface'; +} from '@/utils/interfaces/generic.interface'; export type SearchConfigType< SearchType extends AnyEntity | UnknownType = UnknownType, diff --git a/front/src/services/api/search/search.ts b/front/src/modules/search/services/search.ts similarity index 92% rename from front/src/services/api/search/search.ts rename to front/src/modules/search/services/search.ts index 8fff8a8e9..fa9af2c5a 100644 --- a/front/src/services/api/search/search.ts +++ b/front/src/modules/search/services/search.ts @@ -1,11 +1,10 @@ -import { gql, useQuery } from '@apollo/client'; import { useMemo, useState } from 'react'; -import { SearchConfigType } from '../../../interfaces/search/interface'; -import { - AnyEntity, - UnknownType, -} from '../../../interfaces/entities/generic.interface'; -import { debounce } from '../../../modules/utils/debounce'; +import { gql, useQuery } from '@apollo/client'; + +import { debounce } from '@/utils/debounce'; +import { AnyEntity, UnknownType } from '@/utils/interfaces/generic.interface'; + +import { SearchConfigType } from '../interfaces/interface'; export const SEARCH_PEOPLE_QUERY = gql` query SearchPeopleQuery($where: PersonWhereInput, $limit: Int) { diff --git a/front/src/components/buttons/IconButton.tsx b/front/src/modules/ui/components/buttons/IconButton.tsx similarity index 100% rename from front/src/components/buttons/IconButton.tsx rename to front/src/modules/ui/components/buttons/IconButton.tsx diff --git a/front/src/components/editable-cell/CellBaseContainer.tsx b/front/src/modules/ui/components/editable-cell/CellBaseContainer.tsx similarity index 100% rename from front/src/components/editable-cell/CellBaseContainer.tsx rename to front/src/modules/ui/components/editable-cell/CellBaseContainer.tsx diff --git a/front/src/components/editable-cell/CellEditModeContainer.tsx b/front/src/modules/ui/components/editable-cell/CellEditModeContainer.tsx similarity index 100% rename from front/src/components/editable-cell/CellEditModeContainer.tsx rename to front/src/modules/ui/components/editable-cell/CellEditModeContainer.tsx diff --git a/front/src/components/editable-cell/CellNormalModeContainer.tsx b/front/src/modules/ui/components/editable-cell/CellNormalModeContainer.tsx similarity index 100% rename from front/src/components/editable-cell/CellNormalModeContainer.tsx rename to front/src/modules/ui/components/editable-cell/CellNormalModeContainer.tsx diff --git a/front/src/components/editable-cell/EditableCell.tsx b/front/src/modules/ui/components/editable-cell/EditableCell.tsx similarity index 93% rename from front/src/components/editable-cell/EditableCell.tsx rename to front/src/modules/ui/components/editable-cell/EditableCell.tsx index 01d28841e..28f20e3e7 100644 --- a/front/src/components/editable-cell/EditableCell.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableCell.tsx @@ -1,8 +1,10 @@ import { ReactElement } from 'react'; +import { useRecoilState } from 'recoil'; + +import { isSomeInputInEditModeState } from '../../tables/states/isSomeInputInEditModeState'; + import { CellBaseContainer } from './CellBaseContainer'; import { CellNormalModeContainer } from './CellNormalModeContainer'; -import { useRecoilState } from 'recoil'; -import { isSomeInputInEditModeState } from '../../modules/ui/tables/states/isSomeInputInEditModeState'; import { EditableCellEditMode } from './EditableCellEditMode'; type OwnProps = { diff --git a/front/src/components/editable-cell/EditableCellEditMode.tsx b/front/src/modules/ui/components/editable-cell/EditableCellEditMode.tsx similarity index 88% rename from front/src/components/editable-cell/EditableCellEditMode.tsx rename to front/src/modules/ui/components/editable-cell/EditableCellEditMode.tsx index e1c3ae5c6..4b8e6d2b4 100644 --- a/front/src/components/editable-cell/EditableCellEditMode.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableCellEditMode.tsx @@ -1,10 +1,13 @@ import { ReactElement, useMemo, useRef } from 'react'; -import { CellEditModeContainer } from './CellEditModeContainer'; -import { useRecoilState } from 'recoil'; -import { isSomeInputInEditModeState } from '../../modules/ui/tables/states/isSomeInputInEditModeState'; -import { useListenClickOutsideArrayOfRef } from '../../modules/ui/common/hooks/useListenClickOutsideArrayOfRef'; import { useHotkeys } from 'react-hotkeys-hook'; -import { debounce } from '../../modules/utils/debounce'; +import { useRecoilState } from 'recoil'; + +import { debounce } from '@/utils/debounce'; + +import { useListenClickOutsideArrayOfRef } from '../../hooks/useListenClickOutsideArrayOfRef'; +import { isSomeInputInEditModeState } from '../../tables/states/isSomeInputInEditModeState'; + +import { CellEditModeContainer } from './CellEditModeContainer'; type OwnProps = { editModeContent: ReactElement; diff --git a/front/src/components/editable-cell/EditableCellMenu.tsx b/front/src/modules/ui/components/editable-cell/EditableCellMenu.tsx similarity index 94% rename from front/src/components/editable-cell/EditableCellMenu.tsx rename to front/src/modules/ui/components/editable-cell/EditableCellMenu.tsx index 0416ce152..a03215276 100644 --- a/front/src/components/editable-cell/EditableCellMenu.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableCellMenu.tsx @@ -1,8 +1,10 @@ import { ReactElement } from 'react'; -import { CellBaseContainer } from './CellBaseContainer'; import styled from '@emotion/styled'; import { useRecoilState } from 'recoil'; -import { isSomeInputInEditModeState } from '../../modules/ui/tables/states/isSomeInputInEditModeState'; + +import { isSomeInputInEditModeState } from '../../tables/states/isSomeInputInEditModeState'; + +import { CellBaseContainer } from './CellBaseContainer'; import { EditableCellMenuEditMode } from './EditableCellMenuEditMode'; const EditableCellMenuNormalModeContainer = styled.div` diff --git a/front/src/components/editable-cell/EditableCellMenuEditMode.tsx b/front/src/modules/ui/components/editable-cell/EditableCellMenuEditMode.tsx similarity index 88% rename from front/src/components/editable-cell/EditableCellMenuEditMode.tsx rename to front/src/modules/ui/components/editable-cell/EditableCellMenuEditMode.tsx index 0612fb0ac..e90eaf6c7 100644 --- a/front/src/components/editable-cell/EditableCellMenuEditMode.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableCellMenuEditMode.tsx @@ -1,9 +1,12 @@ import { ReactElement, useMemo, useRef } from 'react'; -import { useRecoilState } from 'recoil'; -import { isSomeInputInEditModeState } from '../../modules/ui/tables/states/isSomeInputInEditModeState'; -import { useListenClickOutsideArrayOfRef } from '../../modules/ui/common/hooks/useListenClickOutsideArrayOfRef'; import { useHotkeys } from 'react-hotkeys-hook'; -import { debounce } from '../../modules/utils/debounce'; +import { useRecoilState } from 'recoil'; + +import { debounce } from '@/utils/debounce'; + +import { useListenClickOutsideArrayOfRef } from '../../hooks/useListenClickOutsideArrayOfRef'; +import { isSomeInputInEditModeState } from '../../tables/states/isSomeInputInEditModeState'; + import { EditableCellMenuEditModeContainer } from './EditableCellMenuEditModeContainer'; type OwnProps = { diff --git a/front/src/components/editable-cell/EditableCellMenuEditModeContainer.tsx b/front/src/modules/ui/components/editable-cell/EditableCellMenuEditModeContainer.tsx similarity index 99% rename from front/src/components/editable-cell/EditableCellMenuEditModeContainer.tsx rename to front/src/modules/ui/components/editable-cell/EditableCellMenuEditModeContainer.tsx index f405767da..15538783d 100644 --- a/front/src/components/editable-cell/EditableCellMenuEditModeContainer.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableCellMenuEditModeContainer.tsx @@ -1,4 +1,5 @@ import styled from '@emotion/styled'; + import { overlayBackground } from '../../layout/styles/themes'; type OwnProps = { diff --git a/front/src/components/editable-cell/EditableChip.tsx b/front/src/modules/ui/components/editable-cell/EditableChip.tsx similarity index 96% rename from front/src/components/editable-cell/EditableChip.tsx rename to front/src/modules/ui/components/editable-cell/EditableChip.tsx index 8ff6ad79f..f4bbda42e 100644 --- a/front/src/components/editable-cell/EditableChip.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableChip.tsx @@ -1,8 +1,11 @@ -import styled from '@emotion/styled'; import { ChangeEvent, ComponentType, useRef, useState } from 'react'; -import { EditableCell } from './EditableCell'; +import styled from '@emotion/styled'; + +import { CellCommentChip } from '@/comments/components/comments/CellCommentChip'; + import { textInputStyle } from '../../layout/styles/themes'; -import { CellCommentChip } from '../comments/CellCommentChip'; + +import { EditableCell } from './EditableCell'; export type EditableChipProps = { placeholder?: string; diff --git a/front/src/components/editable-cell/EditableDate.tsx b/front/src/modules/ui/components/editable-cell/EditableDate.tsx similarity index 95% rename from front/src/components/editable-cell/EditableDate.tsx rename to front/src/modules/ui/components/editable-cell/EditableDate.tsx index 069dafca3..29fbeecf7 100644 --- a/front/src/components/editable-cell/EditableDate.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableDate.tsx @@ -1,8 +1,11 @@ -import styled from '@emotion/styled'; import { forwardRef, useState } from 'react'; -import { EditableCell } from './EditableCell'; +import styled from '@emotion/styled'; + +import { humanReadableDate } from '@/utils/utils'; + import DatePicker from '../form/DatePicker'; -import { humanReadableDate } from '../../services/utils'; + +import { EditableCell } from './EditableCell'; export type EditableDateProps = { value: Date; @@ -29,7 +32,7 @@ const StyledCalendarContainer = styled.div` top: 10px; background: ${(props) => props.theme.secondaryBackground}; `; -function EditableDate({ +export function EditableDate({ value, changeHandler, editModeHorizontalAlign, @@ -82,5 +85,3 @@ function EditableDate({ > ); } - -export default EditableDate; diff --git a/front/src/components/editable-cell/EditableDoubleText.tsx b/front/src/modules/ui/components/editable-cell/EditableDoubleText.tsx similarity index 99% rename from front/src/components/editable-cell/EditableDoubleText.tsx rename to front/src/modules/ui/components/editable-cell/EditableDoubleText.tsx index 35e819dbc..003013c70 100644 --- a/front/src/components/editable-cell/EditableDoubleText.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableDoubleText.tsx @@ -1,8 +1,10 @@ -import styled from '@emotion/styled'; import { ChangeEvent, ReactElement, useRef, useState } from 'react'; -import { EditableCell } from './EditableCell'; +import styled from '@emotion/styled'; + import { textInputStyle } from '../../layout/styles/themes'; +import { EditableCell } from './EditableCell'; + type OwnProps = { firstValue: string; secondValue: string; diff --git a/front/src/components/editable-cell/EditablePhone.tsx b/front/src/modules/ui/components/editable-cell/EditablePhone.tsx similarity index 94% rename from front/src/components/editable-cell/EditablePhone.tsx rename to front/src/modules/ui/components/editable-cell/EditablePhone.tsx index 17b8ab00c..c0f72bcca 100644 --- a/front/src/components/editable-cell/EditablePhone.tsx +++ b/front/src/modules/ui/components/editable-cell/EditablePhone.tsx @@ -1,9 +1,11 @@ -import styled from '@emotion/styled'; import { ChangeEvent, MouseEvent, useRef, useState } from 'react'; -import { EditableCell } from './EditableCell'; +import styled from '@emotion/styled'; import { isValidPhoneNumber, parsePhoneNumber } from 'libphonenumber-js'; + import Link from '../link/Link'; +import { EditableCell } from './EditableCell'; + type OwnProps = { placeholder?: string; value: string; @@ -26,7 +28,7 @@ const StyledEditInplaceInput = styled.input` } `; -function EditablePhone({ value, placeholder, changeHandler }: OwnProps) { +export function EditablePhone({ value, placeholder, changeHandler }: OwnProps) { const inputRef = useRef(null); const [inputValue, setInputValue] = useState(value); const [isEditMode, setIsEditMode] = useState(false); @@ -69,5 +71,3 @@ function EditablePhone({ value, placeholder, changeHandler }: OwnProps) { /> ); } - -export default EditablePhone; diff --git a/front/src/components/editable-cell/EditableRelation.tsx b/front/src/modules/ui/components/editable-cell/EditableRelation.tsx similarity index 92% rename from front/src/components/editable-cell/EditableRelation.tsx rename to front/src/modules/ui/components/editable-cell/EditableRelation.tsx index ff029cb85..f775dff1c 100644 --- a/front/src/components/editable-cell/EditableRelation.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableRelation.tsx @@ -1,18 +1,21 @@ import { ChangeEvent, ComponentType, useEffect, useState } from 'react'; -import styled from '@emotion/styled'; -import { useSearch } from '../../services/api/search/search'; -import { SearchConfigType } from '../../interfaces/search/interface'; -import { AnyEntity } from '../../interfaces/entities/generic.interface'; -import { EditableRelationCreateButton } from './EditableRelationCreateButton'; -import { isNonEmptyString } from '../../modules/utils/type-guards/isNonEmptyString'; -import { isDefined } from '../../modules/utils/type-guards/isDefined'; import { FaPlus } from 'react-icons/fa'; -import { HoverableMenuItem } from './HoverableMenuItem'; -import { EditableCellMenu } from './EditableCellMenu'; -import { CellNormalModeContainer } from './CellNormalModeContainer'; +import styled from '@emotion/styled'; import { useRecoilState } from 'recoil'; -import { isSomeInputInEditModeState } from '../../modules/ui/tables/states/isSomeInputInEditModeState'; + +import { SearchConfigType } from '@/search/interfaces/interface'; +import { useSearch } from '@/search/services/search'; +import { AnyEntity } from '@/utils/interfaces/generic.interface'; +import { isDefined } from '@/utils/type-guards/isDefined'; +import { isNonEmptyString } from '@/utils/type-guards/isNonEmptyString'; + import { textInputStyle } from '../../layout/styles/themes'; +import { isSomeInputInEditModeState } from '../../tables/states/isSomeInputInEditModeState'; + +import { CellNormalModeContainer } from './CellNormalModeContainer'; +import { EditableCellMenu } from './EditableCellMenu'; +import { EditableRelationCreateButton } from './EditableRelationCreateButton'; +import { HoverableMenuItem } from './HoverableMenuItem'; const StyledEditModeContainer = styled.div` width: 200px; @@ -95,7 +98,7 @@ export type EditableRelationProps< }; // TODO: split this component -function EditableRelation< +export function EditableRelation< RelationType extends AnyEntity, ChipComponentPropsType, >({ @@ -216,5 +219,3 @@ function EditableRelation< ); } - -export default EditableRelation; diff --git a/front/src/components/editable-cell/EditableRelationCreateButton.tsx b/front/src/modules/ui/components/editable-cell/EditableRelationCreateButton.tsx similarity index 100% rename from front/src/components/editable-cell/EditableRelationCreateButton.tsx rename to front/src/modules/ui/components/editable-cell/EditableRelationCreateButton.tsx diff --git a/front/src/components/editable-cell/EditableText.tsx b/front/src/modules/ui/components/editable-cell/EditableText.tsx similarity index 96% rename from front/src/components/editable-cell/EditableText.tsx rename to front/src/modules/ui/components/editable-cell/EditableText.tsx index ec89c0e74..32c23bc30 100644 --- a/front/src/components/editable-cell/EditableText.tsx +++ b/front/src/modules/ui/components/editable-cell/EditableText.tsx @@ -1,8 +1,10 @@ -import styled from '@emotion/styled'; import { ChangeEvent, useRef, useState } from 'react'; -import { EditableCell } from './EditableCell'; +import styled from '@emotion/styled'; + import { textInputStyle } from '../../layout/styles/themes'; +import { EditableCell } from './EditableCell'; + type OwnProps = { placeholder?: string; content: string; @@ -24,7 +26,7 @@ const StyledNoEditText = styled.div` width: 100%; `; -function EditableText({ +export function EditableText({ content, placeholder, changeHandler, @@ -57,5 +59,3 @@ function EditableText({ > ); } - -export default EditableText; diff --git a/front/src/components/editable-cell/HoverableMenuItem.tsx b/front/src/modules/ui/components/editable-cell/HoverableMenuItem.tsx similarity index 100% rename from front/src/components/editable-cell/HoverableMenuItem.tsx rename to front/src/modules/ui/components/editable-cell/HoverableMenuItem.tsx diff --git a/front/src/components/form/Checkbox.tsx b/front/src/modules/ui/components/form/Checkbox.tsx similarity index 100% rename from front/src/components/form/Checkbox.tsx rename to front/src/modules/ui/components/form/Checkbox.tsx diff --git a/front/src/components/form/DatePicker.tsx b/front/src/modules/ui/components/form/DatePicker.tsx similarity index 98% rename from front/src/components/form/DatePicker.tsx rename to front/src/modules/ui/components/form/DatePicker.tsx index 146d6ad84..d1385e9cf 100644 --- a/front/src/components/form/DatePicker.tsx +++ b/front/src/modules/ui/components/form/DatePicker.tsx @@ -1,9 +1,10 @@ -import styled from '@emotion/styled'; -import React, { ReactElement, forwardRef, useState } from 'react'; +import React, { forwardRef, ReactElement, useState } from 'react'; import ReactDatePicker, { CalendarContainerProps } from 'react-datepicker'; +import styled from '@emotion/styled'; + +import { overlayBackground } from '../../layout/styles/themes'; import 'react-datepicker/dist/react-datepicker.css'; -import { overlayBackground } from '../../layout/styles/themes'; export type DatePickerProps = { isOpen?: boolean; diff --git a/front/src/components/inputs/DoubleTextInput.tsx b/front/src/modules/ui/components/inputs/DoubleTextInput.tsx similarity index 99% rename from front/src/components/inputs/DoubleTextInput.tsx rename to front/src/modules/ui/components/inputs/DoubleTextInput.tsx index 2d45e4f67..7c03f7bf3 100644 --- a/front/src/components/inputs/DoubleTextInput.tsx +++ b/front/src/modules/ui/components/inputs/DoubleTextInput.tsx @@ -1,5 +1,6 @@ -import styled from '@emotion/styled'; import { ChangeEvent, useRef } from 'react'; +import styled from '@emotion/styled'; + import { textInputStyle } from '../../layout/styles/themes'; type OwnProps = { diff --git a/front/src/components/link/Link.tsx b/front/src/modules/ui/components/link/Link.tsx similarity index 100% rename from front/src/components/link/Link.tsx rename to front/src/modules/ui/components/link/Link.tsx index 6e2f9e828..1f5b936e8 100644 --- a/front/src/components/link/Link.tsx +++ b/front/src/modules/ui/components/link/Link.tsx @@ -1,6 +1,6 @@ -import styled from '@emotion/styled'; import * as React from 'react'; import { Link as ReactLink } from 'react-router-dom'; +import styled from '@emotion/styled'; type OwnProps = { href: string; diff --git a/front/src/components/table/CheckboxCell.tsx b/front/src/modules/ui/components/table/CheckboxCell.tsx similarity index 99% rename from front/src/components/table/CheckboxCell.tsx rename to front/src/modules/ui/components/table/CheckboxCell.tsx index aae1e543f..531ca1b7b 100644 --- a/front/src/components/table/CheckboxCell.tsx +++ b/front/src/modules/ui/components/table/CheckboxCell.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import styled from '@emotion/styled'; + import { Checkbox } from '../form/Checkbox'; type OwnProps = { diff --git a/front/src/components/table/ColumnHead.tsx b/front/src/modules/ui/components/table/ColumnHead.tsx similarity index 87% rename from front/src/components/table/ColumnHead.tsx rename to front/src/modules/ui/components/table/ColumnHead.tsx index ba38e82bd..6aad4f5ca 100644 --- a/front/src/components/table/ColumnHead.tsx +++ b/front/src/modules/ui/components/table/ColumnHead.tsx @@ -1,5 +1,5 @@ -import styled from '@emotion/styled'; import { ReactNode } from 'react'; +import styled from '@emotion/styled'; type OwnProps = { viewName: string; @@ -20,7 +20,7 @@ const StyledIcon = styled.div` margin-right: ${(props) => props.theme.spacing(1)}; `; -function TableHeader({ viewName, viewIcon }: OwnProps) { +export function ColumnHead({ viewName, viewIcon }: OwnProps) { return ( {viewIcon} @@ -28,5 +28,3 @@ function TableHeader({ viewName, viewIcon }: OwnProps) { ); } - -export default TableHeader; diff --git a/front/src/components/table/EntityTable.tsx b/front/src/modules/ui/components/table/EntityTable.tsx similarity index 92% rename from front/src/components/table/EntityTable.tsx rename to front/src/modules/ui/components/table/EntityTable.tsx index 18f9145a0..fa6ed683e 100644 --- a/front/src/components/table/EntityTable.tsx +++ b/front/src/modules/ui/components/table/EntityTable.tsx @@ -1,21 +1,26 @@ import * as React from 'react'; import styled from '@emotion/styled'; - import { ColumnDef, flexRender, getCoreRowModel, useReactTable, } from '@tanstack/react-table'; -import TableHeader from './table-header/TableHeader'; +import { useRecoilState } from 'recoil'; + import { FilterConfigType, SelectedFilterType, -} from '../../interfaces/filters/interface'; -import { SortType, SelectedSortType } from '../../interfaces/sorts/interface'; -import { useRecoilState } from 'recoil'; -import { currentRowSelectionState } from '../../modules/ui/tables/states/rowSelectionState'; -import { useResetTableRowSelection } from '../../modules/ui/tables/hooks/useResetTableRowSelection'; +} from '@/filters-and-sorts/interfaces/filters/interface'; +import { + SelectedSortType, + SortType, +} from '@/filters-and-sorts/interfaces/sorts/interface'; + +import { useResetTableRowSelection } from '../../tables/hooks/useResetTableRowSelection'; +import { currentRowSelectionState } from '../../tables/states/rowSelectionState'; + +import { TableHeader } from './table-header/TableHeader'; type OwnProps< TData extends { id: string; __typename: 'companies' | 'people' }, diff --git a/front/src/components/table/SelectAllCheckbox.tsx b/front/src/modules/ui/components/table/SelectAllCheckbox.tsx similarity index 100% rename from front/src/components/table/SelectAllCheckbox.tsx rename to front/src/modules/ui/components/table/SelectAllCheckbox.tsx diff --git a/front/src/components/table/action-bar/EntityTableActionBar.tsx b/front/src/modules/ui/components/table/action-bar/EntityTableActionBar.tsx similarity index 90% rename from front/src/components/table/action-bar/EntityTableActionBar.tsx rename to front/src/modules/ui/components/table/action-bar/EntityTableActionBar.tsx index b9747af8a..545859338 100644 --- a/front/src/components/table/action-bar/EntityTableActionBar.tsx +++ b/front/src/modules/ui/components/table/action-bar/EntityTableActionBar.tsx @@ -1,7 +1,8 @@ -import styled from '@emotion/styled'; import React from 'react'; +import styled from '@emotion/styled'; import { useRecoilValue } from 'recoil'; -import { selectedRowIdsState } from '../../../modules/ui/tables/states/selectedRowIdsState'; + +import { selectedRowIdsState } from '@/ui/tables/states/selectedRowIdsState'; type OwnProps = { children: React.ReactNode | React.ReactNode[]; diff --git a/front/src/components/table/action-bar/EntityTableActionBarButton.tsx b/front/src/modules/ui/components/table/action-bar/EntityTableActionBarButton.tsx similarity index 100% rename from front/src/components/table/action-bar/EntityTableActionBarButton.tsx rename to front/src/modules/ui/components/table/action-bar/EntityTableActionBarButton.tsx index d7923b1c0..1e1872e92 100644 --- a/front/src/components/table/action-bar/EntityTableActionBarButton.tsx +++ b/front/src/modules/ui/components/table/action-bar/EntityTableActionBarButton.tsx @@ -1,5 +1,5 @@ -import styled from '@emotion/styled'; import { ReactNode } from 'react'; +import styled from '@emotion/styled'; type OwnProps = { icon: ReactNode; diff --git a/front/src/components/table/action-bar/TableActionBarButtonOpenComments.tsx b/front/src/modules/ui/components/table/action-bar/TableActionBarButtonOpenComments.tsx similarity index 84% rename from front/src/components/table/action-bar/TableActionBarButtonOpenComments.tsx rename to front/src/modules/ui/components/table/action-bar/TableActionBarButtonOpenComments.tsx index d72bc1171..52608dfdf 100644 --- a/front/src/components/table/action-bar/TableActionBarButtonOpenComments.tsx +++ b/front/src/modules/ui/components/table/action-bar/TableActionBarButtonOpenComments.tsx @@ -1,6 +1,8 @@ import { FaRegComment } from 'react-icons/fa'; + +import { useOpenRightDrawer } from '@/ui/layout/right-drawer/hooks/useOpenRightDrawer'; + import { EntityTableActionBarButton } from './EntityTableActionBarButton'; -import { useOpenRightDrawer } from '../../../modules/ui/layout/right-drawer/hooks/useOpenRightDrawer'; export function TableActionBarButtonToggleComments() { // TODO: here it would be nice to access the table context diff --git a/front/src/components/table/table-header/DropdownButton.tsx b/front/src/modules/ui/components/table/table-header/DropdownButton.tsx similarity index 99% rename from front/src/components/table/table-header/DropdownButton.tsx rename to front/src/modules/ui/components/table/table-header/DropdownButton.tsx index fe439ed69..67af7d23d 100644 --- a/front/src/components/table/table-header/DropdownButton.tsx +++ b/front/src/modules/ui/components/table/table-header/DropdownButton.tsx @@ -1,11 +1,12 @@ +import { ReactNode, useRef } from 'react'; +import { FaAngleDown } from 'react-icons/fa'; import styled from '@emotion/styled'; -import { useRef, ReactNode } from 'react'; + import { useOutsideAlerter } from '../../../hooks/useOutsideAlerter'; import { overlayBackground, textInputStyle, } from '../../../layout/styles/themes'; -import { FaAngleDown } from 'react-icons/fa'; type OwnProps = { label: string; diff --git a/front/src/components/table/table-header/FilterDropdownButton.tsx b/front/src/modules/ui/components/table/table-header/FilterDropdownButton.tsx similarity index 97% rename from front/src/components/table/table-header/FilterDropdownButton.tsx rename to front/src/modules/ui/components/table/table-header/FilterDropdownButton.tsx index 251d83d51..b23d9d8a7 100644 --- a/front/src/components/table/table-header/FilterDropdownButton.tsx +++ b/front/src/modules/ui/components/table/table-header/FilterDropdownButton.tsx @@ -1,18 +1,18 @@ import { ChangeEvent, useCallback, useState } from 'react'; -import DropdownButton from './DropdownButton'; +import styled from '@emotion/styled'; + import { + FilterableFieldsType, FilterConfigType, FilterOperandType, - FilterableFieldsType, SelectedFilterType, -} from '../../../interfaces/filters/interface'; -import { - SearchResultsType, - useSearch, -} from '../../../services/api/search/search'; +} from '@/filters-and-sorts/interfaces/filters/interface'; +import { SearchResultsType, useSearch } from '@/search/services/search'; +import { humanReadableDate } from '@/utils/utils'; + import DatePicker from '../../form/DatePicker'; -import styled from '@emotion/styled'; -import { humanReadableDate } from '../../../services/utils'; + +import DropdownButton from './DropdownButton'; type OwnProps = { isFilterSelected: boolean; diff --git a/front/src/components/table/table-header/SortAndFilterBar.tsx b/front/src/modules/ui/components/table/table-header/SortAndFilterBar.tsx similarity index 94% rename from front/src/components/table/table-header/SortAndFilterBar.tsx rename to front/src/modules/ui/components/table/table-header/SortAndFilterBar.tsx index b5e778221..494b8e10a 100644 --- a/front/src/components/table/table-header/SortAndFilterBar.tsx +++ b/front/src/modules/ui/components/table/table-header/SortAndFilterBar.tsx @@ -1,11 +1,13 @@ -import styled from '@emotion/styled'; -import SortOrFilterChip from './SortOrFilterChip'; import { FaArrowDown, FaArrowUp } from 'react-icons/fa'; +import styled from '@emotion/styled'; + import { FilterableFieldsType, SelectedFilterType, -} from '../../../interfaces/filters/interface'; -import { SelectedSortType } from '../../../interfaces/sorts/interface'; +} from '@/filters-and-sorts/interfaces/filters/interface'; +import { SelectedSortType } from '@/filters-and-sorts/interfaces/sorts/interface'; + +import SortOrFilterChip from './SortOrFilterChip'; type OwnProps = { sorts: Array>; diff --git a/front/src/components/table/table-header/SortDropdownButton.tsx b/front/src/modules/ui/components/table/table-header/SortDropdownButton.tsx similarity index 97% rename from front/src/components/table/table-header/SortDropdownButton.tsx rename to front/src/modules/ui/components/table/table-header/SortDropdownButton.tsx index b025561c5..5f8a6abf8 100644 --- a/front/src/components/table/table-header/SortDropdownButton.tsx +++ b/front/src/modules/ui/components/table/table-header/SortDropdownButton.tsx @@ -1,9 +1,11 @@ import { useCallback, useState } from 'react'; -import DropdownButton from './DropdownButton'; + import { SelectedSortType, SortType, -} from '../../../interfaces/sorts/interface'; +} from '@/filters-and-sorts/interfaces/sorts/interface'; + +import DropdownButton from './DropdownButton'; type OwnProps = { isSortSelected: boolean; diff --git a/front/src/components/table/table-header/SortOrFilterChip.tsx b/front/src/modules/ui/components/table/table-header/SortOrFilterChip.tsx similarity index 100% rename from front/src/components/table/table-header/SortOrFilterChip.tsx rename to front/src/modules/ui/components/table/table-header/SortOrFilterChip.tsx index 27016400d..ddcb501ea 100644 --- a/front/src/components/table/table-header/SortOrFilterChip.tsx +++ b/front/src/modules/ui/components/table/table-header/SortOrFilterChip.tsx @@ -1,6 +1,6 @@ -import styled from '@emotion/styled'; -import { TbX } from 'react-icons/tb'; import { ReactNode } from 'react'; +import { TbX } from 'react-icons/tb'; +import styled from '@emotion/styled'; type OwnProps = { id: string; diff --git a/front/src/components/table/table-header/TableHeader.tsx b/front/src/modules/ui/components/table/table-header/TableHeader.tsx similarity index 95% rename from front/src/components/table/table-header/TableHeader.tsx rename to front/src/modules/ui/components/table/table-header/TableHeader.tsx index db2bbbce0..99f06692d 100644 --- a/front/src/components/table/table-header/TableHeader.tsx +++ b/front/src/modules/ui/components/table/table-header/TableHeader.tsx @@ -1,18 +1,19 @@ +import { ReactNode, useCallback, useState } from 'react'; import styled from '@emotion/styled'; -import { ReactNode, useCallback, useState } from 'react'; -import { SortDropdownButton } from './SortDropdownButton'; -import { FilterDropdownButton } from './FilterDropdownButton'; -import SortAndFilterBar from './SortAndFilterBar'; import { FilterableFieldsType, FilterConfigType, SelectedFilterType, -} from '../../../interfaces/filters/interface'; +} from '@/filters-and-sorts/interfaces/filters/interface'; import { - SortType, SelectedSortType, -} from '../../../interfaces/sorts/interface'; + SortType, +} from '@/filters-and-sorts/interfaces/sorts/interface'; + +import { FilterDropdownButton } from './FilterDropdownButton'; +import SortAndFilterBar from './SortAndFilterBar'; +import { SortDropdownButton } from './SortDropdownButton'; type OwnProps = { viewName: string; @@ -59,7 +60,7 @@ const StyledFilters = styled.div` margin-right: ${(props) => props.theme.spacing(2)}; `; -function TableHeader({ +export function TableHeader({ viewName, viewIcon, availableSorts, @@ -150,8 +151,6 @@ function TableHeader({ ); } -export default TableHeader; - function updateSortOrFilterByKey( sorts: Readonly, newSort: SortOrFilter, diff --git a/front/src/hooks/__tests__/useOutsideAlerter.test.tsx b/front/src/modules/ui/hooks/__tests__/useOutsideAlerter.test.tsx similarity index 92% rename from front/src/hooks/__tests__/useOutsideAlerter.test.tsx rename to front/src/modules/ui/hooks/__tests__/useOutsideAlerter.test.tsx index 830fb4f25..268d2a507 100644 --- a/front/src/hooks/__tests__/useOutsideAlerter.test.tsx +++ b/front/src/modules/ui/hooks/__tests__/useOutsideAlerter.test.tsx @@ -1,7 +1,8 @@ import { useRef } from 'react'; -import { render, fireEvent } from '@testing-library/react'; -import { useOutsideAlerter } from '../useOutsideAlerter'; import { act } from 'react-dom/test-utils'; +import { fireEvent, render } from '@testing-library/react'; + +import { useOutsideAlerter } from '../useOutsideAlerter'; const onOutsideClick = jest.fn(); function TestComponent() { diff --git a/front/src/modules/ui/common/hooks/useListenClickOutsideArrayOfRef.ts b/front/src/modules/ui/hooks/useListenClickOutsideArrayOfRef.ts similarity index 94% rename from front/src/modules/ui/common/hooks/useListenClickOutsideArrayOfRef.ts rename to front/src/modules/ui/hooks/useListenClickOutsideArrayOfRef.ts index a32178cc2..07c65cacf 100644 --- a/front/src/modules/ui/common/hooks/useListenClickOutsideArrayOfRef.ts +++ b/front/src/modules/ui/hooks/useListenClickOutsideArrayOfRef.ts @@ -1,5 +1,6 @@ import React, { useEffect } from 'react'; -import { isDefined } from '../../../utils/type-guards/isDefined'; + +import { isDefined } from '@/utils/type-guards/isDefined'; export function useListenClickOutsideArrayOfRef( arrayOfRef: Array>, diff --git a/front/src/hooks/useOutsideAlerter.ts b/front/src/modules/ui/hooks/useOutsideAlerter.ts similarity index 100% rename from front/src/hooks/useOutsideAlerter.ts rename to front/src/modules/ui/hooks/useOutsideAlerter.ts diff --git a/front/src/components/icons/components/IconAddressBook.tsx b/front/src/modules/ui/icons/components/IconAddressBook.tsx similarity index 100% rename from front/src/components/icons/components/IconAddressBook.tsx rename to front/src/modules/ui/icons/components/IconAddressBook.tsx index 85156007f..6960e9ea7 100644 --- a/front/src/components/icons/components/IconAddressBook.tsx +++ b/front/src/modules/ui/icons/components/IconAddressBook.tsx @@ -1,7 +1,7 @@ -import { ReactComponent as IconAddressBookRaw } from '../svgs/address-book.svg'; - import { TablerIconsProps } from '@tabler/icons-react'; +import { ReactComponent as IconAddressBookRaw } from '../svgs/address-book.svg'; + export function IconAddressBook(props: TablerIconsProps): JSX.Element { const size = props.size ?? 24; const stroke = props.stroke ?? 2; diff --git a/front/src/components/icons/components/IconComment.tsx b/front/src/modules/ui/icons/components/IconComment.tsx similarity index 100% rename from front/src/components/icons/components/IconComment.tsx rename to front/src/modules/ui/icons/components/IconComment.tsx diff --git a/front/src/components/icons/index.ts b/front/src/modules/ui/icons/index.ts similarity index 100% rename from front/src/components/icons/index.ts rename to front/src/modules/ui/icons/index.ts index 96c4e70af..129b40c24 100644 --- a/front/src/components/icons/index.ts +++ b/front/src/modules/ui/icons/index.ts @@ -1,3 +1,3 @@ -export { IconAward } from '@tabler/icons-react'; export { IconAddressBook } from './components/IconAddressBook'; export { IconComment } from './components/IconComment'; +export { IconAward } from '@tabler/icons-react'; diff --git a/front/src/components/icons/svgs/address-book.svg b/front/src/modules/ui/icons/svgs/address-book.svg similarity index 100% rename from front/src/components/icons/svgs/address-book.svg rename to front/src/modules/ui/icons/svgs/address-book.svg diff --git a/front/src/layout/AppLayout.tsx b/front/src/modules/ui/layout/AppLayout.tsx similarity index 85% rename from front/src/layout/AppLayout.tsx rename to front/src/modules/ui/layout/AppLayout.tsx index 29d246398..5f86aa008 100644 --- a/front/src/layout/AppLayout.tsx +++ b/front/src/modules/ui/layout/AppLayout.tsx @@ -1,7 +1,9 @@ -import { Navbar } from './navbar/Navbar'; -import styled from '@emotion/styled'; import { ThemeProvider } from '@emotion/react'; -import { User } from '../interfaces/entities/user.interface'; +import styled from '@emotion/styled'; + +import { User } from '@/users/interfaces/user.interface'; + +import { Navbar } from './navbar/Navbar'; import { lightTheme } from './styles/themes'; const StyledLayout = styled.div` @@ -26,7 +28,7 @@ type OwnProps = { user?: User; }; -function AppLayout({ children, user }: OwnProps) { +export function AppLayout({ children, user }: OwnProps) { return ( @@ -36,5 +38,3 @@ function AppLayout({ children, user }: OwnProps) { ); } - -export default AppLayout; diff --git a/front/src/layout/Panel.tsx b/front/src/modules/ui/layout/Panel.tsx similarity index 100% rename from front/src/layout/Panel.tsx rename to front/src/modules/ui/layout/Panel.tsx index c0deaa998..2fa1589d1 100644 --- a/front/src/layout/Panel.tsx +++ b/front/src/modules/ui/layout/Panel.tsx @@ -1,5 +1,5 @@ -import styled from '@emotion/styled'; import React from 'react'; +import styled from '@emotion/styled'; const StyledPanel = styled.div` display: flex; diff --git a/front/src/layout/containers/WithTopBarContainer.tsx b/front/src/modules/ui/layout/containers/WithTopBarContainer.tsx similarity index 85% rename from front/src/layout/containers/WithTopBarContainer.tsx rename to front/src/modules/ui/layout/containers/WithTopBarContainer.tsx index 9fbbdfc2f..035c7f9c4 100644 --- a/front/src/layout/containers/WithTopBarContainer.tsx +++ b/front/src/modules/ui/layout/containers/WithTopBarContainer.tsx @@ -1,11 +1,12 @@ -import styled from '@emotion/styled'; -import TopBar from '../top-bar/TopBar'; import { ReactNode } from 'react'; -import { RightDrawer } from '../right-drawer/RightDrawer'; -import { Panel } from '../Panel'; -import { isRightDrawerOpenState } from '../../modules/ui/layout/right-drawer/states/isRightDrawerOpenState'; +import styled from '@emotion/styled'; import { useRecoilState } from 'recoil'; +import { Panel } from '../Panel'; +import { RightDrawer } from '../right-drawer/components/RightDrawer'; +import { isRightDrawerOpenState } from '../right-drawer/states/isRightDrawerOpenState'; +import { TopBar } from '../top-bar/TopBar'; + type OwnProps = { children: JSX.Element; title: string; @@ -45,7 +46,7 @@ const LeftContainer = styled.div` position: relative; `; -function FullWidthContainer({ +export function WithTopBarContainer({ children, title, icon, @@ -65,5 +66,3 @@ function FullWidthContainer({ ); } - -export default FullWidthContainer; diff --git a/front/src/layout/navbar/NavItem.tsx b/front/src/modules/ui/layout/navbar/NavItem.tsx similarity index 100% rename from front/src/layout/navbar/NavItem.tsx rename to front/src/modules/ui/layout/navbar/NavItem.tsx index 6a663606a..20b125c57 100644 --- a/front/src/layout/navbar/NavItem.tsx +++ b/front/src/modules/ui/layout/navbar/NavItem.tsx @@ -1,6 +1,6 @@ -import styled from '@emotion/styled'; -import { useNavigate } from 'react-router-dom'; import { ReactNode } from 'react'; +import { useNavigate } from 'react-router-dom'; +import styled from '@emotion/styled'; type OwnProps = { label: string; diff --git a/front/src/layout/navbar/NavTitle.tsx b/front/src/modules/ui/layout/navbar/NavTitle.tsx similarity index 100% rename from front/src/layout/navbar/NavTitle.tsx rename to front/src/modules/ui/layout/navbar/NavTitle.tsx diff --git a/front/src/layout/navbar/Navbar.tsx b/front/src/modules/ui/layout/navbar/Navbar.tsx similarity index 91% rename from front/src/layout/navbar/Navbar.tsx rename to front/src/modules/ui/layout/navbar/Navbar.tsx index 2223153b7..9a381aaf9 100644 --- a/front/src/layout/navbar/Navbar.tsx +++ b/front/src/modules/ui/layout/navbar/Navbar.tsx @@ -1,11 +1,13 @@ -import styled from '@emotion/styled'; +import { TbBuilding, TbUser } from 'react-icons/tb'; import { useMatch, useResolvedPath } from 'react-router-dom'; -import { User } from '../../interfaces/entities/user.interface'; -import { Workspace } from '../../interfaces/entities/workspace.interface'; +import styled from '@emotion/styled'; + +import { User } from '@/users/interfaces/user.interface'; +import { Workspace } from '@/workspaces/interfaces/workspace.interface'; + import NavItem from './NavItem'; import NavTitle from './NavTitle'; import WorkspaceContainer from './WorkspaceContainer'; -import { TbBuilding, TbUser } from 'react-icons/tb'; const NavbarContainer = styled.div` display: flex; diff --git a/front/src/layout/navbar/WorkspaceContainer.tsx b/front/src/modules/ui/layout/navbar/WorkspaceContainer.tsx similarity index 93% rename from front/src/layout/navbar/WorkspaceContainer.tsx rename to front/src/modules/ui/layout/navbar/WorkspaceContainer.tsx index 590e22d72..7eb166285 100644 --- a/front/src/layout/navbar/WorkspaceContainer.tsx +++ b/front/src/modules/ui/layout/navbar/WorkspaceContainer.tsx @@ -1,5 +1,6 @@ import styled from '@emotion/styled'; -import { Workspace } from '../../interfaces/entities/workspace.interface'; + +import { Workspace } from '@/workspaces/interfaces/workspace.interface'; type OwnProps = { workspace: Workspace; diff --git a/front/src/layout/right-drawer/RightDrawer.tsx b/front/src/modules/ui/layout/right-drawer/components/RightDrawer.tsx similarity index 67% rename from front/src/layout/right-drawer/RightDrawer.tsx rename to front/src/modules/ui/layout/right-drawer/components/RightDrawer.tsx index 31f6fb461..70b18edf1 100644 --- a/front/src/layout/right-drawer/RightDrawer.tsx +++ b/front/src/modules/ui/layout/right-drawer/components/RightDrawer.tsx @@ -1,10 +1,13 @@ import styled from '@emotion/styled'; import { useRecoilState } from 'recoil'; -import { isRightDrawerOpenState } from '../../modules/ui/layout/right-drawer/states/isRightDrawerOpenState'; + +import { isDefined } from '@/utils/type-guards/isDefined'; + +import { Panel } from '../../Panel'; +import { isRightDrawerOpenState } from '../states/isRightDrawerOpenState'; +import { rightDrawerPageState } from '../states/rightDrawerPageState'; + import { RightDrawerRouter } from './RightDrawerRouter'; -import { rightDrawerPageState } from '../../modules/ui/layout/right-drawer/states/rightDrawerPageState'; -import { isDefined } from '../../modules/utils/type-guards/isDefined'; -import { Panel } from '../Panel'; const StyledRightDrawer = styled.div` display: flex; diff --git a/front/src/layout/right-drawer/RightDrawerBody.tsx b/front/src/modules/ui/layout/right-drawer/components/RightDrawerBody.tsx similarity index 100% rename from front/src/layout/right-drawer/RightDrawerBody.tsx rename to front/src/modules/ui/layout/right-drawer/components/RightDrawerBody.tsx diff --git a/front/src/layout/right-drawer/RightDrawerPage.tsx b/front/src/modules/ui/layout/right-drawer/components/RightDrawerPage.tsx similarity index 100% rename from front/src/layout/right-drawer/RightDrawerPage.tsx rename to front/src/modules/ui/layout/right-drawer/components/RightDrawerPage.tsx diff --git a/front/src/layout/right-drawer/RightDrawerRouter.tsx b/front/src/modules/ui/layout/right-drawer/components/RightDrawerRouter.tsx similarity index 52% rename from front/src/layout/right-drawer/RightDrawerRouter.tsx rename to front/src/modules/ui/layout/right-drawer/components/RightDrawerRouter.tsx index 843dbe470..8a6a0f49d 100644 --- a/front/src/layout/right-drawer/RightDrawerRouter.tsx +++ b/front/src/modules/ui/layout/right-drawer/components/RightDrawerRouter.tsx @@ -1,7 +1,9 @@ import { useRecoilState } from 'recoil'; -import { rightDrawerPageState } from '../../modules/ui/layout/right-drawer/states/rightDrawerPageState'; -import { isDefined } from '../../modules/utils/type-guards/isDefined'; -import { RightDrawerComments } from '../../components/comments/RightDrawerComments'; + +import { RightDrawerComments } from '@/comments/components/comments/RightDrawerComments'; +import { isDefined } from '@/utils/type-guards/isDefined'; + +import { rightDrawerPageState } from '../states/rightDrawerPageState'; export function RightDrawerRouter() { const [rightDrawerPage] = useRecoilState(rightDrawerPageState); diff --git a/front/src/layout/right-drawer/RightDrawerTopBar.tsx b/front/src/modules/ui/layout/right-drawer/components/RightDrawerTopBar.tsx similarity index 99% rename from front/src/layout/right-drawer/RightDrawerTopBar.tsx rename to front/src/modules/ui/layout/right-drawer/components/RightDrawerTopBar.tsx index e02e4855c..3c0c87dbb 100644 --- a/front/src/layout/right-drawer/RightDrawerTopBar.tsx +++ b/front/src/modules/ui/layout/right-drawer/components/RightDrawerTopBar.tsx @@ -1,4 +1,5 @@ import styled from '@emotion/styled'; + import { RightDrawerTopBarCloseButton } from './RightDrawerTopBarCloseButton'; const StyledRightDrawerTopBar = styled.div` diff --git a/front/src/layout/right-drawer/RightDrawerTopBarCloseButton.tsx b/front/src/modules/ui/layout/right-drawer/components/RightDrawerTopBarCloseButton.tsx similarity index 88% rename from front/src/layout/right-drawer/RightDrawerTopBarCloseButton.tsx rename to front/src/modules/ui/layout/right-drawer/components/RightDrawerTopBarCloseButton.tsx index 4f507dec7..38dd972f4 100644 --- a/front/src/layout/right-drawer/RightDrawerTopBarCloseButton.tsx +++ b/front/src/modules/ui/layout/right-drawer/components/RightDrawerTopBarCloseButton.tsx @@ -1,7 +1,8 @@ -import styled from '@emotion/styled'; import { FaTimes } from 'react-icons/fa'; +import styled from '@emotion/styled'; import { useRecoilState } from 'recoil'; -import { isRightDrawerOpenState } from '../../modules/ui/layout/right-drawer/states/isRightDrawerOpenState'; + +import { isRightDrawerOpenState } from '../states/isRightDrawerOpenState'; const StyledButton = styled.button` height: 24px; diff --git a/front/src/modules/ui/layout/right-drawer/hooks/useOpenRightDrawer.ts b/front/src/modules/ui/layout/right-drawer/hooks/useOpenRightDrawer.ts index dbce2d034..b66d82851 100644 --- a/front/src/modules/ui/layout/right-drawer/hooks/useOpenRightDrawer.ts +++ b/front/src/modules/ui/layout/right-drawer/hooks/useOpenRightDrawer.ts @@ -1,4 +1,5 @@ import { useRecoilState } from 'recoil'; + import { isRightDrawerOpenState } from '../states/isRightDrawerOpenState'; import { rightDrawerPageState } from '../states/rightDrawerPageState'; import { RightDrawerPage } from '../types/RightDrawerPage'; diff --git a/front/src/modules/ui/layout/right-drawer/states/rightDrawerPageState.ts b/front/src/modules/ui/layout/right-drawer/states/rightDrawerPageState.ts index 12641d91a..4c161d90e 100644 --- a/front/src/modules/ui/layout/right-drawer/states/rightDrawerPageState.ts +++ b/front/src/modules/ui/layout/right-drawer/states/rightDrawerPageState.ts @@ -1,4 +1,5 @@ import { atom } from 'recoil'; + import { RightDrawerPage } from '../types/RightDrawerPage'; export const rightDrawerPageState = atom({ diff --git a/front/src/layout/styles/dark-noise.jpg b/front/src/modules/ui/layout/styles/dark-noise.jpg similarity index 100% rename from front/src/layout/styles/dark-noise.jpg rename to front/src/modules/ui/layout/styles/dark-noise.jpg diff --git a/front/src/layout/styles/light-noise.jpg b/front/src/modules/ui/layout/styles/light-noise.jpg similarity index 100% rename from front/src/layout/styles/light-noise.jpg rename to front/src/modules/ui/layout/styles/light-noise.jpg diff --git a/front/src/layout/styles/themes.ts b/front/src/modules/ui/layout/styles/themes.ts similarity index 99% rename from front/src/layout/styles/themes.ts rename to front/src/modules/ui/layout/styles/themes.ts index 34a456f3e..58073dd20 100644 --- a/front/src/layout/styles/themes.ts +++ b/front/src/modules/ui/layout/styles/themes.ts @@ -1,4 +1,5 @@ import { css } from '@emotion/react'; + import DarkNoise from './dark-noise.jpg'; import LightNoise from './light-noise.jpg'; diff --git a/front/src/layout/top-bar/TopBar.tsx b/front/src/modules/ui/layout/top-bar/TopBar.tsx similarity index 94% rename from front/src/layout/top-bar/TopBar.tsx rename to front/src/modules/ui/layout/top-bar/TopBar.tsx index 6d7ed069b..b911ffbc0 100644 --- a/front/src/layout/top-bar/TopBar.tsx +++ b/front/src/modules/ui/layout/top-bar/TopBar.tsx @@ -1,6 +1,6 @@ -import styled from '@emotion/styled'; import { ReactNode } from 'react'; import { TbPlus } from 'react-icons/tb'; +import styled from '@emotion/styled'; const TopBarContainer = styled.div` display: flex; @@ -43,7 +43,7 @@ type OwnProps = { onAddButtonClick?: () => void; }; -function TopBar({ title, icon, onAddButtonClick }: OwnProps) { +export function TopBar({ title, icon, onAddButtonClick }: OwnProps) { return ( <> @@ -61,5 +61,3 @@ function TopBar({ title, icon, onAddButtonClick }: OwnProps) { ); } - -export default TopBar; diff --git a/front/src/modules/ui/tables/hooks/useResetTableRowSelection.ts b/front/src/modules/ui/tables/hooks/useResetTableRowSelection.ts index bbebb617e..d3065651a 100644 --- a/front/src/modules/ui/tables/hooks/useResetTableRowSelection.ts +++ b/front/src/modules/ui/tables/hooks/useResetTableRowSelection.ts @@ -1,6 +1,7 @@ -import { useSetRecoilState } from 'recoil'; -import { currentRowSelectionState } from '../states/rowSelectionState'; import { useCallback } from 'react'; +import { useSetRecoilState } from 'recoil'; + +import { currentRowSelectionState } from '../states/rowSelectionState'; export function useResetTableRowSelection() { const setCurrentRowSelectionState = useSetRecoilState( diff --git a/front/src/modules/ui/tables/states/selectedRowIdsState.ts b/front/src/modules/ui/tables/states/selectedRowIdsState.ts index bdf3c606e..9e9784cb4 100644 --- a/front/src/modules/ui/tables/states/selectedRowIdsState.ts +++ b/front/src/modules/ui/tables/states/selectedRowIdsState.ts @@ -1,4 +1,5 @@ import { selector } from 'recoil'; + import { currentRowSelectionState } from './rowSelectionState'; export const selectedRowIdsState = selector({ diff --git a/front/src/interfaces/entities/__tests__/user.interface.test.ts b/front/src/modules/users/interfaces/__tests__/user.interface.test.ts similarity index 100% rename from front/src/interfaces/entities/__tests__/user.interface.test.ts rename to front/src/modules/users/interfaces/__tests__/user.interface.test.ts index 8be28f073..e59efdcac 100644 --- a/front/src/interfaces/entities/__tests__/user.interface.test.ts +++ b/front/src/modules/users/interfaces/__tests__/user.interface.test.ts @@ -1,9 +1,9 @@ import { + GraphqlMutationUser, + GraphqlQueryUser, mapToGqlUser, mapToUser, User, - GraphqlMutationUser, - GraphqlQueryUser, } from '../user.interface'; describe('User mappers', () => { diff --git a/front/src/interfaces/entities/user.interface.ts b/front/src/modules/users/interfaces/user.interface.ts similarity index 100% rename from front/src/interfaces/entities/user.interface.ts rename to front/src/modules/users/interfaces/user.interface.ts index e6e791f4e..1a76ef291 100644 --- a/front/src/interfaces/entities/user.interface.ts +++ b/front/src/modules/users/interfaces/user.interface.ts @@ -1,7 +1,7 @@ import { GraphqlQueryWorkspaceMember, - WorkspaceMember, mapToWorkspaceMember, + WorkspaceMember, } from './workspaceMember.interface'; export interface User { diff --git a/front/src/interfaces/entities/workspaceMember.interface.ts b/front/src/modules/users/interfaces/workspaceMember.interface.ts similarity index 93% rename from front/src/interfaces/entities/workspaceMember.interface.ts rename to front/src/modules/users/interfaces/workspaceMember.interface.ts index b41c3900a..1e38d00a1 100644 --- a/front/src/interfaces/entities/workspaceMember.interface.ts +++ b/front/src/modules/users/interfaces/workspaceMember.interface.ts @@ -1,8 +1,8 @@ import { - Workspace, GraphqlQueryWorkspace, mapToWorkspace, -} from './workspace.interface'; + Workspace, +} from '../../workspaces/interfaces/workspace.interface'; export interface WorkspaceMember { id: string; diff --git a/front/src/services/api/users/index.tsx b/front/src/modules/users/services/index.tsx similarity index 79% rename from front/src/services/api/users/index.tsx rename to front/src/modules/users/services/index.tsx index b56b0c968..5eb898e09 100644 --- a/front/src/services/api/users/index.tsx +++ b/front/src/modules/users/services/index.tsx @@ -1,5 +1,6 @@ -import { QueryResult, gql, useQuery } from '@apollo/client'; -import { GraphqlQueryUser } from '../../../interfaces/entities/user.interface'; +import { gql, QueryResult, useQuery } from '@apollo/client'; + +import { GraphqlQueryUser } from '../interfaces/user.interface'; export const GET_CURRENT_USER = gql` query GetCurrentUser($uuid: String) { diff --git a/front/src/services/api/users/test.tsx b/front/src/modules/users/services/test.tsx similarity index 100% rename from front/src/services/api/users/test.tsx rename to front/src/modules/users/services/test.tsx diff --git a/front/src/services/__tests__/utils.test.ts b/front/src/modules/utils/__tests__/utils.test.ts similarity index 100% rename from front/src/services/__tests__/utils.test.ts rename to front/src/modules/utils/__tests__/utils.test.ts diff --git a/front/src/interfaces/entities/generic.interface.ts b/front/src/modules/utils/interfaces/generic.interface.ts similarity index 66% rename from front/src/interfaces/entities/generic.interface.ts rename to front/src/modules/utils/interfaces/generic.interface.ts index d6ae8bd63..3eb72e944 100644 --- a/front/src/interfaces/entities/generic.interface.ts +++ b/front/src/modules/utils/interfaces/generic.interface.ts @@ -1,11 +1,17 @@ +import { + Company, + GraphqlQueryCompany, +} from '@/companies/interfaces/company.interface'; +import { + GraphqlQueryPerson, + Person, +} from '@/people/interfaces/person.interface'; +import { GraphqlQueryUser, User } from '@/users/interfaces/user.interface'; import { CompanyWhereInput as Companies_Bool_Exp, PersonWhereInput as People_Bool_Exp, UserWhereInput as Users_Bool_Exp, -} from '../../generated/graphql'; -import { Company, GraphqlQueryCompany } from './company.interface'; -import { GraphqlQueryPerson, Person } from './person.interface'; -import { GraphqlQueryUser, User } from './user.interface'; +} from '~/generated/graphql'; export type AnyEntity = { id: string; diff --git a/front/src/services/utils.ts b/front/src/modules/utils/utils.ts similarity index 100% rename from front/src/services/utils.ts rename to front/src/modules/utils/utils.ts diff --git a/front/src/interfaces/entities/workspace.interface.ts b/front/src/modules/workspaces/interfaces/workspace.interface.ts similarity index 100% rename from front/src/interfaces/entities/workspace.interface.ts rename to front/src/modules/workspaces/interfaces/workspace.interface.ts diff --git a/front/src/pages/auth/Callback.tsx b/front/src/pages/auth/Callback.tsx index 50815bfb6..37a3d9cb0 100644 --- a/front/src/pages/auth/Callback.tsx +++ b/front/src/pages/auth/Callback.tsx @@ -1,6 +1,7 @@ -import { useSearchParams, useNavigate } from 'react-router-dom'; import { useEffect, useState } from 'react'; -import { refreshAccessToken } from '../../services/auth/AuthService'; +import { useNavigate, useSearchParams } from 'react-router-dom'; + +import { refreshAccessToken } from '@/auth/services/AuthService'; function Callback() { const [searchParams] = useSearchParams(); diff --git a/front/src/pages/auth/Login.tsx b/front/src/pages/auth/Login.tsx index d46a63a89..4a273f1ca 100644 --- a/front/src/pages/auth/Login.tsx +++ b/front/src/pages/auth/Login.tsx @@ -1,8 +1,9 @@ import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; -import { hasAccessToken } from '../../services/auth/AuthService'; -function Login() { +import { hasAccessToken } from '@/auth/services/AuthService'; + +export function Login() { const navigate = useNavigate(); useEffect(() => { if (!hasAccessToken()) { @@ -14,5 +15,3 @@ function Login() { return <>; } - -export default Login; diff --git a/front/src/pages/companies/Companies.tsx b/front/src/pages/companies/Companies.tsx index 306697e90..f96019633 100644 --- a/front/src/pages/companies/Companies.tsx +++ b/front/src/pages/companies/Companies.tsx @@ -1,41 +1,42 @@ -import { useState, useCallback } from 'react'; +import { useCallback, useState } from 'react'; import { FaList } from 'react-icons/fa'; +import { TbBuilding } from 'react-icons/tb'; import styled from '@emotion/styled'; -import WithTopBarContainer from '../../layout/containers/WithTopBarContainer'; import { v4 as uuidv4 } from 'uuid'; + +import { + Company, + mapToCompany, +} from '@/companies/interfaces/company.interface'; import { CompaniesSelectedSortType, defaultOrderBy, insertCompany, useCompaniesQuery, -} from '../../services/api/companies'; -import { EntityTable } from '../../components/table/EntityTable'; -import { - Company, - mapToCompany, -} from '../../interfaces/entities/company.interface'; - +} from '@/companies/services'; import { reduceFiltersToWhere, reduceSortsToOrderBy, -} from '../../components/table/table-header/helpers'; -import { CompanyOrderByWithRelationInput as Companies_Order_By } from '../../generated/graphql'; -import { SelectedFilterType } from '../../interfaces/filters/interface'; -import { BoolExpType } from '../../interfaces/entities/generic.interface'; -import { useCompaniesColumns } from './companies-columns'; -import { availableSorts } from './companies-sorts'; -import { availableFilters } from './companies-filters'; -import { TbBuilding } from 'react-icons/tb'; -import { EntityTableActionBar } from '../../components/table/action-bar/EntityTableActionBar'; +} from '@/filters-and-sorts/helpers'; +import { SelectedFilterType } from '@/filters-and-sorts/interfaces/filters/interface'; +import { EntityTableActionBar } from '@/ui/components/table/action-bar/EntityTableActionBar'; +import { TableActionBarButtonToggleComments } from '@/ui/components/table/action-bar/TableActionBarButtonOpenComments'; +import { EntityTable } from '@/ui/components/table/EntityTable'; +import { WithTopBarContainer } from '@/ui/layout/containers/WithTopBarContainer'; +import { BoolExpType } from '@/utils/interfaces/generic.interface'; +import { CompanyOrderByWithRelationInput as Companies_Order_By } from '~/generated/graphql'; + import { TableActionBarButtonDeleteCompanies } from './table/TableActionBarButtonDeleteCompanies'; -import { TableActionBarButtonToggleComments } from '../../components/table/action-bar/TableActionBarButtonOpenComments'; +import { useCompaniesColumns } from './companies-columns'; +import { availableFilters } from './companies-filters'; +import { availableSorts } from './companies-sorts'; const StyledCompaniesContainer = styled.div` display: flex; width: 100%; `; -function Companies() { +export function Companies() { const [orderBy, setOrderBy] = useState(defaultOrderBy); const [where, setWhere] = useState>({}); @@ -99,5 +100,3 @@ function Companies() { ); } - -export default Companies; diff --git a/front/src/pages/companies/__stories__/Companies.filterBy.stories.tsx b/front/src/pages/companies/__stories__/Companies.filterBy.stories.tsx index b8a9c3688..53153e37f 100644 --- a/front/src/pages/companies/__stories__/Companies.filterBy.stories.tsx +++ b/front/src/pages/companies/__stories__/Companies.filterBy.stories.tsx @@ -2,7 +2,8 @@ import { expect } from '@storybook/jest'; import type { Meta } from '@storybook/react'; import { userEvent, within } from '@storybook/testing-library'; -import Companies from '../Companies'; +import { Companies } from '../Companies'; + import { Story } from './Companies.stories'; import { mocks, render } from './shared'; diff --git a/front/src/pages/companies/__stories__/Companies.sortBy.stories.tsx b/front/src/pages/companies/__stories__/Companies.sortBy.stories.tsx index f391ebd1d..2307bdea2 100644 --- a/front/src/pages/companies/__stories__/Companies.sortBy.stories.tsx +++ b/front/src/pages/companies/__stories__/Companies.sortBy.stories.tsx @@ -2,7 +2,8 @@ import { expect } from '@storybook/jest'; import type { Meta } from '@storybook/react'; import { userEvent, within } from '@storybook/testing-library'; -import Companies from '../Companies'; +import { Companies } from '../Companies'; + import { Story } from './Companies.stories'; import { mocks, render } from './shared'; diff --git a/front/src/pages/companies/__stories__/Companies.stories.tsx b/front/src/pages/companies/__stories__/Companies.stories.tsx index 5ea914038..656e78670 100644 --- a/front/src/pages/companies/__stories__/Companies.stories.tsx +++ b/front/src/pages/companies/__stories__/Companies.stories.tsx @@ -1,9 +1,9 @@ import type { Meta, StoryObj } from '@storybook/react'; -import Companies from '../Companies'; +import { graphqlMocks } from '~/testing/graphqlMocks'; +import { getRenderWrapperForPage } from '~/testing/renderWrappers'; -import { getRenderWrapperForPage } from '../../../testing/renderWrappers'; -import { graphqlMocks } from '../../../testing/graphqlMocks'; +import { Companies } from '../Companies'; const meta: Meta = { title: 'Pages/Companies', diff --git a/front/src/pages/companies/__stories__/shared.tsx b/front/src/pages/companies/__stories__/shared.tsx index 6205f0efb..f81301681 100644 --- a/front/src/pages/companies/__stories__/shared.tsx +++ b/front/src/pages/companies/__stories__/shared.tsx @@ -1,19 +1,19 @@ -import { graphql } from 'msw'; -import { RecoilRoot } from 'recoil'; -import { ThemeProvider } from '@emotion/react'; import { MemoryRouter } from 'react-router-dom'; import { ApolloProvider } from '@apollo/client'; +import { ThemeProvider } from '@emotion/react'; +import { graphql } from 'msw'; +import { RecoilRoot } from 'recoil'; -import { filterAndSortData } from '../../../testing/mock-data'; -import { mockedCompaniesData } from '../../../testing/mock-data/companies'; -import { GraphqlQueryCompany } from '../../../interfaces/entities/company.interface'; +import { GraphqlQueryCompany } from '@/companies/interfaces/company.interface'; +import { lightTheme } from '@/ui/layout/styles/themes'; +import { GraphqlQueryUser } from '@/users/interfaces/user.interface'; +import { FullHeightStorybookLayout } from '~/testing/FullHeightStorybookLayout'; +import { filterAndSortData } from '~/testing/mock-data'; +import { mockedCompaniesData } from '~/testing/mock-data/companies'; +import { mockedUsersData } from '~/testing/mock-data/users'; +import { mockedClient } from '~/testing/mockedClient'; -import { lightTheme } from '../../../layout/styles/themes'; -import { FullHeightStorybookLayout } from '../../../testing/FullHeightStorybookLayout'; -import { mockedClient } from '../../../testing/mockedClient'; -import Companies from '../Companies'; -import { GraphqlQueryUser } from '../../../interfaces/entities/user.interface'; -import { mockedUsersData } from '../../../testing/mock-data/users'; +import { Companies } from '../Companies'; export const mocks = [ graphql.query('GetCompanies', (req, res, ctx) => { diff --git a/front/src/pages/companies/companies-columns.tsx b/front/src/pages/companies/companies-columns.tsx index 89a2ef5fe..cccde5552 100644 --- a/front/src/pages/companies/companies-columns.tsx +++ b/front/src/pages/companies/companies-columns.tsx @@ -1,21 +1,4 @@ import { useMemo } from 'react'; -import { CellContext, createColumnHelper } from '@tanstack/react-table'; - -import { SEARCH_USER_QUERY } from '../../services/api/search/search'; -import { SearchConfigType } from '../../interfaces/search/interface'; - -import { Company } from '../../interfaces/entities/company.interface'; -import { updateCompany } from '../../services/api/companies'; -import { User, mapToUser } from '../../interfaces/entities/user.interface'; - -import ColumnHead from '../../components/table/ColumnHead'; -import { SelectAllCheckbox } from '../../components/table/SelectAllCheckbox'; -import EditableDate from '../../components/editable-cell/EditableDate'; -import EditableRelation from '../../components/editable-cell/EditableRelation'; -import EditableText from '../../components/editable-cell/EditableText'; -import PersonChip, { - PersonChipPropsType, -} from '../../components/chips/PersonChip'; import { TbBuilding, TbCalendar, @@ -24,9 +7,25 @@ import { TbSum, TbUser, } from 'react-icons/tb'; -import { QueryMode } from '../../generated/graphql'; -import { CheckboxCell } from '../../components/table/CheckboxCell'; -import { CompanyEditableNameChipCell } from '../../components/companies/CompanyEditableNameCell'; +import { CellContext, createColumnHelper } from '@tanstack/react-table'; + +import { CompanyEditableNameChipCell } from '@/companies/components/CompanyEditableNameCell'; +import { Company } from '@/companies/interfaces/company.interface'; +import { updateCompany } from '@/companies/services'; +import { + PersonChip, + PersonChipPropsType, +} from '@/people/components/PersonChip'; +import { SearchConfigType } from '@/search/interfaces/interface'; +import { SEARCH_USER_QUERY } from '@/search/services/search'; +import { EditableDate } from '@/ui/components/editable-cell/EditableDate'; +import { EditableRelation } from '@/ui/components/editable-cell/EditableRelation'; +import { EditableText } from '@/ui/components/editable-cell/EditableText'; +import { CheckboxCell } from '@/ui/components/table/CheckboxCell'; +import { ColumnHead } from '@/ui/components/table/ColumnHead'; +import { SelectAllCheckbox } from '@/ui/components/table/SelectAllCheckbox'; +import { mapToUser, User } from '@/users/interfaces/user.interface'; +import { QueryMode } from '~/generated/graphql'; const columnHelper = createColumnHelper(); diff --git a/front/src/pages/companies/companies-filters.tsx b/front/src/pages/companies/companies-filters.tsx index e3d82eded..ba5e39e18 100644 --- a/front/src/pages/companies/companies-filters.tsx +++ b/front/src/pages/companies/companies-filters.tsx @@ -6,11 +6,12 @@ import { TbSum, TbUser, } from 'react-icons/tb'; -import { Company } from '../../interfaces/entities/company.interface'; -import { FilterConfigType } from '../../interfaces/filters/interface'; -import { SEARCH_USER_QUERY } from '../../services/api/search/search'; -import { User, mapToUser } from '../../interfaces/entities/user.interface'; -import { QueryMode } from '../../generated/graphql'; + +import { Company } from '@/companies/interfaces/company.interface'; +import { FilterConfigType } from '@/filters-and-sorts/interfaces/filters/interface'; +import { SEARCH_USER_QUERY } from '@/search/services/search'; +import { mapToUser, User } from '@/users/interfaces/user.interface'; +import { QueryMode } from '~/generated/graphql'; export const nameFilter = { key: 'name', diff --git a/front/src/pages/companies/companies-sorts.tsx b/front/src/pages/companies/companies-sorts.tsx index bb2e39cf7..9bfb67e6e 100644 --- a/front/src/pages/companies/companies-sorts.tsx +++ b/front/src/pages/companies/companies-sorts.tsx @@ -5,8 +5,9 @@ import { TbMapPin, TbSum, } from 'react-icons/tb'; -import { CompanyOrderByWithRelationInput as Companies_Order_By } from '../../generated/graphql'; -import { SortType } from '../../interfaces/sorts/interface'; + +import { SortType } from '@/filters-and-sorts/interfaces/sorts/interface'; +import { CompanyOrderByWithRelationInput as Companies_Order_By } from '~/generated/graphql'; export const availableSorts = [ { diff --git a/front/src/pages/companies/table/TableActionBarButtonDeleteCompanies.tsx b/front/src/pages/companies/table/TableActionBarButtonDeleteCompanies.tsx index 97e102f88..630d05303 100644 --- a/front/src/pages/companies/table/TableActionBarButtonDeleteCompanies.tsx +++ b/front/src/pages/companies/table/TableActionBarButtonDeleteCompanies.tsx @@ -1,9 +1,10 @@ import { TbTrash } from 'react-icons/tb'; -import { EntityTableActionBarButton } from '../../../components/table/action-bar/EntityTableActionBarButton'; -import { useDeleteCompaniesMutation } from '../../../generated/graphql'; -import { selectedRowIdsState } from '../../../modules/ui/tables/states/selectedRowIdsState'; import { useRecoilValue } from 'recoil'; -import { useResetTableRowSelection } from '../../../modules/ui/tables/hooks/useResetTableRowSelection'; + +import { EntityTableActionBarButton } from '@/ui/components/table/action-bar/EntityTableActionBarButton'; +import { useResetTableRowSelection } from '@/ui/tables/hooks/useResetTableRowSelection'; +import { selectedRowIdsState } from '@/ui/tables/states/selectedRowIdsState'; +import { useDeleteCompaniesMutation } from '~/generated/graphql'; export function TableActionBarButtonDeleteCompanies() { const selectedRowIds = useRecoilValue(selectedRowIdsState); diff --git a/front/src/pages/opportunities/Opportunities.tsx b/front/src/pages/opportunities/Opportunities.tsx index d1e109801..ce3e7f41f 100644 --- a/front/src/pages/opportunities/Opportunities.tsx +++ b/front/src/pages/opportunities/Opportunities.tsx @@ -1,12 +1,11 @@ import { FaBullseye } from 'react-icons/fa'; -import WithTopBarContainer from '../../layout/containers/WithTopBarContainer'; -function Opportunities() { +import { WithTopBarContainer } from '@/ui/layout/containers/WithTopBarContainer'; + +export function Opportunities() { return ( }> <> ); } - -export default Opportunities; diff --git a/front/src/pages/people/People.tsx b/front/src/pages/people/People.tsx index eb49371d7..07e09d3fd 100644 --- a/front/src/pages/people/People.tsx +++ b/front/src/pages/people/People.tsx @@ -1,34 +1,31 @@ import { useCallback, useState } from 'react'; import { FaList } from 'react-icons/fa'; -import { v4 as uuidv4 } from 'uuid'; +import { TbUser } from 'react-icons/tb'; import styled from '@emotion/styled'; +import { v4 as uuidv4 } from 'uuid'; -import WithTopBarContainer from '../../layout/containers/WithTopBarContainer'; -import { EntityTable } from '../../components/table/EntityTable'; - -import { - Person, - mapToPerson, -} from '../../interfaces/entities/person.interface'; -import { - PeopleSelectedSortType, - defaultOrderBy, - insertPerson, - usePeopleQuery, -} from '../../services/api/people'; import { reduceFiltersToWhere, reduceSortsToOrderBy, -} from '../../components/table/table-header/helpers'; -import { SelectedFilterType } from '../../interfaces/filters/interface'; -import { BoolExpType } from '../../interfaces/entities/generic.interface'; -import { usePeopleColumns } from './people-columns'; -import { availableSorts } from './people-sorts'; -import { availableFilters } from './people-filters'; -import { TbUser } from 'react-icons/tb'; -import { EntityTableActionBar } from '../../components/table/action-bar/EntityTableActionBar'; +} from '@/filters-and-sorts/helpers'; +import { SelectedFilterType } from '@/filters-and-sorts/interfaces/filters/interface'; +import { mapToPerson, Person } from '@/people/interfaces/person.interface'; +import { + defaultOrderBy, + insertPerson, + PeopleSelectedSortType, + usePeopleQuery, +} from '@/people/services'; +import { EntityTableActionBar } from '@/ui/components/table/action-bar/EntityTableActionBar'; +import { TableActionBarButtonToggleComments } from '@/ui/components/table/action-bar/TableActionBarButtonOpenComments'; +import { EntityTable } from '@/ui/components/table/EntityTable'; +import { WithTopBarContainer } from '@/ui/layout/containers/WithTopBarContainer'; +import { BoolExpType } from '@/utils/interfaces/generic.interface'; + import { TableActionBarButtonDeletePeople } from './table/TableActionBarButtonDeletePeople'; -import { TableActionBarButtonToggleComments } from '../../components/table/action-bar/TableActionBarButtonOpenComments'; +import { usePeopleColumns } from './people-columns'; +import { availableFilters } from './people-filters'; +import { availableSorts } from './people-sorts'; const StyledPeopleContainer = styled.div` display: flex; @@ -36,7 +33,7 @@ const StyledPeopleContainer = styled.div` height: 100%; `; -function People() { +export function People() { const [orderBy, setOrderBy] = useState(defaultOrderBy); const [where, setWhere] = useState>({}); @@ -101,5 +98,3 @@ function People() { ); } - -export default People; diff --git a/front/src/pages/people/__stories__/People.filterBy.stories.tsx b/front/src/pages/people/__stories__/People.filterBy.stories.tsx index c1463c293..e893c080c 100644 --- a/front/src/pages/people/__stories__/People.filterBy.stories.tsx +++ b/front/src/pages/people/__stories__/People.filterBy.stories.tsx @@ -2,10 +2,12 @@ import { expect } from '@storybook/jest'; import type { Meta } from '@storybook/react'; import { userEvent, within } from '@storybook/testing-library'; -import People from '../People'; +import { graphqlMocks } from '~/testing/graphqlMocks'; + +import { People } from '../People'; + import { Story } from './People.stories'; import { render } from './shared'; -import { graphqlMocks } from '../../../testing/graphqlMocks'; const meta: Meta = { title: 'Pages/People/FilterBy', diff --git a/front/src/pages/people/__stories__/People.inputs.stories.tsx b/front/src/pages/people/__stories__/People.inputs.stories.tsx index 68278c5b7..4dd07b683 100644 --- a/front/src/pages/people/__stories__/People.inputs.stories.tsx +++ b/front/src/pages/people/__stories__/People.inputs.stories.tsx @@ -1,16 +1,18 @@ import { expect } from '@storybook/jest'; import type { Meta } from '@storybook/react'; import { userEvent, within } from '@storybook/testing-library'; +import { graphql } from 'msw'; + +import { GraphqlQueryCompany } from '@/companies/interfaces/company.interface'; +import { graphqlMocks } from '~/testing/graphqlMocks'; +import { fetchOneFromData } from '~/testing/mock-data'; +import { mockedPeopleData } from '~/testing/mock-data/people'; +import { sleep } from '~/testing/sleep'; + +import { People } from '../People'; -import People from '../People'; import { Story } from './People.stories'; import { render } from './shared'; -import { mockedPeopleData } from '../../../testing/mock-data/people'; -import { sleep } from '../../../testing/sleep'; -import { graphqlMocks } from '../../../testing/graphqlMocks'; -import { graphql } from 'msw'; -import { fetchOneFromData } from '../../../testing/mock-data'; -import { GraphqlQueryCompany } from '../../../interfaces/entities/company.interface'; const meta: Meta = { title: 'Pages/People/Input', diff --git a/front/src/pages/people/__stories__/People.sortBy.stories.tsx b/front/src/pages/people/__stories__/People.sortBy.stories.tsx index 065707af8..70a5f1346 100644 --- a/front/src/pages/people/__stories__/People.sortBy.stories.tsx +++ b/front/src/pages/people/__stories__/People.sortBy.stories.tsx @@ -2,10 +2,12 @@ import { expect } from '@storybook/jest'; import type { Meta } from '@storybook/react'; import { userEvent, within } from '@storybook/testing-library'; -import People from '../People'; +import { graphqlMocks } from '~/testing/graphqlMocks'; + +import { People } from '../People'; + import { Story } from './People.stories'; import { render } from './shared'; -import { graphqlMocks } from '../../../testing/graphqlMocks'; const meta: Meta = { title: 'Pages/People/SortBy', diff --git a/front/src/pages/people/__stories__/People.stories.tsx b/front/src/pages/people/__stories__/People.stories.tsx index ef9158703..57f7eaecc 100644 --- a/front/src/pages/people/__stories__/People.stories.tsx +++ b/front/src/pages/people/__stories__/People.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from '@storybook/react'; -import People from '../People'; +import { graphqlMocks } from '~/testing/graphqlMocks'; + +import { People } from '../People'; import { render } from './shared'; -import { graphqlMocks } from '../../../testing/graphqlMocks'; const meta: Meta = { title: 'Pages/People', diff --git a/front/src/pages/people/__stories__/shared.tsx b/front/src/pages/people/__stories__/shared.tsx index 9545a15cd..3e520cf9e 100644 --- a/front/src/pages/people/__stories__/shared.tsx +++ b/front/src/pages/people/__stories__/shared.tsx @@ -1,12 +1,13 @@ -import { RecoilRoot } from 'recoil'; -import { ThemeProvider } from '@emotion/react'; import { MemoryRouter } from 'react-router-dom'; import { ApolloProvider } from '@apollo/client'; +import { ThemeProvider } from '@emotion/react'; +import { RecoilRoot } from 'recoil'; -import { lightTheme } from '../../../layout/styles/themes'; -import { FullHeightStorybookLayout } from '../../../testing/FullHeightStorybookLayout'; -import { mockedClient } from '../../../testing/mockedClient'; -import People from '../People'; +import { lightTheme } from '@/ui/layout/styles/themes'; +import { FullHeightStorybookLayout } from '~/testing/FullHeightStorybookLayout'; +import { mockedClient } from '~/testing/mockedClient'; + +import { People } from '../People'; export function render() { return ( diff --git a/front/src/pages/people/people-columns.tsx b/front/src/pages/people/people-columns.tsx index 1d913a595..7db401362 100644 --- a/front/src/pages/people/people-columns.tsx +++ b/front/src/pages/people/people-columns.tsx @@ -1,14 +1,4 @@ import { useMemo } from 'react'; -import { CellContext, createColumnHelper } from '@tanstack/react-table'; -import { Person } from '../../interfaces/entities/person.interface'; -import { updatePerson } from '../../services/api/people'; - -import ColumnHead from '../../components/table/ColumnHead'; -import { SelectAllCheckbox } from '../../components/table/SelectAllCheckbox'; -import EditablePhone from '../../components/editable-cell/EditablePhone'; -import { EditablePeopleFullName } from '../../components/people/EditablePeopleFullName'; -import EditableDate from '../../components/editable-cell/EditableDate'; -import EditableText from '../../components/editable-cell/EditableText'; import { TbBuilding, TbCalendar, @@ -17,8 +7,18 @@ import { TbPhone, TbUser, } from 'react-icons/tb'; -import { PeopleCompanyCell } from '../../components/people/PeopleCompanyCell'; -import { CheckboxCell } from '../../components/table/CheckboxCell'; +import { CellContext, createColumnHelper } from '@tanstack/react-table'; + +import { EditablePeopleFullName } from '@/people/components/EditablePeopleFullName'; +import { PeopleCompanyCell } from '@/people/components/PeopleCompanyCell'; +import { Person } from '@/people/interfaces/person.interface'; +import { updatePerson } from '@/people/services'; +import { EditableDate } from '@/ui/components/editable-cell/EditableDate'; +import { EditablePhone } from '@/ui/components/editable-cell/EditablePhone'; +import { EditableText } from '@/ui/components/editable-cell/EditableText'; +import { CheckboxCell } from '@/ui/components/table/CheckboxCell'; +import { ColumnHead } from '@/ui/components/table/ColumnHead'; +import { SelectAllCheckbox } from '@/ui/components/table/SelectAllCheckbox'; const columnHelper = createColumnHelper(); diff --git a/front/src/pages/people/people-filters.tsx b/front/src/pages/people/people-filters.tsx index 33c18b87b..ab26f6030 100644 --- a/front/src/pages/people/people-filters.tsx +++ b/front/src/pages/people/people-filters.tsx @@ -1,10 +1,3 @@ -import { Person } from '../../interfaces/entities/person.interface'; -import { SEARCH_COMPANY_QUERY } from '../../services/api/search/search'; -import { - Company, - mapToCompany, -} from '../../interfaces/entities/company.interface'; -import { FilterConfigType } from '../../interfaces/filters/interface'; import { TbBuilding, TbCalendar, @@ -13,7 +6,15 @@ import { TbPhone, TbUser, } from 'react-icons/tb'; -import { QueryMode } from '../../generated/graphql'; + +import { + Company, + mapToCompany, +} from '@/companies/interfaces/company.interface'; +import { FilterConfigType } from '@/filters-and-sorts/interfaces/filters/interface'; +import { Person } from '@/people/interfaces/person.interface'; +import { SEARCH_COMPANY_QUERY } from '@/search/services/search'; +import { QueryMode } from '~/generated/graphql'; export const fullnameFilter = { key: 'fullname', diff --git a/front/src/pages/people/people-sorts.tsx b/front/src/pages/people/people-sorts.tsx index e1a2de4d9..e29d6a2b0 100644 --- a/front/src/pages/people/people-sorts.tsx +++ b/front/src/pages/people/people-sorts.tsx @@ -1,8 +1,3 @@ -import { - SortOrder as Order_By, - PersonOrderByWithRelationInput as People_Order_By, -} from '../../generated/graphql'; -import { SortType } from '../../interfaces/sorts/interface'; import { TbBuilding, TbCalendar, @@ -12,6 +7,12 @@ import { TbUser, } from 'react-icons/tb'; +import { SortType } from '@/filters-and-sorts/interfaces/sorts/interface'; +import { + PersonOrderByWithRelationInput as People_Order_By, + SortOrder as Order_By, +} from '~/generated/graphql'; + export const availableSorts = [ { key: 'fullname', diff --git a/front/src/pages/people/table/TableActionBarButtonDeletePeople.tsx b/front/src/pages/people/table/TableActionBarButtonDeletePeople.tsx index 8d0740469..c3036f238 100644 --- a/front/src/pages/people/table/TableActionBarButtonDeletePeople.tsx +++ b/front/src/pages/people/table/TableActionBarButtonDeletePeople.tsx @@ -1,9 +1,10 @@ import { TbTrash } from 'react-icons/tb'; -import { EntityTableActionBarButton } from '../../../components/table/action-bar/EntityTableActionBarButton'; -import { useDeletePeopleMutation } from '../../../generated/graphql'; -import { selectedRowIdsState } from '../../../modules/ui/tables/states/selectedRowIdsState'; import { useRecoilValue } from 'recoil'; -import { useResetTableRowSelection } from '../../../modules/ui/tables/hooks/useResetTableRowSelection'; + +import { EntityTableActionBarButton } from '@/ui/components/table/action-bar/EntityTableActionBarButton'; +import { useResetTableRowSelection } from '@/ui/tables/hooks/useResetTableRowSelection'; +import { selectedRowIdsState } from '@/ui/tables/states/selectedRowIdsState'; +import { useDeletePeopleMutation } from '~/generated/graphql'; export function TableActionBarButtonDeletePeople() { const selectedRowIds = useRecoilValue(selectedRowIdsState); diff --git a/front/src/testing/graphqlMocks.ts b/front/src/testing/graphqlMocks.ts index 270d477b4..9f7987a04 100644 --- a/front/src/testing/graphqlMocks.ts +++ b/front/src/testing/graphqlMocks.ts @@ -1,11 +1,13 @@ import { graphql } from 'msw'; -import { filterAndSortData, updateOneFromData } from './mock-data'; -import { GraphqlQueryCompany } from '../interfaces/entities/company.interface'; + +import { GraphqlQueryCompany } from '@/companies/interfaces/company.interface'; +import { GraphqlQueryPerson } from '@/people/interfaces/person.interface'; +import { GraphqlQueryUser } from '@/users/interfaces/user.interface'; + import { mockedCompaniesData } from './mock-data/companies'; -import { GraphqlQueryUser } from '../interfaces/entities/user.interface'; -import { mockedUsersData } from './mock-data/users'; import { mockedPeopleData } from './mock-data/people'; -import { GraphqlQueryPerson } from '../interfaces/entities/person.interface'; +import { mockedUsersData } from './mock-data/users'; +import { filterAndSortData, updateOneFromData } from './mock-data'; export const graphqlMocks = [ graphql.query('GetCompanies', (req, res, ctx) => { diff --git a/front/src/testing/mock-data/companies.ts b/front/src/testing/mock-data/companies.ts index baba7e1ab..1dae37abc 100644 --- a/front/src/testing/mock-data/companies.ts +++ b/front/src/testing/mock-data/companies.ts @@ -1,4 +1,4 @@ -import { GraphqlQueryCompany } from '../../interfaces/entities/company.interface'; +import { GraphqlQueryCompany } from '@/companies/interfaces/company.interface'; export const mockedCompaniesData: Array = [ { diff --git a/front/src/testing/mock-data/index.ts b/front/src/testing/mock-data/index.ts index 358991f86..76b8cdf6a 100644 --- a/front/src/testing/mock-data/index.ts +++ b/front/src/testing/mock-data/index.ts @@ -1,14 +1,15 @@ import { GraphQLVariables } from 'msw'; + +import { Company } from '@/companies/interfaces/company.interface'; +import { Person } from '@/people/interfaces/person.interface'; +import { User } from '@/users/interfaces/user.interface'; +import { BoolExpType } from '@/utils/interfaces/generic.interface'; import { CompanyOrderByWithRelationInput, PersonOrderByWithRelationInput, StringFilter, UserOrderByWithRelationInput, -} from '../../generated/graphql'; -import { Company } from '../../interfaces/entities/company.interface'; -import { BoolExpType } from '../../interfaces/entities/generic.interface'; -import { Person } from '../../interfaces/entities/person.interface'; -import { User } from '../../interfaces/entities/user.interface'; +} from '~/generated/graphql'; function filterData( data: Array, diff --git a/front/src/testing/mock-data/people.ts b/front/src/testing/mock-data/people.ts index b4f310e2e..e98d19c4e 100644 --- a/front/src/testing/mock-data/people.ts +++ b/front/src/testing/mock-data/people.ts @@ -1,4 +1,4 @@ -import { GraphqlQueryPerson } from '../../interfaces/entities/person.interface'; +import { GraphqlQueryPerson } from '@/people/interfaces/person.interface'; export const mockedPeopleData = [ { diff --git a/front/src/testing/mock-data/users.ts b/front/src/testing/mock-data/users.ts index afcf624dd..7ec082694 100644 --- a/front/src/testing/mock-data/users.ts +++ b/front/src/testing/mock-data/users.ts @@ -1,4 +1,4 @@ -import { GraphqlQueryUser } from '../../interfaces/entities/user.interface'; +import { GraphqlQueryUser } from '@/users/interfaces/user.interface'; export const mockedUsersData: Array = [ { diff --git a/front/src/testing/renderWrappers.tsx b/front/src/testing/renderWrappers.tsx index 4f609fd05..83caed813 100644 --- a/front/src/testing/renderWrappers.tsx +++ b/front/src/testing/renderWrappers.tsx @@ -1,12 +1,14 @@ -import { MemoryRouter } from 'react-router-dom'; -import { FullHeightStorybookLayout } from './FullHeightStorybookLayout'; -import { ThemeProvider } from '@emotion/react'; -import { ApolloProvider } from '@apollo/client'; -import { RecoilRoot } from 'recoil'; -import { mockedClient } from './mockedClient'; -import { lightTheme } from '../layout/styles/themes'; import React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import { ApolloProvider } from '@apollo/client'; +import { ThemeProvider } from '@emotion/react'; +import { RecoilRoot } from 'recoil'; + +import { lightTheme } from '@/ui/layout/styles/themes'; + import { ComponentStorybookLayout } from './ComponentStorybookLayout'; +import { FullHeightStorybookLayout } from './FullHeightStorybookLayout'; +import { mockedClient } from './mockedClient'; export function getRenderWrapperForPage(children: React.ReactElement) { return function render() { diff --git a/front/tsconfig.json b/front/tsconfig.json index 9d379a3c4..09b2d2485 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -14,7 +14,12 @@ "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx" + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@/*": ["src/modules/*"], + "~/*": ["src/*"], + } }, - "include": ["src"] + "include": ["src/**/*"] }