diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000..d0e7b7c6 --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,67 @@ +# @link https://docs.codeclimate.com/docs/default-analysis-configuration#sample-codeclimateyml + +version: '2' + +checks: + argument-count: + enabled: true + config: + threshold: 4 + complex-logic: + enabled: true + config: + threshold: 4 + file-lines: + enabled: true + config: + threshold: 300 + method-complexity: + enabled: true + config: + threshold: 5 + method-count: + enabled: true + config: + threshold: 20 + method-lines: + enabled: true + config: + threshold: 300 + nested-control-flow: + enabled: true + config: + threshold: 4 + return-statements: + enabled: true + config: + threshold: 4 + similar-code: + enabled: false + config: + threshold: 5 + identical-code: + enabled: false + config: + threshold: 5 + +# plugins: +# eslint: +# enabled: true +# channel: "eslint-7" + +exclude_patterns: + - 'docs/' + - '**/node_modules/' + - '**/config/' + - '**/*.config.js' + - '**/dist/' + - '**/scripts/' + - '**/__tests__/' + - '**/*.test.js' + - '**/*.test.jsx' + - '**/*.test.ts' + - '**/*.test.tsx' + - '**/*.d.ts' + - '**/*.seed.ts' + - '**/seed.ts' + - '**/.mesh/' diff --git a/.dockerignore b/.dockerignore index 85f8e59f..61f2a9b9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,22 +1,74 @@ -# All node_modules directories -node_modules/ -# All secrets -**/.env -**/.env.local -**/.env.*.local +# dependencies +node_modules +**/node_modules/ +.pnp.* +.pnp +.pnpm-store + +# testing +coverage/* +cypress/screenshots/ +cypress/videos/ +.out/ + +# next.js and build directories +# ... + +# misc +.DS_Store +*.pem +Thumbs.db + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* +**/.debug +logs/ +*.log +.turbo/ +**/.turbo/ + # local env files -# By default all git files +.env +**/.env +.env.local +.env.*.local + +# deployment platforms +.vercel + +# cache +.eslintcache +**/.eslintcache +.stylelintcache +.cache/* +**/tsconfig.tsbuildinfo + +# editors +.idea/ +.vscode/ + +# temp files +tmp/ +*.tmp + +# by default all git files .git/ .gitignore .gitattributes .github/ -# Tools caches -.cache/* -tsconfig.tsbuildinfo -.eslintcache +# docker related +.dockerignore +Dockerfile +docker-compose.*.yml +docker-compose.yml +docker/ -# Used when building with nextjs (next-eslint) +# allow +# used when building with nextjs (next-eslint) !.eslintrc.base.json !.prettierignore !.prettierrc.js @@ -24,23 +76,3 @@ tsconfig.tsbuildinfo # npm !.npmrc - -# Docker related -.dockerignore -Dockerfile -docker-compose.*.yml -docker-compose.yml -docker/ - -# Log files -logs/ -*.log -.turbo/ -**/.turbo/ - -# Temp files -tmp/ -*.tmp - -# IDE related -.idea/ diff --git a/.gitignore b/.gitignore index 9f658aa3..b0cca45b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,19 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# editors -.idea +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files +# and https://github.com/github/gitignore for examples # dependencies node_modules +.pnp.* .pnp -.pnp.js .pnpm-store # testing coverage/ - -# cypress cypress/screenshots/ cypress/videos/ +.out/ -# next.js +# next.js and build directories .next/ out/ build/ @@ -38,18 +35,19 @@ npm-debug.log* yarn-debug.log* yarn-error.log* .pnpm-debug.log* +**/.debug +logs/ +*.log +.turbo/ +**/.turbo/ # local env files .env +**/.env .env.local -.env.development.local -.env.test.local -.env.production.local - -# turbo -.turbo +.env.*.local -# vercel +# deployment platforms .vercel # cache @@ -62,3 +60,16 @@ yarn-error.log* # override files docker-compose.override.yml +# editors +.idea + +.vscode/ +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# temp files +tmp/ +*.tmp diff --git a/.npmrc b/.npmrc index 248aea49..b91fe6e5 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,8 @@ strict-peer-dependencies=false engine-strict=true + +### https://gist.github.com/belgattitude/838b2eba30c324f1f0033a797bab2e31#recommended-npmrc +# https://pnpm.io/next/npmrc#strict-peer-dependencies +strict-peer-dependencies=true +# https://pnpm.io/npmrc#auto-install-peers +auto-install-peers=false diff --git a/.prettierrc.js b/.prettierrc.js index 04654712..f36b6379 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,8 +1,26 @@ -// More, about extending this config: -// https://github.com/wayofdev/npm-shareable-configs/blob/master/packages/prettier-config/README.md -module.exports = { - ...require('@wayofdev/prettier-config'), - semi: false, - tabWidth: 2, - useTabs: false, -} +// @ts-check + +const { getPrettierConfig } = require('@wayofdev/eslint-config-custom/helpers'); + +const { overrides = [], ...prettierConfig } = getPrettierConfig(); + +/** + * @type {import('prettier').Config} + */ +const config = { + ...prettierConfig, + overrides: [ + ...overrides, + ...[ + { + files: '*.md', + options: { + singleQuote: false, + quoteProps: 'preserve', + }, + }, + ], + ], +}; + +module.exports = config; diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 00000000..7f97b2a3 --- /dev/null +++ b/.vercelignore @@ -0,0 +1,6 @@ +.github/ +.changeset/ +.husky/ +docker/ +README.md +CHANGELOG.md diff --git a/README.md b/README.md index 059e45f6..936724d3 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,10 @@ Latest Version Software License Commits since latest release +Code Climate maintainability +Code Climate issues +Code Climate technical debt + Code Climate coverage
@@ -181,7 +185,11 @@ make test
-## 🧱 Useful Resources +## 🧱 Credits and Useful Resources + +Based on [nextjs-monorepo-example](https://github.com/belgattitude/nextjs-monorepo-example) template from [belgattitude](https://github.com/belgattitude). + +- Check his benchmark on package managers — [belgattitude/compare-package-managers](https://github.com/belgattitude/compare-package-managers) Learn more about the power of **Turborepo**: @@ -202,7 +210,6 @@ Other monorepo templates: Other projects: - [ixartz/next-js-boilerplate](https://github.com/ixartz/Next-js-Boilerplate) -- [laravel/breeze-next](https://github.com/laravel/breeze-next)
diff --git a/apps/docs/.eslintrc.js b/apps/docs/.eslintrc.js index 4125e305..afe5d254 100644 --- a/apps/docs/.eslintrc.js +++ b/apps/docs/.eslintrc.js @@ -1,19 +1,47 @@ +/** + * Specific eslint rules for this app/package, extends the base rules + * @see https://github.com/belgattitude/nextjs-monorepo-example/blob/main/docs/about-linters.md + * @see https://github.com/wayofdev/next-starter-tpl/blob/master/docs/about-linters.md + */ + +// Workaround for https://github.com/eslint/eslint/issues/3458 (re-export of @rushstack/eslint-patch) +require('@wayofdev/eslint-config-custom/patch/modern-module-resolution') + +const { getDefaultIgnorePatterns } = require('@wayofdev/eslint-config-custom/helpers') + module.exports = { root: true, - extends: ['custom'], - plugins: ['import'], parserOptions: { - project: ['tsconfig.json'], tsconfigRootDir: __dirname, + project: 'tsconfig.json', + }, + ignorePatterns: [...getDefaultIgnorePatterns(), '.next', '.out'], + extends: [ + '@wayofdev/eslint-config-custom/typescript', + '@wayofdev/eslint-config-custom/sonar', + '@wayofdev/eslint-config-custom/regexp', + '@wayofdev/eslint-config-custom/jest', + '@wayofdev/eslint-config-custom/react', + '@wayofdev/eslint-config-custom/tailwind', + '@wayofdev/eslint-config-custom/rtl', + // Add specific rules for nextjs + 'plugin:@next/next/core-web-vitals', + // Apply prettier and disable incompatible rules + '@wayofdev/eslint-config-custom/prettier', + ], + rules: { + // https://github.com/vercel/next.js/discussions/16832 + '@next/next/no-img-element': 'off', + // For the sake of example + // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-is-valid.md + 'jsx-a11y/anchor-is-valid': 'off', }, overrides: [ { - files: ['**/*.js'], - extends: ['@wayofdev/eslint-config/'], + files: ['src/pages/\\_*.{ts,tsx}'], + rules: { + 'react/display-name': 'off', + }, }, ], - rules: { - 'import/extensions': 'off', - }, - ignorePatterns: ['dist/**', '.next/**'], } diff --git a/apps/web/.eslintrc.js b/apps/web/.eslintrc.js index 3f36622f..afe5d254 100644 --- a/apps/web/.eslintrc.js +++ b/apps/web/.eslintrc.js @@ -1,19 +1,47 @@ +/** + * Specific eslint rules for this app/package, extends the base rules + * @see https://github.com/belgattitude/nextjs-monorepo-example/blob/main/docs/about-linters.md + * @see https://github.com/wayofdev/next-starter-tpl/blob/master/docs/about-linters.md + */ + +// Workaround for https://github.com/eslint/eslint/issues/3458 (re-export of @rushstack/eslint-patch) +require('@wayofdev/eslint-config-custom/patch/modern-module-resolution') + +const { getDefaultIgnorePatterns } = require('@wayofdev/eslint-config-custom/helpers') + module.exports = { root: true, - extends: ['@wayofdev/custom'], - plugins: ['import'], parserOptions: { - project: ['tsconfig.json'], tsconfigRootDir: __dirname, + project: 'tsconfig.json', + }, + ignorePatterns: [...getDefaultIgnorePatterns(), '.next', '.out'], + extends: [ + '@wayofdev/eslint-config-custom/typescript', + '@wayofdev/eslint-config-custom/sonar', + '@wayofdev/eslint-config-custom/regexp', + '@wayofdev/eslint-config-custom/jest', + '@wayofdev/eslint-config-custom/react', + '@wayofdev/eslint-config-custom/tailwind', + '@wayofdev/eslint-config-custom/rtl', + // Add specific rules for nextjs + 'plugin:@next/next/core-web-vitals', + // Apply prettier and disable incompatible rules + '@wayofdev/eslint-config-custom/prettier', + ], + rules: { + // https://github.com/vercel/next.js/discussions/16832 + '@next/next/no-img-element': 'off', + // For the sake of example + // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-is-valid.md + 'jsx-a11y/anchor-is-valid': 'off', }, overrides: [ { - files: ['**/*.js'], - extends: ['@wayofdev/eslint-config/'], + files: ['src/pages/\\_*.{ts,tsx}'], + rules: { + 'react/display-name': 'off', + }, }, ], - rules: { - 'import/extensions': 'off', - }, - ignorePatterns: ['dist/**', '.next/**'], } diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index 25df5119..2c0daa12 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -169,8 +169,6 @@ const nextConfig = { let config = nextConfig -console.log({'next_disable_sentry': NEXT_DISABLE_SENTRY}); - if (!NEXT_DISABLE_SENTRY) { config = withSentryConfig(config, { // Additional config options for the Sentry Webpack plugin. Keep in mind that diff --git a/apps/web/package.json b/apps/web/package.json index 6eff8b02..bae8e2b8 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -6,7 +6,7 @@ "analyze": "BUNDLE_ANALYZE=both next build", "build": "next build", "dev": "next dev", - "lint": "eslint . --ext .ts,.tsx,.js,.jsx,.cjs,.mjs,.mdx --cache --cache-location ../../.cache/eslint/nextjs-app.eslintcache", + "lint": "eslint . --ext .ts,.tsx,.js,.jsx,.cjs,.mjs,.mdx --cache --cache-location ../../.cache/eslint/web.eslintcache", "start": "next start" }, "dependencies": { diff --git a/monorepo.code-workspace b/monorepo.code-workspace new file mode 100644 index 00000000..a6fd3d8f --- /dev/null +++ b/monorepo.code-workspace @@ -0,0 +1,65 @@ +{ + "folders": [ + { + "name": "web", + "path": "apps/web" + }, + { + "name": "docs", + "path": "apps/docs" + }, + { + "name": "api-gateway", + "path": "packages/api-gateway" + }, + { + "name": "common-i18n", + "path": "packages/common-i18n" + }, + { + "name": "core", + "path": "packages/core" + }, + { + "name": "eslint-config-custom", + "path": "packages/eslint-config-custom" + }, + { + "name": "ui", + "path": "packages/ui" + }, + { + "name": "root", + "path": "." + } + ], + "extensions": { + "recommendations": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + ] + }, + "settings": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + // Disable vscode formatting for js,jsx,ts,tsx files + // to allow dbaeumer.vscode-eslint to format them + "[javascript]": { + "editor.formatOnSave": false, + }, + "eslint.alwaysShowStatus": true, + // https://github.com/Microsoft/vscode-eslint#mono-repository-setup + "eslint.workingDirectories": [ + "./apps/web", + "./apps/docs", + "./packages/api-gateway", + "./packages/common-i18n", + "./packages/core", + "./packages/eslint-config-custom", + "./packages/ui" + ] + } +} diff --git a/package.json b/package.json index 685f0fb4..52279447 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,19 @@ "wayofdev", "monorepo", "turborepo", - "pnpm" + "pnpm", + "example", + "workspace", + "eslint-plugin", + "docker", + "docker-compose", + "traefik" ], "homepage": "https://github.com/wayofdev/next-starter-tpl", + "repository": { + "type": "git", + "url": "https://github.com/wayofdev/next-starter-tpl" + }, "license": "MIT", "author": { "name": "Andrij Orlenko", @@ -27,6 +37,7 @@ "packages/*" ], "scripts": { + "preinstall": "npx only-allow pnpm", "commit": "git-cz", "prepare": "is-ci || husky install", "clean": "turbo run clean --parallel", @@ -58,11 +69,10 @@ "@wayofdev/htmlhint-config": "^1.1.0", "@wayofdev/lint-staged-config": "^1.2.0", "@wayofdev/markdownlint-config": "^1.1.0", - "@wayofdev/prettier-config": "^1.1.0", "@wayofdev/secretlint-config": "^1.1.0", "@wayofdev/stylelint-config": "^1.1.0", "@wayofdev/tsconfig-config": "^1.3.0", - "eslint": "^8.30.0", + "eslint": "^8.31.0", "htmlhint": "^1.1.4", "husky": "^8.0.2", "is-ci": "^3.0.1", diff --git a/packages/eslint-config-custom/src/prettier.base.config.js b/packages/eslint-config-custom/src/prettier.base.config.js index 9b8747c6..1a31b10d 100644 --- a/packages/eslint-config-custom/src/prettier.base.config.js +++ b/packages/eslint-config-custom/src/prettier.base.config.js @@ -4,12 +4,27 @@ * @type {import('prettier').Config} */ module.exports = { - singleQuote: true, - semi: true, + endOfLine: 'auto', + // https://prettier.io/docs/en/options.html#print-width + printWidth: 100, tabWidth: 2, - bracketSpacing: true, + arrowParens: 'avoid', + singleQuote: true, + semi: false, trailingComma: 'es5', - bracketSameLine: false, useTabs: false, - overrides: [], + bracketSpacing: true, + bracketSameLine: false, + overrides: [ + { + files: ['*.html'], + options: { + // disable to prevent conflicts with html-validate + trailingComma: 'none', + // https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting + htmlWhitespaceSensitivity: 'css', + singleAttributePerLine: true, + }, + }, + ], }; diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js new file mode 100644 index 00000000..08485b0d --- /dev/null +++ b/packages/ui/.eslintrc.js @@ -0,0 +1,35 @@ +/** + * Specific eslint rules for this app/package, extends the base rules + * @see https://github.com/belgattitude/nextjs-monorepo-example/blob/main/docs/about-linters.md + * @see https://github.com/wayofdev/next-starter-tpl/blob/master/docs/about-linters.md + */ + +// Workaround for https://github.com/eslint/eslint/issues/3458 (re-export of @rushstack/eslint-patch) +require('@wayofdev/eslint-config-custom/patch/modern-module-resolution') + +const { getDefaultIgnorePatterns } = require('@wayofdev/eslint-config-custom/helpers') + +module.exports = { + root: true, + parserOptions: { + tsconfigRootDir: __dirname, + project: 'tsconfig.json', + }, + ignorePatterns: [...getDefaultIgnorePatterns(), '/storybook-static'], + extends: [ + '@wayofdev/eslint-config-custom/typescript', + '@wayofdev/eslint-config-custom/regexp', + '@wayofdev/eslint-config-custom/sonar', + '@wayofdev/eslint-config-custom/jest', + '@wayofdev/eslint-config-custom/rtl', + '@wayofdev/eslint-config-custom/react', + // Apply prettier and disable incompatible rules + '@wayofdev/eslint-config-custom/prettier', + ], + rules: { + // optional overrides per project + }, + overrides: [ + // optional overrides per project file match + ], +} diff --git a/packages/ui/.eslintrc.json b/packages/ui/.eslintrc.json deleted file mode 100644 index 571b3002..00000000 --- a/packages/ui/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "root": true, - "extends": "custom", - "plugins": ["import"], - "rules": { - "import/extensions": "off", - "unicorn/prevent-abbreviations": [ - "error", - { - "replacements": { - "env": { - "environment": false - } - } - } - ] - }, - "ignorePatterns": ["dist/**", ".next/**"], - "parserOptions": { - "project": ["tsconfig.json"] - } -} diff --git a/packages/ui/package.json b/packages/ui/package.json index 181e42ca..992745be 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -4,7 +4,6 @@ "private": true, "license": "MIT", "sideEffects": false, - "type": "module", "exports": { ".": "./src/index.ts", "./*": [ @@ -29,22 +28,39 @@ ], "scripts": { "clean": "rimraf dist .turbo", - "lint": "eslint \"**/*.{ts,tsx,js,jsx}\" --fix" + "lint": "eslint . --ext .ts,.tsx,.js,.jsx,.cjs,.mjs --cache --cache-location ../../.cache/eslint/ui.eslintcache" }, "dependencies": { "@swc/helpers": "^0.4.14", "clsx": "^1.2.1" }, "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@types/jest": "^29.2.5", + "@types/node": "^18.11.18", "@types/react": "^18.0.26", + "@types/react-dom": "18.0.9", "@wayofdev/eslint-config-custom": "workspace:*", "eslint": "^8.30.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.9.4" }, "peerDependencies": { + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", "next": "*", "react": "^18.2", "react-dom": "^18.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } } diff --git a/packages/ui/src/button/button.tsx b/packages/ui/src/button/button.tsx index dca2d84e..790587f3 100644 --- a/packages/ui/src/button/button.tsx +++ b/packages/ui/src/button/button.tsx @@ -1,5 +1,5 @@ -import type { FC, ButtonHTMLAttributes } from 'react' import cn from 'clsx' +import type { FC, ButtonHTMLAttributes } from 'react' const Button: FC> = ({ children, diff --git a/packages/ui/src/button/index.tsx b/packages/ui/src/button/index.tsx index f1b33c3d..3b6f1792 100644 --- a/packages/ui/src/button/index.tsx +++ b/packages/ui/src/button/index.tsx @@ -1,2 +1 @@ export { default } from './button' -export * from './button' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b4af64c..cf7eb819 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,11 +13,10 @@ importers: '@wayofdev/htmlhint-config': ^1.1.0 '@wayofdev/lint-staged-config': ^1.2.0 '@wayofdev/markdownlint-config': ^1.1.0 - '@wayofdev/prettier-config': ^1.1.0 '@wayofdev/secretlint-config': ^1.1.0 '@wayofdev/stylelint-config': ^1.1.0 '@wayofdev/tsconfig-config': ^1.3.0 - eslint: ^8.30.0 + eslint: ^8.31.0 htmlhint: ^1.1.4 husky: ^8.0.2 is-ci: ^3.0.1 @@ -44,7 +43,6 @@ importers: '@wayofdev/htmlhint-config': 1.1.0_htmlhint@1.1.4 '@wayofdev/lint-staged-config': 1.2.0_lint-staged@13.1.0 '@wayofdev/markdownlint-config': 1.1.0_markdownlint@0.27.0 - '@wayofdev/prettier-config': 1.1.0_prettier@2.8.1 '@wayofdev/secretlint-config': 1.1.0_secretlint@5.3.0 '@wayofdev/stylelint-config': 1.1.0_gu46niy5crja7py4xm7wtrer3u '@wayofdev/tsconfig-config': 1.3.0_typescript@4.9.4 @@ -252,19 +250,33 @@ importers: packages/ui: specifiers: '@swc/helpers': ^0.4.14 + '@testing-library/jest-dom': ^5.16.5 + '@testing-library/react': ^13.4.0 + '@types/jest': ^29.2.5 + '@types/node': ^18.11.18 '@types/react': ^18.0.26 + '@types/react-dom': 18.0.9 '@wayofdev/eslint-config-custom': workspace:* clsx: ^1.2.1 eslint: ^8.30.0 + react: ^18.2.0 + react-dom: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.9.4 dependencies: '@swc/helpers': 0.4.14 clsx: 1.2.1 devDependencies: + '@testing-library/jest-dom': 5.16.5 + '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y + '@types/jest': 29.2.5 + '@types/node': 18.11.18 '@types/react': 18.0.26 + '@types/react-dom': 18.0.9 '@wayofdev/eslint-config-custom': link:../eslint-config-custom eslint: 8.31.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 rimraf: 3.0.2 typescript: 4.9.4 @@ -272,7 +284,6 @@ packages: /@adobe/css-tools/4.0.1: resolution: {integrity: sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==} - dev: false /@ampproject/remapping/2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} @@ -2169,7 +2180,6 @@ packages: dom-accessibility-api: 0.5.14 lz-string: 1.4.4 pretty-format: 27.5.1 - dev: false /@testing-library/jest-dom/5.16.5: resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==} @@ -2184,7 +2194,6 @@ packages: dom-accessibility-api: 0.5.14 lodash: 4.17.21 redent: 3.0.0 - dev: false /@testing-library/react/13.4.0_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} @@ -2198,7 +2207,6 @@ packages: '@types/react-dom': 18.0.10 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - dev: false /@textlint/ast-node-types/12.3.0: resolution: {integrity: sha512-ke5hlKy/xZ/vQt6j+h4k9GradJPDsV3FKsUqWpCpF/X8qWCU2zM4e1SMUAFjoUcLuF9in+eXIQ71Qm/AdjjkZQ==} @@ -2270,7 +2278,6 @@ packages: /@types/aria-query/5.0.1: resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} - dev: false /@types/babel__core/7.1.20: resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} @@ -2422,6 +2429,12 @@ packages: dependencies: '@types/react': 18.0.26 + /@types/react-dom/18.0.9: + resolution: {integrity: sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==} + dependencies: + '@types/react': 18.0.26 + dev: true + /@types/react/18.0.26: resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==} dependencies: @@ -2447,7 +2460,6 @@ packages: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: '@types/jest': 29.2.5 - dev: false /@types/unist/2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} @@ -2625,14 +2637,6 @@ packages: markdownlint-cli: 0.32.2 dev: true - /@wayofdev/prettier-config/1.1.0_prettier@2.8.1: - resolution: {integrity: sha512-RBe766sIOmokRFtsprEjPeP9HJCs8bQffrB6PCV8g7NQwEYON7BRJ1+jhZN3JrpVaEHYkQPghQFnuVHs51AzNw==} - peerDependencies: - prettier: '>= 2' - dependencies: - prettier: 2.8.1 - dev: true - /@wayofdev/secretlint-config/1.1.0_secretlint@5.3.0: resolution: {integrity: sha512-dMoW+qrQJWtP7lqlQDffeLxB10cnIvPBd5zL1K3GUFMgGj6Yj26fn7qnyTyEWGr7rBdQ1dhQGpl9Asnq3zp2/w==} peerDependencies: @@ -2851,7 +2855,6 @@ packages: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} dependencies: deep-equal: 2.1.0 - dev: false /array-differ/3.0.0: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} @@ -2949,7 +2952,6 @@ packages: /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dev: false /axe-core/4.6.1: resolution: {integrity: sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==} @@ -3555,7 +3557,6 @@ packages: /css.escape/1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: false /cssdb/7.2.0: resolution: {integrity: sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==} @@ -3674,7 +3675,6 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.9 - dev: false /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} @@ -3811,7 +3811,6 @@ packages: /dom-accessibility-api/0.5.14: resolution: {integrity: sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==} - dev: false /dot-prop/5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} @@ -3917,7 +3916,6 @@ packages: is-set: 2.0.2 is-string: 1.0.7 isarray: 2.0.5 - dev: false /es-shim-unscopables/1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} @@ -4611,7 +4609,6 @@ packages: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - dev: false /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} @@ -5224,7 +5221,6 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: false /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -5335,7 +5331,6 @@ packages: /is-map/2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: false /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} @@ -5399,7 +5394,6 @@ packages: /is-set/2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: false /is-shared-array-buffer/1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} @@ -5461,11 +5455,9 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: false /is-weakmap/2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: false /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} @@ -5477,7 +5469,6 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.3 - dev: false /is-windows/1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -5500,7 +5491,6 @@ packages: /isarray/2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: false /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -6094,6 +6084,12 @@ packages: engines: {node: '>=6'} hasBin: true + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + /jsonc-parser/3.1.0: resolution: {integrity: sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==} dev: true @@ -6392,7 +6388,6 @@ packages: /lz-string/1.4.4: resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} hasBin: true - dev: false /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -7452,7 +7447,6 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - dev: false /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -8313,7 +8307,6 @@ packages: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 - dev: false /pretty-format/29.3.1: resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==} @@ -8393,7 +8386,7 @@ packages: dependencies: debug: 4.3.4 js-yaml: 4.1.0 - json5: 2.2.2 + json5: 2.2.3 require-from-string: 2.0.2 transitivePeerDependencies: - supports-color @@ -8433,7 +8426,6 @@ packages: /react-is/17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: false /react-is/18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} @@ -10217,7 +10209,6 @@ packages: is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 - dev: false /which-module/2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} @@ -10241,7 +10232,6 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 is-typed-array: 1.1.10 - dev: false /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}