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 @@
+
+
+
+
@@ -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==}