sh-ui-cli 0.57.0 → 0.58.1

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 (151) hide show
  1. package/data/changelog/versions.json +27 -0
  2. package/data/registry/react/components/sidebar/index.tsx +3 -3
  3. package/package.json +1 -1
  4. package/src/api.d.ts +34 -0
  5. package/src/api.js +7 -0
  6. package/src/create/architectures/archSchema.js +69 -0
  7. package/src/create/architectures/flat.js +51 -0
  8. package/src/create/architectures/fsd.js +42 -0
  9. package/src/create/architectures/index.js +55 -0
  10. package/src/create/cli-args.js +8 -1
  11. package/src/create/generator.js +101 -32
  12. package/src/create/index.mjs +7 -0
  13. package/src/create/plugins/authJwt.js +14 -8
  14. package/src/create/plugins/nextIntl.js +25 -17
  15. package/src/create/plugins/pluginSchema.js +26 -10
  16. package/src/create/plugins/sentry.js +9 -5
  17. package/src/mcp.mjs +10 -0
  18. package/templates/nextjs-app/_arch/flat/app/api/proxy/[...path]/route.ts +112 -0
  19. package/templates/nextjs-app/_arch/flat/app/layout.tsx +16 -0
  20. package/templates/nextjs-app/_arch/flat/components/common/PrefetchBoundary/index.tsx +35 -0
  21. package/templates/nextjs-app/_arch/flat/components/layouts/RootLayout.tsx +11 -0
  22. package/templates/nextjs-app/_arch/flat/components/providers/tanstack/QueryClientProvider.tsx +14 -0
  23. package/templates/nextjs-app/_arch/flat/lib/utils/getQueryClient.ts +14 -0
  24. package/templates/nextjs-app/_arch/flat/tsconfig.json +25 -0
  25. package/templates/nextjs-standalone/_arch/flat/app/api/proxy/[...path]/route.ts +112 -0
  26. package/templates/nextjs-standalone/_arch/flat/app/layout.tsx +16 -0
  27. package/templates/nextjs-standalone/_arch/flat/components/common/FallbackBoundary/index.tsx +89 -0
  28. package/templates/nextjs-standalone/_arch/flat/components/common/PrefetchBoundary/index.tsx +35 -0
  29. package/templates/nextjs-standalone/_arch/flat/components/layouts/RootLayout.tsx +11 -0
  30. package/templates/nextjs-standalone/_arch/flat/components/providers/GlobalProvider/index.tsx +23 -0
  31. package/templates/nextjs-standalone/_arch/flat/components/providers/index.tsx +1 -0
  32. package/templates/nextjs-standalone/_arch/flat/components/providers/tanstack/QueryClientProvider.tsx +14 -0
  33. package/templates/nextjs-standalone/_arch/flat/components/providers/tanstack/TanstackDevtoolsProvider.tsx +13 -0
  34. package/templates/nextjs-standalone/_arch/flat/components/providers/theme/ThemeProviders.tsx +12 -0
  35. package/templates/nextjs-standalone/_arch/flat/lib/api/apiTypes.ts +21 -0
  36. package/templates/nextjs-standalone/_arch/flat/lib/api/clientFetch.ts +40 -0
  37. package/templates/nextjs-standalone/_arch/flat/lib/api/error.ts +12 -0
  38. package/templates/nextjs-standalone/_arch/flat/lib/api/http.ts +13 -0
  39. package/templates/nextjs-standalone/_arch/flat/lib/api/observability.ts +20 -0
  40. package/templates/nextjs-standalone/_arch/flat/lib/api/queryClient.ts +30 -0
  41. package/templates/nextjs-standalone/_arch/flat/lib/api/serverFetch.ts +59 -0
  42. package/templates/nextjs-standalone/_arch/flat/lib/hooks/useAppMutation.ts +52 -0
  43. package/templates/nextjs-standalone/_arch/flat/lib/test/createTestQueryClient.ts +18 -0
  44. package/templates/nextjs-standalone/_arch/flat/lib/test/index.ts +2 -0
  45. package/templates/nextjs-standalone/_arch/flat/lib/test/renderWithProviders.tsx +40 -0
  46. package/templates/nextjs-standalone/_arch/flat/lib/utils/formatDate.ts +22 -0
  47. package/templates/nextjs-standalone/_arch/flat/lib/utils/formatPrice.ts +10 -0
  48. package/templates/nextjs-standalone/_arch/flat/lib/utils/getQueryClient.ts +14 -0
  49. package/templates/nextjs-standalone/_arch/flat/sh-ui.config.json +19 -0
  50. package/templates/nextjs-standalone/_arch/flat/tsconfig.json +41 -0
  51. package/templates/nextjs-standalone/_arch/fsd/src/app/providers/GlobalProvider/index.tsx +23 -0
  52. package/templates/nextjs-standalone/_arch/fsd/src/app/providers/index.tsx +1 -0
  53. package/templates/nextjs-standalone/_arch/fsd/src/app/providers/tanstack/TanstackDevtoolsProvider.tsx +13 -0
  54. package/templates/nextjs-standalone/_arch/fsd/src/app/providers/theme/ThemeProviders.tsx +12 -0
  55. package/templates/nextjs-standalone/_arch/fsd/src/entities/.gitkeep +0 -0
  56. package/templates/nextjs-standalone/_arch/fsd/src/features/.gitkeep +0 -0
  57. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/.gitkeep +0 -0
  58. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/apiTypes.ts +21 -0
  59. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/clientFetch.ts +40 -0
  60. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/error.ts +12 -0
  61. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/http.ts +13 -0
  62. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/observability.ts +20 -0
  63. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/queryClient.ts +30 -0
  64. package/templates/nextjs-standalone/_arch/fsd/src/shared/api/serverFetch.ts +59 -0
  65. package/templates/nextjs-standalone/_arch/fsd/src/shared/config/.gitkeep +0 -0
  66. package/templates/nextjs-standalone/_arch/fsd/src/shared/hooks/.gitkeep +0 -0
  67. package/templates/nextjs-standalone/_arch/fsd/src/shared/hooks/useAppMutation.ts +52 -0
  68. package/templates/nextjs-standalone/_arch/fsd/src/shared/lib/formatDate.ts +22 -0
  69. package/templates/nextjs-standalone/_arch/fsd/src/shared/lib/formatPrice.ts +10 -0
  70. package/templates/nextjs-standalone/_arch/fsd/src/shared/lib/utils.ts +6 -0
  71. package/templates/nextjs-standalone/_arch/fsd/src/shared/model/.gitkeep +0 -0
  72. package/templates/nextjs-standalone/_arch/fsd/src/shared/styles/tokens.css +135 -0
  73. package/templates/nextjs-standalone/_arch/fsd/src/shared/test/createTestQueryClient.ts +18 -0
  74. package/templates/nextjs-standalone/_arch/fsd/src/shared/test/index.ts +2 -0
  75. package/templates/nextjs-standalone/_arch/fsd/src/shared/test/renderWithProviders.tsx +40 -0
  76. package/templates/nextjs-standalone/_arch/fsd/src/shared/ui/.gitkeep +0 -0
  77. package/templates/nextjs-standalone/_arch/fsd/src/shared/ui/FallbackBoundary/index.tsx +89 -0
  78. package/templates/nextjs-standalone/_arch/fsd/src/views/.gitkeep +0 -0
  79. package/templates/nextjs-standalone/_arch/fsd/src/widgets/.gitkeep +0 -0
  80. /package/templates/nextjs-app/{src/entities → _arch/flat/components/common}/.gitkeep +0 -0
  81. /package/templates/nextjs-app/{src/shared/ui → _arch/flat/components/common}/FallbackBoundary/index.tsx +0 -0
  82. /package/templates/nextjs-app/{src/app → _arch/flat/components}/providers/GlobalProvider/index.tsx +0 -0
  83. /package/templates/nextjs-app/{src/app → _arch/flat/components}/providers/index.tsx +0 -0
  84. /package/templates/nextjs-app/{src/app → _arch/flat/components}/providers/tanstack/TanstackDevtoolsProvider.tsx +0 -0
  85. /package/templates/nextjs-app/{src/app → _arch/flat/components}/providers/theme/ThemeProviders.tsx +0 -0
  86. /package/templates/nextjs-app/{src/features → _arch/flat/lib/api}/.gitkeep +0 -0
  87. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/api/apiTypes.ts +0 -0
  88. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/api/clientFetch.ts +0 -0
  89. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/api/error.ts +0 -0
  90. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/api/http.ts +0 -0
  91. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/api/observability.ts +0 -0
  92. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/api/queryClient.ts +0 -0
  93. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/api/serverFetch.ts +0 -0
  94. /package/templates/nextjs-app/{src/shared/api → _arch/flat/lib/config}/.gitkeep +0 -0
  95. /package/templates/nextjs-app/{src/shared/config → _arch/flat/lib/hooks}/.gitkeep +0 -0
  96. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/hooks/useAppMutation.ts +0 -0
  97. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/test/createTestQueryClient.ts +0 -0
  98. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/test/index.ts +0 -0
  99. /package/templates/nextjs-app/{src/shared → _arch/flat/lib}/test/renderWithProviders.tsx +0 -0
  100. /package/templates/nextjs-app/{src/shared/hooks → _arch/flat/lib/utils}/.gitkeep +0 -0
  101. /package/templates/nextjs-app/{src/shared/lib → _arch/flat/lib/utils}/formatDate.ts +0 -0
  102. /package/templates/nextjs-app/{src/shared/lib → _arch/flat/lib/utils}/formatPrice.ts +0 -0
  103. /package/templates/nextjs-app/{app → _arch/fsd/app}/api/proxy/[...path]/route.ts +0 -0
  104. /package/templates/nextjs-app/{app → _arch/fsd/app}/layout.tsx +0 -0
  105. /package/templates/nextjs-app/{src → _arch/fsd/src}/app/layouts/RootLayout.tsx +0 -0
  106. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/app/providers/GlobalProvider/index.tsx +0 -0
  107. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/app/providers/index.tsx +0 -0
  108. /package/templates/nextjs-app/{src → _arch/fsd/src}/app/providers/tanstack/QueryClientProvider.tsx +0 -0
  109. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/app/providers/tanstack/TanstackDevtoolsProvider.tsx +0 -0
  110. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/app/providers/theme/ThemeProviders.tsx +0 -0
  111. /package/templates/nextjs-app/{src/shared/lib → _arch/fsd/src/entities}/.gitkeep +0 -0
  112. /package/templates/nextjs-app/{src/shared/model → _arch/fsd/src/features}/.gitkeep +0 -0
  113. /package/templates/nextjs-app/{src/shared/ui → _arch/fsd/src/shared/api}/.gitkeep +0 -0
  114. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/api/apiTypes.ts +0 -0
  115. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/api/clientFetch.ts +0 -0
  116. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/api/error.ts +0 -0
  117. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/api/http.ts +0 -0
  118. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/api/observability.ts +0 -0
  119. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/api/queryClient.ts +0 -0
  120. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/api/serverFetch.ts +0 -0
  121. /package/templates/nextjs-app/{src/views → _arch/fsd/src/shared/config}/.gitkeep +0 -0
  122. /package/templates/nextjs-app/{src/widgets → _arch/fsd/src/shared/hooks}/.gitkeep +0 -0
  123. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/hooks/useAppMutation.ts +0 -0
  124. /package/templates/{nextjs-standalone/src/entities → nextjs-app/_arch/fsd/src/shared/lib}/.gitkeep +0 -0
  125. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/lib/formatDate.ts +0 -0
  126. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/lib/formatPrice.ts +0 -0
  127. /package/templates/nextjs-app/{src → _arch/fsd/src}/shared/lib/getQueryClient.ts +0 -0
  128. /package/templates/{nextjs-standalone/src/features → nextjs-app/_arch/fsd/src/shared/model}/.gitkeep +0 -0
  129. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/test/createTestQueryClient.ts +0 -0
  130. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/test/index.ts +0 -0
  131. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/test/renderWithProviders.tsx +0 -0
  132. /package/templates/{nextjs-standalone/src/shared/api → nextjs-app/_arch/fsd/src/shared/ui}/.gitkeep +0 -0
  133. /package/templates/{nextjs-standalone → nextjs-app/_arch/fsd}/src/shared/ui/FallbackBoundary/index.tsx +0 -0
  134. /package/templates/nextjs-app/{src → _arch/fsd/src}/shared/ui/PrefetchBoundary/index.tsx +0 -0
  135. /package/templates/{nextjs-standalone/src/shared/config → nextjs-app/_arch/fsd/src/views}/.gitkeep +0 -0
  136. /package/templates/{nextjs-standalone/src/shared/hooks → nextjs-app/_arch/fsd/src/widgets}/.gitkeep +0 -0
  137. /package/templates/nextjs-app/{tsconfig.json → _arch/fsd/tsconfig.json} +0 -0
  138. /package/templates/nextjs-standalone/{src/shared/model → _arch/flat/components/common}/.gitkeep +0 -0
  139. /package/templates/nextjs-standalone/{src/shared/ui → _arch/flat/lib/api}/.gitkeep +0 -0
  140. /package/templates/nextjs-standalone/{src/views → _arch/flat/lib/config}/.gitkeep +0 -0
  141. /package/templates/nextjs-standalone/{src/widgets → _arch/flat/lib/hooks}/.gitkeep +0 -0
  142. /package/templates/nextjs-standalone/{src/shared → _arch/flat/lib}/styles/tokens.css +0 -0
  143. /package/templates/nextjs-standalone/{src/shared/lib → _arch/flat/lib/utils}/utils.ts +0 -0
  144. /package/templates/nextjs-standalone/{app → _arch/fsd/app}/api/proxy/[...path]/route.ts +0 -0
  145. /package/templates/nextjs-standalone/{app → _arch/fsd/app}/layout.tsx +0 -0
  146. /package/templates/nextjs-standalone/{sh-ui.config.json → _arch/fsd/sh-ui.config.json} +0 -0
  147. /package/templates/nextjs-standalone/{src → _arch/fsd/src}/app/layouts/RootLayout.tsx +0 -0
  148. /package/templates/nextjs-standalone/{src → _arch/fsd/src}/app/providers/tanstack/QueryClientProvider.tsx +0 -0
  149. /package/templates/nextjs-standalone/{src → _arch/fsd/src}/shared/lib/getQueryClient.ts +0 -0
  150. /package/templates/nextjs-standalone/{src → _arch/fsd/src}/shared/ui/PrefetchBoundary/index.tsx +0 -0
  151. /package/templates/nextjs-standalone/{tsconfig.json → _arch/fsd/tsconfig.json} +0 -0
