create-alistt69-kit 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +189 -189
  3. package/bin/index.js +24 -24
  4. package/package.json +44 -44
  5. package/src/core/apply-features.js +14 -14
  6. package/src/core/collect-project-info.js +170 -170
  7. package/src/core/copy-base-template.js +11 -11
  8. package/src/core/create-project.js +99 -99
  9. package/src/core/install-dependencies.js +27 -27
  10. package/src/core/parse-cli-args.js +122 -122
  11. package/src/core/prepare-target-directory.js +69 -69
  12. package/src/core/render-project-readme.js +278 -278
  13. package/src/core/replace-tokens.js +45 -45
  14. package/src/core/restore-special-files.js +18 -18
  15. package/src/features/agents-md/files/AGENTS.md +36 -36
  16. package/src/features/agents-md/index.js +13 -13
  17. package/src/features/autoprefixer/files/postcss.config.cjs +4 -4
  18. package/src/features/autoprefixer/index.js +31 -31
  19. package/src/features/define-feature.js +32 -32
  20. package/src/features/eslint/files/eslint.config.mjs +135 -135
  21. package/src/features/eslint/index.js +43 -43
  22. package/src/features/index.js +28 -28
  23. package/src/features/prerender/files/prerender.routes.mjs +5 -5
  24. package/src/features/prerender/files/scripts/prerender.mjs +114 -114
  25. package/src/features/prerender/index.js +40 -40
  26. package/src/features/react-router/files/scripts/generate/page.mjs +366 -366
  27. package/src/features/react-router/files/src/app/App.tsx +18 -18
  28. package/src/features/react-router/files/src/app/providers/error-boundary/lib/provider/index.tsx +44 -44
  29. package/src/features/react-router/files/src/app/providers/error-boundary/ui/error-screen/index.tsx +151 -151
  30. package/src/features/react-router/files/src/app/providers/index.ts +17 -17
  31. package/src/features/react-router/files/src/app/providers/router/lib/provider/index.tsx +21 -21
  32. package/src/features/react-router/files/src/app/providers/router/model/router/index.tsx +24 -24
  33. package/src/features/react-router/files/src/app/providers/router/types/index.ts +10 -10
  34. package/src/features/react-router/files/src/app/providers/router/ui/app/index.tsx +36 -36
  35. package/src/features/react-router/files/src/index.tsx +23 -23
  36. package/src/features/react-router/files/src/pages/error/index.ts +1 -1
  37. package/src/features/react-router/files/src/pages/error/lazy.ts +3 -3
  38. package/src/features/react-router/files/src/pages/error/page.tsx +7 -7
  39. package/src/features/react-router/files/src/pages/main/index.ts +1 -1
  40. package/src/features/react-router/files/src/pages/main/lazy.ts +3 -3
  41. package/src/features/react-router/files/src/pages/main/page.tsx +7 -7
  42. package/src/features/react-router/index.js +36 -36
  43. package/src/features/stylelint/files/stylelint.config.mjs +13 -13
  44. package/src/features/stylelint/index.js +37 -37
  45. package/src/templates/base/.editorconfig +11 -11
  46. package/src/templates/base/README.md +2 -2
  47. package/src/templates/base/babel.config.json +12 -12
  48. package/src/templates/base/gitignore +27 -27
  49. package/src/templates/base/package.json +48 -48
  50. package/src/templates/base/public/index.html +12 -12
  51. package/src/templates/base/src/app/App.tsx +12 -12
  52. package/src/templates/base/src/app/providers/error-boundary/lib/provider/index.tsx +44 -44
  53. package/src/templates/base/src/app/providers/error-boundary/ui/error-screen/index.tsx +150 -150
  54. package/src/templates/base/src/app/providers/index.ts +5 -5
  55. package/src/templates/base/src/index.tsx +19 -19
  56. package/src/templates/base/src/styles/index.scss +13 -13
  57. package/src/templates/base/src/styles/normalize.scss +36 -36
  58. package/src/templates/base/src/widgets/created-by/index.tsx +1 -1
  59. package/src/templates/base/tsconfig.json +25 -25
  60. package/src/utils/agents-md.js +52 -52
  61. package/src/utils/console-format.js +11 -11
  62. package/src/utils/package-json.js +96 -96
  63. package/src/utils/package-manager.js +22 -22