@@ -0,0 +1,89 @@
1
+ 'use client';
2
+
3
+ import {
4
+ Component,
5
+ type ComponentType,
6
+ type ErrorInfo,
7
+ type ReactNode,
8
+ Suspense,
9
+ } from 'react';
10
+ import { QueryErrorResetBoundary } from '@tanstack/react-query';
11
+
12
+ export type ErrorFallbackProps = {
13
+ error: Error | null;
14
+ resetErrorBoundary: () => void;
15
+ };
16
+
17
+ type ErrorBoundaryProps = {
18
+ children: ReactNode;
19
+ fallback?: ComponentType<ErrorFallbackProps>;
20
+ onReset: () => void;
21
+ onError?: (error: Error, info: ErrorInfo) => void;
22
+ };
23
+
24
+ type ErrorBoundaryState = {
25
+ hasError: boolean;
26
+ error: Error | null;
27
+ };
28
+
29
+ class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
30
+ state: ErrorBoundaryState = { hasError: false, error: null };
31
+
32
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState {
33
+ return { hasError: true, error };
34
+ }
35
+
36
+ componentDidCatch(error: Error, info: ErrorInfo) {
37
+ this.props.onError?.(error, info);
38
+ }
39
+
40
+ resetErrorBoundary = () => {
41
+ this.props.onReset();
42
+ this.setState({ hasError: false, error: null });
43
+ };
44
+
45
+ render() {
46
+ const { hasError, error } = this.state;
47
+ const { children, fallback: Fallback } = this.props;
48
+
49
+ if (hasError && Fallback) {
50
+ return (
51
+ <Fallback error={error} resetErrorBoundary={this.resetErrorBoundary} />
52
+ );
53
+ }
54
+
55
+ return children;
56
+ }
57
+ }
58
+
59
+ type FallbackBoundaryProps = {
60
+ children: ReactNode;
61
+ errorFallback?: ComponentType<ErrorFallbackProps>;
62
+ suspenseFallback?: ReactNode;
63
+ onError?: (error: Error, info: ErrorInfo) => void;
64
+ };
65
+
66
+ /**
67
+ * Suspense + ErrorBoundary 합성. React Query 의 reset 신호에 맞춰
68
+ * `errorFallback` 의 `resetErrorBoundary` 가 쿼리까지 함께 리셋한다.
69
+ */
70
+ export function FallbackBoundary({
71
+ children,
72
+ errorFallback,
73
+ suspenseFallback,
74
+ onError,
75
+ }: FallbackBoundaryProps) {
76
+ return (
77
+ <QueryErrorResetBoundary>
78
+ {({ reset }) => (
79
+ <ErrorBoundary
80
+ onReset={reset}
81
+ fallback={errorFallback}
82
+ onError={onError}
83
+ >
84
+ <Suspense fallback={suspenseFallback}>{children}</Suspense>
85
+ </ErrorBoundary>
86
+ )}
87
+ </QueryErrorResetBoundary>
88
+ );
89
+ }