@@ -1,23 +1,23 @@
1
- import { StrictMode } from 'react';
2
- import { createRoot } from 'react-dom/client';
3
- import App from '@/app/App';
4
- import { RouterProvider, ErrorBoundary } from '@/app/providers';
5
- import './styles/index.scss';
6
-
7
- const container = document.getElementById('root');
8
-
9
- if (!container) {
10
- throw new Error('Root container not found');
11
- }
12
-
13
- createRoot(container).render(
14
- <StrictMode>
15
- <App
16
- router={(
17
- <RouterProvider
18
- errorBoundary={ErrorBoundary}
19
- />
20
- )}
21
- />
22
- </StrictMode>,
23
- );
1
+ import { StrictMode } from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import App from '@/app/App';
4
+ import { RouterProvider, ErrorBoundary } from '@/app/providers';
5
+ import './styles/index.scss';
6
+
7
+ const container = document.getElementById('root');
8
+
9
+ if (!container) {
10
+ throw new Error('Root container not found');
11
+ }
12
+
13
+ createRoot(container).render(
14
+ <StrictMode>
15
+ <App
16
+ router={(
17
+ <RouterProvider
18
+ errorBoundary={ErrorBoundary}
19
+ />
20
+ )}
21
+ />
22
+ </StrictMode>,
23
+ );
@@ -1 +1 @@
1
- export { LazyError as Error } from './lazy';
1
+ export { LazyError as Error } from './lazy';
@@ -1,3 +1,3 @@
1
- import { lazy } from 'react';
2
-
3
- export const LazyError = lazy(() => import('./page'));
1
+ import { lazy } from 'react';
2
+
3
+ export const LazyError = lazy(() => import('./page'));
@@ -1,7 +1,7 @@
1
- function ErrorPage() {
2
- return (
3
- <h2>error page</h2>
4
- );
5
- }
6
-
7
- export default ErrorPage;
1
+ function ErrorPage() {
2
+ return (
3
+ <h2>error page</h2>
4
+ );
5
+ }
6
+
7
+ export default ErrorPage;
@@ -1 +1 @@
1
- export { LazyMain as Main } from './lazy';
1
+ export { LazyMain as Main } from './lazy';
@@ -1,3 +1,3 @@
1
- import { lazy } from 'react';
2
-
3
- export const LazyMain = lazy(() => import('./page'));
1
+ import { lazy } from 'react';
2
+
3
+ export const LazyMain = lazy(() => import('./page'));
@@ -1,7 +1,7 @@
1
- function MainPage() {
2
- return (
3
- <h2>main page</h2>
4
- );
5
- }
6
-
7
- export default MainPage;
1
+ function MainPage() {
2
+ return (
3
+ <h2>main page</h2>
4
+ );
5
+ }
6
+
7
+ export default MainPage;
@@ -1,37 +1,37 @@
1
- import { dirname, resolve } from 'node:path';
2
- import { fileURLToPath } from 'node:url';
3
-
4
- import { defineFeature } from '../define-feature.js';
5
- import { appendAgentsSection } from '../../utils/agents-md.js';
6
-
7
- const currentFilePath = fileURLToPath(import.meta.url);
8
- const currentDirPath = dirname(currentFilePath);
9
-
10
- export const reactRouterFeature = defineFeature({
11
- id: 'react-router',
12
- title: 'React Router DOM',
13
- hint: 'Routing + FSD-like app/pages/shared',
14
- packageJson: {
15
- dependencies: {
16
- 'react-router-dom': '^7.13.2',
17
- },
18
- scripts: {
19
- 'generate:page': 'node ./scripts/generate/page.mjs',
20
- },
21
- },
22
- copyFiles: resolve(currentDirPath, 'files'),
23
- async apply({ projectPath }) {
24
- await appendAgentsSection(
25
- projectPath,
26
- 'react-router',
27
- `
28
- ## React Router
29
-
30
- - Routing is configured under \`src/app/providers/router/\`.
31
- - Route-level pages live in \`src/pages/\`.
32
- - Generate a new page with \`npm run generate:page -- <page-name>\`.
33
- - Do not remove router marker comments used by the page generator unless you also disable auto-registration.
34
- `,
35
- );
36
- },
1
+ import { dirname, resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+
4
+ import { defineFeature } from '../define-feature.js';
5
+ import { appendAgentsSection } from '../../utils/agents-md.js';
6
+
7
+ const currentFilePath = fileURLToPath(import.meta.url);
8
+ const currentDirPath = dirname(currentFilePath);
9
+
10
+ export const reactRouterFeature = defineFeature({
11
+ id: 'react-router',
12
+ title: 'React Router DOM',
13
+ hint: 'Routing + FSD-like app/pages/shared',
14
+ packageJson: {
15
+ dependencies: {
16
+ 'react-router-dom': '^7.13.2',
17
+ },
18
+ scripts: {
19
+ 'generate:page': 'node ./scripts/generate/page.mjs',
20
+ },
21
+ },
22
+ copyFiles: resolve(currentDirPath, 'files'),
23
+ async apply({ projectPath }) {
24
+ await appendAgentsSection(
25
+ projectPath,
26
+ 'react-router',
27
+ `
28
+ ## React Router
29
+
30
+ - Routing is configured under \`src/app/providers/router/\`.
31
+ - Route-level pages live in \`src/pages/\`.
32
+ - Generate a new page with \`npm run generate:page -- <page-name>\`.
33
+ - Do not remove router marker comments used by the page generator unless you also disable auto-registration.
34
+ `,
35
+ );
36
+ },
37
37
  });
@@ -1,14 +1,14 @@
1
- /** @type {import('stylelint').Config} */
2
- export default {
3
- extends: ['stylelint-config-standard-scss'],
4
- rules: {
5
- 'scss/no-global-function-names': null,
6
- 'selector-class-pattern': [
7
- '^[a-z][a-z0-9-_]*$',
8
- {
9
- message: 'Class names should be lowercase and can include numbers, hyphens, and underscores.',
10
- },
11
- ],
12
- 'at-rule-empty-line-before': null,
13
- },
1
+ /** @type {import('stylelint').Config} */
2
+ export default {
3
+ extends: ['stylelint-config-standard-scss'],
4
+ rules: {
5
+ 'scss/no-global-function-names': null,
6
+ 'selector-class-pattern': [
7
+ '^[a-z][a-z0-9-_]*$',
8
+ {
9
+ message: 'Class names should be lowercase and can include numbers, hyphens, and underscores.',
10
+ },
11
+ ],
12
+ 'at-rule-empty-line-before': null,
13
+ },
14
14
  };
@@ -1,38 +1,38 @@
1
- import { dirname, resolve } from 'node:path';
2
- import { fileURLToPath } from 'node:url';
3
-
4
- import { defineFeature } from '../define-feature.js';
5
- import { appendAgentsSection } from '../../utils/agents-md.js';
6
-
7
- const currentFilePath = fileURLToPath(import.meta.url);
8
- const currentDirPath = dirname(currentFilePath);
9
-
10
- export const stylelintFeature = defineFeature({
11
- id: 'stylelint',
12
- title: 'Stylelint',
13
- hint: 'SCSS/CSS linting',
14
- packageJson: {
15
- devDependencies: {
16
- stylelint: '^17.6.0',
17
- 'stylelint-config-standard-scss': '^17.0.0',
18
- },
19
- scripts: {
20
- 'lint:styles': 'stylelint "src/**/*.{scss,css}"',
21
- 'lint:styles:fix': 'stylelint "src/**/*.{scss,css}" --fix',
22
- },
23
- },
24
- copyFiles: resolve(currentDirPath, 'files'),
25
- async apply({ projectPath }) {
26
- await appendAgentsSection(
27
- projectPath,
28
- 'stylelint',
29
- `
30
- ## Stylelint
31
-
32
- - Lint styles with \`npm run lint:styles\`.
33
- - Apply autofixes with \`npm run lint:styles:fix\`.
34
- - Keep styles compatible with the existing SCSS modules setup.
35
- `,
36
- );
37
- },
1
+ import { dirname, resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+
4
+ import { defineFeature } from '../define-feature.js';
5
+ import { appendAgentsSection } from '../../utils/agents-md.js';
6
+
7
+ const currentFilePath = fileURLToPath(import.meta.url);
8
+ const currentDirPath = dirname(currentFilePath);
9
+
10
+ export const stylelintFeature = defineFeature({
11
+ id: 'stylelint',
12
+ title: 'Stylelint',
13
+ hint: 'SCSS/CSS linting',
14
+ packageJson: {
15
+ devDependencies: {
16
+ stylelint: '^17.6.0',
17
+ 'stylelint-config-standard-scss': '^17.0.0',
18
+ },
19
+ scripts: {
20
+ 'lint:styles': 'stylelint "src/**/*.{scss,css}"',
21
+ 'lint:styles:fix': 'stylelint "src/**/*.{scss,css}" --fix',
22
+ },
23
+ },
24
+ copyFiles: resolve(currentDirPath, 'files'),
25
+ async apply({ projectPath }) {
26
+ await appendAgentsSection(
27
+ projectPath,
28
+ 'stylelint',
29
+ `
30
+ ## Stylelint
31
+
32
+ - Lint styles with \`npm run lint:styles\`.
33
+ - Apply autofixes with \`npm run lint:styles:fix\`.
34
+ - Keep styles compatible with the existing SCSS modules setup.
35
+ `,
36
+ );
37
+ },
38
38
  });
@@ -1,12 +1,12 @@
1
- root = true
2
-
3
- [*]
4
- charset = utf-8
5
- indent_style = space
6
- indent_size = 4
7
- end_of_line = lf
8
- insert_final_newline = true
9
- trim_trailing_whitespace = true
10
-
11
- [*.md]
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ indent_style = space
6
+ indent_size = 4
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.md]
12
12
  trim_trailing_whitespace = false
@@ -1,3 +1,3 @@
1
- # __PROJECT_NAME__
2
-
1
+ # __PROJECT_NAME__
2
+
3
3
  Created with create-alistt69-kit
@@ -1,12 +1,12 @@
1
- {
2
- "presets": [
3
- "@babel/preset-env",
4
- "@babel/preset-typescript",
5
- [
6
- "@babel/preset-react",
7
- {
8
- "runtime": "automatic"
9
- }
10
- ]
11
- ]
12
- }
1
+ {
2
+ "presets": [
3
+ "@babel/preset-env",
4
+ "@babel/preset-typescript",
5
+ [
6
+ "@babel/preset-react",
7
+ {
8
+ "runtime": "automatic"
9
+ }
10
+ ]
11
+ ]
12
+ }
@@ -1,27 +1,27 @@
1
- # Local-specified
2
- node_modules
3
- dist
4
- build
5
- coverage
6
- .env
7
- .env.local
8
-
9
- # Editor directories and files
10
- .vscode/*
11
- !.vscode/extensions.json
12
- .idea
13
- .DS_Store
14
- *.suo
15
- *.ntvs*
16
- *.njsproj
17
- *.sln
18
- *.sw?
19
-
20
- # Logs
21
- logs
22
- *.log
23
- npm-debug.log*
24
- yarn-debug.log*
25
- yarn-error.log*
26
- pnpm-debug.log*
27
- lerna-debug.log*
1
+ # Local-specified
2
+ node_modules
3
+ dist
4
+ build
5
+ coverage
6
+ .env
7
+ .env.local
8
+
9
+ # Editor directories and files
10
+ .vscode/*
11
+ !.vscode/extensions.json
12
+ .idea
13
+ .DS_Store
14
+ *.suo
15
+ *.ntvs*
16
+ *.njsproj
17
+ *.sln
18
+ *.sw?
19
+
20
+ # Logs
21
+ logs
22
+ *.log
23
+ npm-debug.log*
24
+ yarn-debug.log*
25
+ yarn-error.log*
26
+ pnpm-debug.log*
27
+ lerna-debug.log*
@@ -1,48 +1,48 @@
1
- {
2
- "name": "__PROJECT_NAME__",
3
- "version": "0.0.1",
4
- "private": true,
5
- "scripts": {
6
- "build": "webpack --env mode=production",
7
- "build:dev": "webpack --env mode=development",
8
- "build:prod": "webpack --env mode=production",
9
- "dev": "webpack serve --env mode=development port=3000",
10
- "start": "webpack serve --env mode=development port=3000",
11
- "typecheck": "tsc --noEmit"
12
- },
13
- "dependencies": {
14
- "clsx": "^2.1.1",
15
- "react": "^18.3.1",
16
- "react-dom": "^18.3.1"
17
- },
18
- "devDependencies": {
19
- "@babel/core": "^7.26.0",
20
- "@babel/preset-react": "^7.25.9",
21
- "@babel/preset-typescript": "^7.26.0",
22
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
23
- "@svgr/webpack": "^8.1.0",
24
- "@types/node": "^22.10.1",
25
- "@types/react": "^18.3.12",
26
- "@types/react-dom": "^18.3.1",
27
- "@types/webpack": "^5.28.5",
28
- "@types/webpack-bundle-analyzer": "^4.7.0",
29
- "@types/webpack-dev-server": "^4.7.1",
30
- "babel-loader": "^9.2.1",
31
- "css-loader": "^6.11.0",
32
- "html-webpack-plugin": "^5.6.3",
33
- "mini-css-extract-plugin": "^2.9.2",
34
- "postcss": "^8.5.6",
35
- "postcss-loader": "^8.2.0",
36
- "react-refresh": "^0.14.2",
37
- "sass": "^1.81.0",
38
- "sass-loader": "^16.0.3",
39
- "style-loader": "^4.0.0",
40
- "ts-loader": "^9.5.1",
41
- "ts-node": "^10.9.2",
42
- "typescript": "^5.7.2",
43
- "webpack": "^5.96.1",
44
- "webpack-bundle-analyzer": "^4.10.2",
45
- "webpack-cli": "^5.1.4",
46
- "webpack-dev-server": "^5.1.0"
47
- }
48
- }
1
+ {
2
+ "name": "__PROJECT_NAME__",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "scripts": {
6
+ "build": "webpack --env mode=production",
7
+ "build:dev": "webpack --env mode=development",
8
+ "build:prod": "webpack --env mode=production",
9
+ "dev": "webpack serve --env mode=development port=3000",
10
+ "start": "webpack serve --env mode=development port=3000",
11
+ "typecheck": "tsc --noEmit"
12
+ },
13
+ "dependencies": {
14
+ "clsx": "^2.1.1",
15
+ "react": "^18.3.1",
16
+ "react-dom": "^18.3.1"
17
+ },
18
+ "devDependencies": {
19
+ "@babel/core": "^7.26.0",
20
+ "@babel/preset-react": "^7.25.9",
21
+ "@babel/preset-typescript": "^7.26.0",
22
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
23
+ "@svgr/webpack": "^8.1.0",
24
+ "@types/node": "^22.10.1",
25
+ "@types/react": "^18.3.12",
26
+ "@types/react-dom": "^18.3.1",
27
+ "@types/webpack": "^5.28.5",
28
+ "@types/webpack-bundle-analyzer": "^4.7.0",
29
+ "@types/webpack-dev-server": "^4.7.1",
30
+ "babel-loader": "^9.2.1",
31
+ "css-loader": "^6.11.0",
32
+ "html-webpack-plugin": "^5.6.3",
33
+ "mini-css-extract-plugin": "^2.9.2",
34
+ "postcss": "^8.5.6",
35
+ "postcss-loader": "^8.2.0",
36
+ "react-refresh": "^0.14.2",
37
+ "sass": "^1.81.0",
38
+ "sass-loader": "^16.0.3",
39
+ "style-loader": "^4.0.0",
40
+ "ts-loader": "^9.5.1",
41
+ "ts-node": "^10.9.2",
42
+ "typescript": "^5.7.2",
43
+ "webpack": "^5.96.1",
44
+ "webpack-bundle-analyzer": "^4.10.2",
45
+ "webpack-cli": "^5.1.4",
46
+ "webpack-dev-server": "^5.1.0"
47
+ }
48
+ }
@@ -1,12 +1,12 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link rel="icon" type="image/png" href="/favicon.ico" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>__PROJECT_NAME__</title>
8
- </head>
9
- <body>
10
- <div id="root"></div>
11
- </body>
12
- </html>
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/png" href="/favicon.ico" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>__PROJECT_NAME__</title>
8
+ </head>
9
+ <body>
10
+ <div id="root"></div>
11
+ </body>
12
+ </html>
@@ -1,12 +1,12 @@
1
- import CreatedBy from '@/widgets/created-by';
2
- import styles from './styles.module.scss';
3
-
4
- function App() {
5
- return (
6
- <div className={styles.app_wrapper}>
7
- <CreatedBy />
8
- </div>
9
- );
10
- }
11
-
12
- export default App;
1
+ import CreatedBy from '@/widgets/created-by';
2
+ import styles from './styles.module.scss';
3
+
4
+ function App() {
5
+ return (
6
+ <div className={styles.app_wrapper}>
7
+ <CreatedBy />
8
+ </div>
9
+ );
10
+ }
11
+
12
+ export default App;
@@ -1,44 +1,44 @@
1
- import { Component, ErrorInfo, ReactNode } from 'react';
2
- import ErrorScreen from '../../ui/error-screen';
3
-
4
- type ErrorBoundaryProps = {
5
- children: ReactNode;
6
- };
7
-
8
- type ErrorBoundaryState = {
9
- hasError: boolean;
10
- error: Error | null;
11
- };
12
-
13
- class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
14
- constructor(props: ErrorBoundaryProps) {
15
- super(props);
16
- this.state = { hasError: false, error: null };
17
- }
18
-
19
- static getDerivedStateFromError(error: Error) {
20
- return {
21
- hasError: true,
22
- error,
23
- };
24
- }
25
-
26
- componentDidCatch(error: Error, errorInfo: ErrorInfo) {
27
- console.error('ErrorBoundary caught:', error, errorInfo);
28
- }
29
-
30
- public render(): ReactNode {
31
- if (this.state.hasError) {
32
- return (
33
- <ErrorScreen
34
- errorMessage={this.state.error?.message}
35
- onRetry={() => window.location.reload()}
36
- />
37
- );
38
- }
39
-
40
- return this.props.children;
41
- }
42
- }
43
-
44
- export default ErrorBoundary;
1
+ import { Component, ErrorInfo, ReactNode } from 'react';
2
+ import ErrorScreen from '../../ui/error-screen';
3
+
4
+ type ErrorBoundaryProps = {
5
+ children: ReactNode;
6
+ };
7
+
8
+ type ErrorBoundaryState = {
9
+ hasError: boolean;
10
+ error: Error | null;
11
+ };
12
+
13
+ class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
14
+ constructor(props: ErrorBoundaryProps) {
15
+ super(props);
16
+ this.state = { hasError: false, error: null };
17
+ }
18
+
19
+ static getDerivedStateFromError(error: Error) {
20
+ return {
21
+ hasError: true,
22
+ error,
23
+ };
24
+ }
25
+
26
+ componentDidCatch(error: Error, errorInfo: ErrorInfo) {
27
+ console.error('ErrorBoundary caught:', error, errorInfo);
28
+ }
29
+
30
+ public render(): ReactNode {
31
+ if (this.state.hasError) {
32
+ return (
33
+ <ErrorScreen
34
+ errorMessage={this.state.error?.message}
35
+ onRetry={() => window.location.reload()}
36
+ />
37
+ );
38
+ }
39
+
40
+ return this.props.children;
41
+ }
42
+ }
43
+
44
+ export default ErrorBoundary;