@webdevarif/dashui-setup 0.1.0
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.
- package/README.md +177 -0
- package/dist/hooks.js +2 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hooks.mjs +2 -0
- package/dist/hooks.mjs.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib.js +2 -0
- package/dist/lib.js.map +1 -0
- package/dist/lib.mjs +2 -0
- package/dist/lib.mjs.map +1 -0
- package/dist/providers.js +2 -0
- package/dist/providers.js.map +1 -0
- package/dist/providers.mjs +2 -0
- package/dist/providers.mjs.map +1 -0
- package/package.json +77 -0
package/README.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# @webdevarif/dashui-setup
|
|
2
|
+
|
|
3
|
+
Zero-config providers, hooks, and middleware for **Next.js 14+** + **NextAuth v5** + **next-intl** + **SWR** + **Prisma**.
|
|
4
|
+
|
|
5
|
+
## The Problem
|
|
6
|
+
|
|
7
|
+
Every Next.js + auth + i18n + data project needs the same boilerplate:
|
|
8
|
+
- Session providers
|
|
9
|
+
- i18n setup
|
|
10
|
+
- Data fetching with SWR
|
|
11
|
+
- Prisma singleton pattern
|
|
12
|
+
- Middleware for routing
|
|
13
|
+
|
|
14
|
+
This takes **2-3 hours per project** and causes:
|
|
15
|
+
- ❌ Copy-paste pain
|
|
16
|
+
- ❌ Version mismatch bugs
|
|
17
|
+
- ❌ Inconsistent patterns
|
|
18
|
+
- ❌ Token burn on setup
|
|
19
|
+
|
|
20
|
+
## The Solution
|
|
21
|
+
|
|
22
|
+
One line:
|
|
23
|
+
```bash
|
|
24
|
+
npm install @webdevarif/dashui-setup
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
### 1. Wrap Your App (layout.tsx)
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { RootProvider } from '@webdevarif/dashui-setup'
|
|
33
|
+
import { auth } from '@/auth'
|
|
34
|
+
|
|
35
|
+
export default async function RootLayout({
|
|
36
|
+
children,
|
|
37
|
+
params: { locale }
|
|
38
|
+
}: {
|
|
39
|
+
children: React.ReactNode
|
|
40
|
+
params: { locale: string }
|
|
41
|
+
}) {
|
|
42
|
+
const session = await auth()
|
|
43
|
+
const messages = await import(`../../messages/${locale}.json`)
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<html lang={locale}>
|
|
47
|
+
<body>
|
|
48
|
+
<RootProvider
|
|
49
|
+
session={session}
|
|
50
|
+
locale={locale}
|
|
51
|
+
messages={messages.default}
|
|
52
|
+
>
|
|
53
|
+
{children}
|
|
54
|
+
</RootProvider>
|
|
55
|
+
</body>
|
|
56
|
+
</html>
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 2. Use Hooks Anywhere
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
'use client'
|
|
65
|
+
|
|
66
|
+
import { useAuth, useI18n, useFetch } from '@webdevarif/dashui-setup/hooks'
|
|
67
|
+
|
|
68
|
+
export function Dashboard() {
|
|
69
|
+
const { data: session } = useAuth()
|
|
70
|
+
const t = useI18n()
|
|
71
|
+
const { data: stats } = useFetch('/api/stats')
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<div>
|
|
75
|
+
<h1>{t('dashboard.title')}</h1>
|
|
76
|
+
<p>Welcome {session?.user?.name}</p>
|
|
77
|
+
<p>Orders: {stats?.orderCount}</p>
|
|
78
|
+
</div>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 3. Use Prisma (API routes)
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { prisma } from '@webdevarif/dashui-setup/lib'
|
|
87
|
+
|
|
88
|
+
export async function GET() {
|
|
89
|
+
const users = await prisma.user.findMany()
|
|
90
|
+
return Response.json(users)
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## What's Included
|
|
95
|
+
|
|
96
|
+
### Providers
|
|
97
|
+
- **AuthProvider** — NextAuth SessionProvider wrapper
|
|
98
|
+
- **I18nProvider** — next-intl IntlProvider wrapper
|
|
99
|
+
- **SWRProvider** — Optimized SWR global config
|
|
100
|
+
- **RootProvider** — All three combined (recommended)
|
|
101
|
+
|
|
102
|
+
### Hooks
|
|
103
|
+
- **useAuth()** — Access session and auth state
|
|
104
|
+
- **useI18n()** — Access translations
|
|
105
|
+
- **useFetch(url)** — Simplified data fetching with SWR
|
|
106
|
+
|
|
107
|
+
### Utilities
|
|
108
|
+
- **prisma** — Singleton PrismaClient (prevents connection pool issues)
|
|
109
|
+
|
|
110
|
+
## Default Configurations
|
|
111
|
+
|
|
112
|
+
### SWR Config
|
|
113
|
+
```ts
|
|
114
|
+
{
|
|
115
|
+
revalidateOnFocus: false, // Don't refresh on window focus
|
|
116
|
+
revalidateOnReconnect: true, // Refresh when network reconnects
|
|
117
|
+
dedupingInterval: 60000, // Deduplicate requests within 60s
|
|
118
|
+
focusThrottleInterval: 300000, // Throttle focus revalidation to 5min
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Prisma Logger
|
|
123
|
+
- **Development:** Logs SQL queries
|
|
124
|
+
- **Production:** Silent
|
|
125
|
+
|
|
126
|
+
## Installation
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npm install @webdevarif/dashui-setup next-auth next-intl swr @prisma/client
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Peer Dependencies
|
|
133
|
+
|
|
134
|
+
- `next` >= 14
|
|
135
|
+
- `next-auth` >= 5
|
|
136
|
+
- `next-intl` >= 3
|
|
137
|
+
- `swr` >= 2
|
|
138
|
+
- `@prisma/client` >= 5
|
|
139
|
+
- `react` >= 18
|
|
140
|
+
- `react-dom` >= 18
|
|
141
|
+
|
|
142
|
+
## What This Saves
|
|
143
|
+
|
|
144
|
+
| Task | Before | After |
|
|
145
|
+
|------|--------|-------|
|
|
146
|
+
| Setup time per project | 2-3 hours | 5 minutes |
|
|
147
|
+
| Auth provider config | 30 lines | 1 import |
|
|
148
|
+
| i18n setup | 40 lines | 1 import |
|
|
149
|
+
| SWR config | 20 lines | 1 import |
|
|
150
|
+
| Prisma singleton | 20 lines | 1 import |
|
|
151
|
+
| Data fetching | `fetch().then()` | `useFetch('/api/...')` |
|
|
152
|
+
|
|
153
|
+
## Example Project Structure
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
my-app/
|
|
157
|
+
├── src/
|
|
158
|
+
│ ├── app/
|
|
159
|
+
│ │ ├── [locale]/
|
|
160
|
+
│ │ │ ├── layout.tsx (uses RootProvider)
|
|
161
|
+
│ │ │ └── page.tsx (uses useAuth, useI18n)
|
|
162
|
+
│ │ └── api/
|
|
163
|
+
│ │ └── users/
|
|
164
|
+
│ │ └── route.ts (uses prisma)
|
|
165
|
+
│ ├── messages/
|
|
166
|
+
│ │ ├── en.json
|
|
167
|
+
│ │ └── nl.json
|
|
168
|
+
│ ├── auth.ts
|
|
169
|
+
│ └── middleware.ts
|
|
170
|
+
├── prisma/
|
|
171
|
+
│ └── schema.prisma
|
|
172
|
+
└── package.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## License
|
|
176
|
+
|
|
177
|
+
MIT
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var a=Object.create;var u=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var g=(r,e)=>{for(var o in e)u(r,o,{get:e[o],enumerable:!0})},s=(r,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of h(e))!I.call(r,t)&&t!==o&&u(r,t,{get:()=>e[t],enumerable:!(n=d(e,t))||n.enumerable});return r};var y=(r,e,o)=>(o=r!=null?a(l(r)):{},s(e||!r||!r.__esModule?u(o,"default",{value:r,enumerable:!0}):o,r)),A=r=>s(u({},"__esModule",{value:!0}),r);var F={};g(F,{useAuth:()=>f,useFetch:()=>x,useI18n:()=>p});module.exports=A(F);var i=require("next-auth/react");function f(){return(0,i.useSession)()}var m=require("next-intl");function p(){return(0,m.useIntl)()}var c=y(require("swr"));function x(r,e){let{data:o,error:n,isLoading:t}=(0,c.default)(r,e);return{data:o,isLoading:t,error:n,isError:!!n}}0&&(module.exports={useAuth,useFetch,useI18n});
|
|
2
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/index.ts","../src/hooks/use-auth.ts","../src/hooks/use-i18n.ts","../src/hooks/use-fetch.ts"],"sourcesContent":["export { useAuth } from './use-auth'\nexport { useI18n } from './use-i18n'\nexport { useFetch } from './use-fetch'\n","import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","import { useIntl } from 'next-intl'\n\n/**\n * useI18n - Hook to access translations\n * \n * Returns the next-intl useIntl hook result\n * \n * Usage:\n * ```tsx\n * import { useI18n } from '@webdevarif/dashui-setup/hooks'\n * \n * function Header() {\n * const t = useI18n()\n * \n * return <h1>{t('home.title')}</h1>\n * }\n * ```\n */\nexport function useI18n() {\n return useIntl()\n}\n","import useSWR from 'swr'\n\n/**\n * useFetch - Simplified hook for data fetching with SWR\n * \n * Returns SWR hook result with built-in error handling\n * \n * Usage:\n * ```tsx\n * import { useFetch } from '@webdevarif/dashui-setup/hooks'\n * \n * function UserList() {\n * const { data, isLoading, error } = useFetch('/api/users')\n * \n * if (isLoading) return <div>Loading...</div>\n * if (error) return <div>Error: {error.message}</div>\n * \n * return (\n * <ul>\n * {data?.map(user => <li key={user.id}>{user.name}</li>)}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useFetch<T = any>(\n url: string | null | undefined,\n options?: any\n) {\n const { data, error, isLoading } = useSWR<T>(url, options)\n\n return {\n data,\n isLoading,\n error,\n isError: !!error,\n }\n}\n"],"mappings":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,aAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAL,GCAA,IAAAM,EAA2B,2BAqBpB,SAASC,GAAU,CACxB,SAAO,cAAW,CACpB,CCvBA,IAAAC,EAAwB,qBAkBjB,SAASC,GAAU,CACxB,SAAO,WAAQ,CACjB,CCpBA,IAAAC,EAAmB,kBAyBZ,SAASC,EACdC,EACAC,EACA,CACA,GAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,UAAAC,CAAU,KAAI,EAAAC,SAAUL,EAAKC,CAAO,EAEzD,MAAO,CACL,KAAAC,EACA,UAAAE,EACA,MAAAD,EACA,QAAS,CAAC,CAACA,CACb,CACF","names":["hooks_exports","__export","useAuth","useFetch","useI18n","__toCommonJS","import_react","useAuth","import_next_intl","useI18n","import_swr","useFetch","url","options","data","error","isLoading","useSWR"]}
|
package/dist/hooks.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useSession as u}from"next-auth/react";function s(){return u()}import{useIntl as i}from"next-intl";function f(){return i()}import m from"swr";function p(e,o){let{data:t,error:r,isLoading:n}=m(e,o);return{data:t,isLoading:n,error:r,isError:!!r}}export{s as useAuth,p as useFetch,f as useI18n};
|
|
2
|
+
//# sourceMappingURL=hooks.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-auth.ts","../src/hooks/use-i18n.ts","../src/hooks/use-fetch.ts"],"sourcesContent":["import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","import { useIntl } from 'next-intl'\n\n/**\n * useI18n - Hook to access translations\n * \n * Returns the next-intl useIntl hook result\n * \n * Usage:\n * ```tsx\n * import { useI18n } from '@webdevarif/dashui-setup/hooks'\n * \n * function Header() {\n * const t = useI18n()\n * \n * return <h1>{t('home.title')}</h1>\n * }\n * ```\n */\nexport function useI18n() {\n return useIntl()\n}\n","import useSWR from 'swr'\n\n/**\n * useFetch - Simplified hook for data fetching with SWR\n * \n * Returns SWR hook result with built-in error handling\n * \n * Usage:\n * ```tsx\n * import { useFetch } from '@webdevarif/dashui-setup/hooks'\n * \n * function UserList() {\n * const { data, isLoading, error } = useFetch('/api/users')\n * \n * if (isLoading) return <div>Loading...</div>\n * if (error) return <div>Error: {error.message}</div>\n * \n * return (\n * <ul>\n * {data?.map(user => <li key={user.id}>{user.name}</li>)}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useFetch<T = any>(\n url: string | null | undefined,\n options?: any\n) {\n const { data, error, isLoading } = useSWR<T>(url, options)\n\n return {\n data,\n isLoading,\n error,\n isError: !!error,\n }\n}\n"],"mappings":"AAAA,OAAS,cAAAA,MAAkB,kBAqBpB,SAASC,GAAU,CACxB,OAAOD,EAAW,CACpB,CCvBA,OAAS,WAAAE,MAAe,YAkBjB,SAASC,GAAU,CACxB,OAAOD,EAAQ,CACjB,CCpBA,OAAOE,MAAY,MAyBZ,SAASC,EACdC,EACAC,EACA,CACA,GAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,UAAAC,CAAU,EAAIN,EAAUE,EAAKC,CAAO,EAEzD,MAAO,CACL,KAAAC,EACA,UAAAE,EACA,MAAAD,EACA,QAAS,CAAC,CAACA,CACb,CACF","names":["useSession","useAuth","useIntl","useI18n","useSWR","useFetch","url","options","data","error","isLoading"]}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var C=Object.create;var n=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var Z=(r,o)=>{for(var e in o)n(r,e,{get:o[e],enumerable:!0})},c=(r,o,e,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of F(o))!T.call(r,i)&&i!==e&&n(r,i,{get:()=>o[i],enumerable:!(t=E(o,i))||t.enumerable});return r};var _=(r,o,e)=>(e=r!=null?C(O(r)):{},c(o||!r||!r.__esModule?n(e,"default",{value:r,enumerable:!0}):e,r)),D=r=>c(n({},"__esModule",{value:!0}),r);var w={};Z(w,{AuthProvider:()=>s,I18nProvider:()=>m,RootProvider:()=>g,SWRProvider:()=>p,prisma:()=>a,useAuth:()=>x,useFetch:()=>W,useI18n:()=>N});module.exports=D(w);var f=require("next-auth/react"),u=require("react/jsx-runtime");function s({children:r,session:o}){return(0,u.jsx)(f.SessionProvider,{session:o,children:r})}var P=require("next-intl"),l=require("react/jsx-runtime");function m({children:r,locale:o,messages:e,timeZone:t="UTC"}){return(0,l.jsx)(P.IntlProvider,{locale:o,messages:e,timeZone:t,children:r})}var v=require("swr"),R=require("react/jsx-runtime"),b={revalidateOnFocus:!1,revalidateOnReconnect:!0,dedupingInterval:6e4,focusThrottleInterval:3e5};function p({children:r}){return(0,R.jsx)(v.SWRConfig,{value:{fetcher:o=>fetch(o).then(e=>e.json()),...b},children:r})}var d=require("react/jsx-runtime");function g({children:r,session:o,locale:e,messages:t,timeZone:i}){return(0,d.jsx)(s,{session:o,children:(0,d.jsx)(m,{locale:e,messages:t,timeZone:i,children:(0,d.jsx)(p,{children:r})})})}var h=require("next-auth/react");function x(){return(0,h.useSession)()}var I=require("next-intl");function N(){return(0,I.useIntl)()}var S=_(require("swr"));function W(r,o){let{data:e,error:t,isLoading:i}=(0,S.default)(r,o);return{data:e,isLoading:i,error:t,isError:!!t}}var A=require("@prisma/client"),y=global,a=y.prisma||new A.PrismaClient({log:process.env.NODE_ENV==="development"?["query"]:[]});process.env.NODE_ENV!=="production"&&(y.prisma=a);0&&(module.exports={AuthProvider,I18nProvider,RootProvider,SWRProvider,prisma,useAuth,useFetch,useI18n});
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/providers/auth-provider.tsx","../src/providers/i18n-provider.tsx","../src/providers/swr-provider.tsx","../src/providers/root-provider.tsx","../src/hooks/use-auth.ts","../src/hooks/use-i18n.ts","../src/hooks/use-fetch.ts","../src/lib/prisma.ts"],"sourcesContent":["// Providers\nexport * from './providers'\n\n// Hooks\nexport * from './hooks'\n\n// Utilities\nexport * from './lib'\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SessionProvider } from 'next-auth/react'\n\ninterface AuthProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * AuthProvider - Wraps your app with NextAuth SessionProvider\n * \n * Usage:\n * ```tsx\n * import { AuthProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <AuthProvider session={session}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function AuthProvider({ children, session }: AuthProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n </SessionProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { IntlProvider } from 'next-intl'\n\ninterface I18nProviderProps {\n children: ReactNode\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * I18nProvider - Wraps your app with next-intl IntlProvider\n * \n * Usage:\n * ```tsx\n * import { I18nProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <I18nProvider locale={locale} messages={messages} timeZone=\"Asia/Dhaka\">\n * <App />\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider({ \n children, \n locale, \n messages, \n timeZone = 'UTC' \n}: I18nProviderProps) {\n return (\n <IntlProvider locale={locale} messages={messages} timeZone={timeZone}>\n {children}\n </IntlProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SWRConfig } from 'swr'\n\ninterface SWRProviderProps {\n children: ReactNode\n}\n\nconst DEFAULT_SWR_CONFIG = {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000,\n focusThrottleInterval: 300000,\n}\n\n/**\n * SWRProvider - Wraps your app with optimized SWR config\n * \n * Default config:\n * - revalidateOnFocus: false (no refresh on window focus)\n * - revalidateOnReconnect: true (refresh when network reconnects)\n * - dedupingInterval: 60s (deduplicate requests within 60s)\n * - focusThrottleInterval: 5min (throttle focus revalidation)\n * \n * Usage:\n * ```tsx\n * import { SWRProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <SWRProvider>\n * <App />\n * </SWRProvider>\n * ```\n */\nexport function SWRProvider({ children }: SWRProviderProps) {\n return (\n <SWRConfig value={{ fetcher: (url) => fetch(url).then(r => r.json()), ...DEFAULT_SWR_CONFIG }}>\n {children}\n </SWRConfig>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { AuthProvider } from './auth-provider'\nimport { I18nProvider } from './i18n-provider'\nimport { SWRProvider } from './swr-provider'\n\ninterface RootProviderProps {\n children: ReactNode\n session?: any\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * RootProvider - Single provider that combines Auth + I18n + SWR\n * \n * Usage in layout.tsx:\n * ```tsx\n * import { RootProvider } from '@webdevarif/dashui-setup'\n * \n * export default function RootLayout({ \n * children, \n * params: { locale } \n * }: {\n * children: React.ReactNode\n * params: { locale: string }\n * }) {\n * const session = await auth()\n * const messages = await import(`../../messages/${locale}.json`)\n * \n * return (\n * <html lang={locale}>\n * <body>\n * <RootProvider \n * session={session}\n * locale={locale}\n * messages={messages.default}\n * >\n * {children}\n * </RootProvider>\n * </body>\n * </html>\n * )\n * }\n * ```\n */\nexport function RootProvider({\n children,\n session,\n locale,\n messages,\n timeZone,\n}: RootProviderProps) {\n return (\n <AuthProvider session={session}>\n <I18nProvider locale={locale} messages={messages} timeZone={timeZone}>\n <SWRProvider>\n {children}\n </SWRProvider>\n </I18nProvider>\n </AuthProvider>\n )\n}\n","import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","import { useIntl } from 'next-intl'\n\n/**\n * useI18n - Hook to access translations\n * \n * Returns the next-intl useIntl hook result\n * \n * Usage:\n * ```tsx\n * import { useI18n } from '@webdevarif/dashui-setup/hooks'\n * \n * function Header() {\n * const t = useI18n()\n * \n * return <h1>{t('home.title')}</h1>\n * }\n * ```\n */\nexport function useI18n() {\n return useIntl()\n}\n","import useSWR from 'swr'\n\n/**\n * useFetch - Simplified hook for data fetching with SWR\n * \n * Returns SWR hook result with built-in error handling\n * \n * Usage:\n * ```tsx\n * import { useFetch } from '@webdevarif/dashui-setup/hooks'\n * \n * function UserList() {\n * const { data, isLoading, error } = useFetch('/api/users')\n * \n * if (isLoading) return <div>Loading...</div>\n * if (error) return <div>Error: {error.message}</div>\n * \n * return (\n * <ul>\n * {data?.map(user => <li key={user.id}>{user.name}</li>)}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useFetch<T = any>(\n url: string | null | undefined,\n options?: any\n) {\n const { data, error, isLoading } = useSWR<T>(url, options)\n\n return {\n data,\n isLoading,\n error,\n isError: !!error,\n }\n}\n","import { PrismaClient } from '@prisma/client'\n\n/**\n * Prisma Singleton - Reuse PrismaClient across requests\n * \n * In development: Hot reload can create multiple PrismaClient instances\n * This singleton pattern prevents connection pool exhaustion\n * \n * Usage in lib/prisma.ts:\n * ```tsx\n * export { prisma } from '@webdevarif/dashui-setup/lib'\n * ```\n * \n * Then use in API routes:\n * ```tsx\n * import { prisma } from '@/lib/prisma'\n * \n * export async function GET() {\n * const users = await prisma.user.findMany()\n * return Response.json(users)\n * }\n * ```\n */\n\nconst globalForPrisma = global as unknown as { prisma: PrismaClient }\n\nexport const prisma =\n globalForPrisma.prisma ||\n new PrismaClient({\n log: process.env.NODE_ENV === 'development' ? ['query'] : [],\n })\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"mappings":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,EAAA,iBAAAC,EAAA,iBAAAC,EAAA,gBAAAC,EAAA,WAAAC,EAAA,YAAAC,EAAA,aAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAV,GCGA,IAAAW,EAAgC,2BAqB5BC,EAAA,6BAFG,SAASC,EAAa,CAAE,SAAAC,EAAU,QAAAC,CAAQ,EAAsB,CACrE,SACE,OAAC,mBAAgB,QAASA,EACvB,SAAAD,EACH,CAEJ,CCzBA,IAAAE,EAA6B,qBA4BzBC,EAAA,6BAPG,SAASC,EAAa,CAC3B,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,KACb,EAAsB,CACpB,SACE,OAAC,gBAAa,OAAQF,EAAQ,SAAUC,EAAU,SAAUC,EACzD,SAAAH,EACH,CAEJ,CChCA,IAAAI,EAA0B,eAiCtBC,EAAA,6BA3BEC,EAAqB,CACzB,kBAAmB,GACnB,sBAAuB,GACvB,iBAAkB,IAClB,sBAAuB,GACzB,EAoBO,SAASC,EAAY,CAAE,SAAAC,CAAS,EAAqB,CAC1D,SACE,OAAC,aAAU,MAAO,CAAE,QAAUC,GAAQ,MAAMA,CAAG,EAAE,KAAKC,GAAKA,EAAE,KAAK,CAAC,EAAG,GAAGJ,CAAmB,EACzF,SAAAE,EACH,CAEJ,CCkBQ,IAAAG,EAAA,6BAVD,SAASC,EAAa,CAC3B,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAsB,CACpB,SACE,OAACC,EAAA,CAAa,QAASJ,EACrB,mBAACK,EAAA,CAAa,OAAQJ,EAAQ,SAAUC,EAAU,SAAUC,EAC1D,mBAACG,EAAA,CACE,SAAAP,EACH,EACF,EACF,CAEJ,CChEA,IAAAQ,EAA2B,2BAqBpB,SAASC,GAAU,CACxB,SAAO,cAAW,CACpB,CCvBA,IAAAC,EAAwB,qBAkBjB,SAASC,GAAU,CACxB,SAAO,WAAQ,CACjB,CCpBA,IAAAC,EAAmB,kBAyBZ,SAASC,EACdC,EACAC,EACA,CACA,GAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,UAAAC,CAAU,KAAI,EAAAC,SAAUL,EAAKC,CAAO,EAEzD,MAAO,CACL,KAAAC,EACA,UAAAE,EACA,MAAAD,EACA,QAAS,CAAC,CAACA,CACb,CACF,CCrCA,IAAAG,EAA6B,0BAwBvBC,EAAkB,OAEXC,EACXD,EAAgB,QAChB,IAAI,eAAa,CACf,IAAK,QAAQ,IAAI,WAAa,cAAgB,CAAC,OAAO,EAAI,CAAC,CAC7D,CAAC,EAEC,QAAQ,IAAI,WAAa,eAAcA,EAAgB,OAASC","names":["src_exports","__export","AuthProvider","I18nProvider","RootProvider","SWRProvider","prisma","useAuth","useFetch","useI18n","__toCommonJS","import_react","import_jsx_runtime","AuthProvider","children","session","import_next_intl","import_jsx_runtime","I18nProvider","children","locale","messages","timeZone","import_swr","import_jsx_runtime","DEFAULT_SWR_CONFIG","SWRProvider","children","url","r","import_jsx_runtime","RootProvider","children","session","locale","messages","timeZone","AuthProvider","I18nProvider","SWRProvider","import_react","useAuth","import_next_intl","useI18n","import_swr","useFetch","url","options","data","error","isLoading","useSWR","import_client","globalForPrisma","prisma"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{SessionProvider as c}from"next-auth/react";import{jsx as f}from"react/jsx-runtime";function n({children:r,session:o}){return f(c,{session:o,children:r})}import{IntlProvider as u}from"next-intl";import{jsx as P}from"react/jsx-runtime";function s({children:r,locale:o,messages:e,timeZone:t="UTC"}){return P(u,{locale:o,messages:e,timeZone:t,children:r})}import{SWRConfig as l}from"swr";import{jsx as R}from"react/jsx-runtime";var v={revalidateOnFocus:!1,revalidateOnReconnect:!0,dedupingInterval:6e4,focusThrottleInterval:3e5};function m({children:r}){return R(l,{value:{fetcher:o=>fetch(o).then(e=>e.json()),...v},children:r})}import{jsx as p}from"react/jsx-runtime";function g({children:r,session:o,locale:e,messages:t,timeZone:i}){return p(n,{session:o,children:p(s,{locale:e,messages:t,timeZone:i,children:p(m,{children:r})})})}import{useSession as h}from"next-auth/react";function x(){return h()}import{useIntl as I}from"next-intl";function N(){return I()}import S from"swr";function W(r,o){let{data:e,error:t,isLoading:i}=S(r,o);return{data:e,isLoading:i,error:t,isError:!!t}}import{PrismaClient as A}from"@prisma/client";var d=global,a=d.prisma||new A({log:process.env.NODE_ENV==="development"?["query"]:[]});process.env.NODE_ENV!=="production"&&(d.prisma=a);export{n as AuthProvider,s as I18nProvider,g as RootProvider,m as SWRProvider,a as prisma,x as useAuth,W as useFetch,N as useI18n};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/auth-provider.tsx","../src/providers/i18n-provider.tsx","../src/providers/swr-provider.tsx","../src/providers/root-provider.tsx","../src/hooks/use-auth.ts","../src/hooks/use-i18n.ts","../src/hooks/use-fetch.ts","../src/lib/prisma.ts"],"sourcesContent":["'use client'\n\nimport { ReactNode } from 'react'\nimport { SessionProvider } from 'next-auth/react'\n\ninterface AuthProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * AuthProvider - Wraps your app with NextAuth SessionProvider\n * \n * Usage:\n * ```tsx\n * import { AuthProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <AuthProvider session={session}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function AuthProvider({ children, session }: AuthProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n </SessionProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { IntlProvider } from 'next-intl'\n\ninterface I18nProviderProps {\n children: ReactNode\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * I18nProvider - Wraps your app with next-intl IntlProvider\n * \n * Usage:\n * ```tsx\n * import { I18nProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <I18nProvider locale={locale} messages={messages} timeZone=\"Asia/Dhaka\">\n * <App />\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider({ \n children, \n locale, \n messages, \n timeZone = 'UTC' \n}: I18nProviderProps) {\n return (\n <IntlProvider locale={locale} messages={messages} timeZone={timeZone}>\n {children}\n </IntlProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SWRConfig } from 'swr'\n\ninterface SWRProviderProps {\n children: ReactNode\n}\n\nconst DEFAULT_SWR_CONFIG = {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000,\n focusThrottleInterval: 300000,\n}\n\n/**\n * SWRProvider - Wraps your app with optimized SWR config\n * \n * Default config:\n * - revalidateOnFocus: false (no refresh on window focus)\n * - revalidateOnReconnect: true (refresh when network reconnects)\n * - dedupingInterval: 60s (deduplicate requests within 60s)\n * - focusThrottleInterval: 5min (throttle focus revalidation)\n * \n * Usage:\n * ```tsx\n * import { SWRProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <SWRProvider>\n * <App />\n * </SWRProvider>\n * ```\n */\nexport function SWRProvider({ children }: SWRProviderProps) {\n return (\n <SWRConfig value={{ fetcher: (url) => fetch(url).then(r => r.json()), ...DEFAULT_SWR_CONFIG }}>\n {children}\n </SWRConfig>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { AuthProvider } from './auth-provider'\nimport { I18nProvider } from './i18n-provider'\nimport { SWRProvider } from './swr-provider'\n\ninterface RootProviderProps {\n children: ReactNode\n session?: any\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * RootProvider - Single provider that combines Auth + I18n + SWR\n * \n * Usage in layout.tsx:\n * ```tsx\n * import { RootProvider } from '@webdevarif/dashui-setup'\n * \n * export default function RootLayout({ \n * children, \n * params: { locale } \n * }: {\n * children: React.ReactNode\n * params: { locale: string }\n * }) {\n * const session = await auth()\n * const messages = await import(`../../messages/${locale}.json`)\n * \n * return (\n * <html lang={locale}>\n * <body>\n * <RootProvider \n * session={session}\n * locale={locale}\n * messages={messages.default}\n * >\n * {children}\n * </RootProvider>\n * </body>\n * </html>\n * )\n * }\n * ```\n */\nexport function RootProvider({\n children,\n session,\n locale,\n messages,\n timeZone,\n}: RootProviderProps) {\n return (\n <AuthProvider session={session}>\n <I18nProvider locale={locale} messages={messages} timeZone={timeZone}>\n <SWRProvider>\n {children}\n </SWRProvider>\n </I18nProvider>\n </AuthProvider>\n )\n}\n","import { useSession } from 'next-auth/react'\n\n/**\n * useAuth - Hook to access current session and auth methods\n * \n * Returns the NextAuth useSession hook result\n * \n * Usage:\n * ```tsx\n * import { useAuth } from '@webdevarif/dashui-setup/hooks'\n * \n * function Profile() {\n * const { data: session, status } = useAuth()\n * \n * if (status === 'loading') return <div>Loading...</div>\n * if (status === 'unauthenticated') return <div>Not logged in</div>\n * \n * return <div>Welcome {session?.user?.name}</div>\n * }\n * ```\n */\nexport function useAuth() {\n return useSession()\n}\n","import { useIntl } from 'next-intl'\n\n/**\n * useI18n - Hook to access translations\n * \n * Returns the next-intl useIntl hook result\n * \n * Usage:\n * ```tsx\n * import { useI18n } from '@webdevarif/dashui-setup/hooks'\n * \n * function Header() {\n * const t = useI18n()\n * \n * return <h1>{t('home.title')}</h1>\n * }\n * ```\n */\nexport function useI18n() {\n return useIntl()\n}\n","import useSWR from 'swr'\n\n/**\n * useFetch - Simplified hook for data fetching with SWR\n * \n * Returns SWR hook result with built-in error handling\n * \n * Usage:\n * ```tsx\n * import { useFetch } from '@webdevarif/dashui-setup/hooks'\n * \n * function UserList() {\n * const { data, isLoading, error } = useFetch('/api/users')\n * \n * if (isLoading) return <div>Loading...</div>\n * if (error) return <div>Error: {error.message}</div>\n * \n * return (\n * <ul>\n * {data?.map(user => <li key={user.id}>{user.name}</li>)}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useFetch<T = any>(\n url: string | null | undefined,\n options?: any\n) {\n const { data, error, isLoading } = useSWR<T>(url, options)\n\n return {\n data,\n isLoading,\n error,\n isError: !!error,\n }\n}\n","import { PrismaClient } from '@prisma/client'\n\n/**\n * Prisma Singleton - Reuse PrismaClient across requests\n * \n * In development: Hot reload can create multiple PrismaClient instances\n * This singleton pattern prevents connection pool exhaustion\n * \n * Usage in lib/prisma.ts:\n * ```tsx\n * export { prisma } from '@webdevarif/dashui-setup/lib'\n * ```\n * \n * Then use in API routes:\n * ```tsx\n * import { prisma } from '@/lib/prisma'\n * \n * export async function GET() {\n * const users = await prisma.user.findMany()\n * return Response.json(users)\n * }\n * ```\n */\n\nconst globalForPrisma = global as unknown as { prisma: PrismaClient }\n\nexport const prisma =\n globalForPrisma.prisma ||\n new PrismaClient({\n log: process.env.NODE_ENV === 'development' ? ['query'] : [],\n })\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"mappings":"AAGA,OAAS,mBAAAA,MAAuB,kBAqB5B,cAAAC,MAAA,oBAFG,SAASC,EAAa,CAAE,SAAAC,EAAU,QAAAC,CAAQ,EAAsB,CACrE,OACEH,EAACD,EAAA,CAAgB,QAASI,EACvB,SAAAD,EACH,CAEJ,CCzBA,OAAS,gBAAAE,MAAoB,YA4BzB,cAAAC,MAAA,oBAPG,SAASC,EAAa,CAC3B,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,KACb,EAAsB,CACpB,OACEL,EAACD,EAAA,CAAa,OAAQI,EAAQ,SAAUC,EAAU,SAAUC,EACzD,SAAAH,EACH,CAEJ,CChCA,OAAS,aAAAI,MAAiB,MAiCtB,cAAAC,MAAA,oBA3BJ,IAAMC,EAAqB,CACzB,kBAAmB,GACnB,sBAAuB,GACvB,iBAAkB,IAClB,sBAAuB,GACzB,EAoBO,SAASC,EAAY,CAAE,SAAAC,CAAS,EAAqB,CAC1D,OACEH,EAACD,EAAA,CAAU,MAAO,CAAE,QAAUK,GAAQ,MAAMA,CAAG,EAAE,KAAKC,GAAKA,EAAE,KAAK,CAAC,EAAG,GAAGJ,CAAmB,EACzF,SAAAE,EACH,CAEJ,CCkBQ,cAAAG,MAAA,oBAVD,SAASC,EAAa,CAC3B,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAsB,CACpB,OACEN,EAACO,EAAA,CAAa,QAASJ,EACrB,SAAAH,EAACQ,EAAA,CAAa,OAAQJ,EAAQ,SAAUC,EAAU,SAAUC,EAC1D,SAAAN,EAACS,EAAA,CACE,SAAAP,EACH,EACF,EACF,CAEJ,CChEA,OAAS,cAAAQ,MAAkB,kBAqBpB,SAASC,GAAU,CACxB,OAAOD,EAAW,CACpB,CCvBA,OAAS,WAAAE,MAAe,YAkBjB,SAASC,GAAU,CACxB,OAAOD,EAAQ,CACjB,CCpBA,OAAOE,MAAY,MAyBZ,SAASC,EACdC,EACAC,EACA,CACA,GAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,UAAAC,CAAU,EAAIN,EAAUE,EAAKC,CAAO,EAEzD,MAAO,CACL,KAAAC,EACA,UAAAE,EACA,MAAAD,EACA,QAAS,CAAC,CAACA,CACb,CACF,CCrCA,OAAS,gBAAAE,MAAoB,iBAwB7B,IAAMC,EAAkB,OAEXC,EACXD,EAAgB,QAChB,IAAID,EAAa,CACf,IAAK,QAAQ,IAAI,WAAa,cAAgB,CAAC,OAAO,EAAI,CAAC,CAC7D,CAAC,EAEC,QAAQ,IAAI,WAAa,eAAcC,EAAgB,OAASC","names":["SessionProvider","jsx","AuthProvider","children","session","IntlProvider","jsx","I18nProvider","children","locale","messages","timeZone","SWRConfig","jsx","DEFAULT_SWR_CONFIG","SWRProvider","children","url","r","jsx","RootProvider","children","session","locale","messages","timeZone","AuthProvider","I18nProvider","SWRProvider","useSession","useAuth","useIntl","useI18n","useSWR","useFetch","url","options","data","error","isLoading","PrismaClient","globalForPrisma","prisma"]}
|
package/dist/lib.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var E=(o,r)=>{for(var e in r)i(o,e,{get:r[e],enumerable:!0})},N=(o,r,e,m)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of l(r))!c.call(o,s)&&s!==e&&i(o,s,{get:()=>r[s],enumerable:!(m=t(r,s))||m.enumerable});return o};var f=o=>N(i({},"__esModule",{value:!0}),o);var g={};E(g,{prisma:()=>a});module.exports=f(g);var n=require("@prisma/client"),p=global,a=p.prisma||new n.PrismaClient({log:process.env.NODE_ENV==="development"?["query"]:[]});process.env.NODE_ENV!=="production"&&(p.prisma=a);0&&(module.exports={prisma});
|
|
2
|
+
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/index.ts","../src/lib/prisma.ts"],"sourcesContent":["export { prisma } from './prisma'\n","import { PrismaClient } from '@prisma/client'\n\n/**\n * Prisma Singleton - Reuse PrismaClient across requests\n * \n * In development: Hot reload can create multiple PrismaClient instances\n * This singleton pattern prevents connection pool exhaustion\n * \n * Usage in lib/prisma.ts:\n * ```tsx\n * export { prisma } from '@webdevarif/dashui-setup/lib'\n * ```\n * \n * Then use in API routes:\n * ```tsx\n * import { prisma } from '@/lib/prisma'\n * \n * export async function GET() {\n * const users = await prisma.user.findMany()\n * return Response.json(users)\n * }\n * ```\n */\n\nconst globalForPrisma = global as unknown as { prisma: PrismaClient }\n\nexport const prisma =\n globalForPrisma.prisma ||\n new PrismaClient({\n log: process.env.NODE_ENV === 'development' ? ['query'] : [],\n })\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,IAAA,eAAAC,EAAAH,GCAA,IAAAI,EAA6B,0BAwBvBC,EAAkB,OAEXC,EACXD,EAAgB,QAChB,IAAI,eAAa,CACf,IAAK,QAAQ,IAAI,WAAa,cAAgB,CAAC,OAAO,EAAI,CAAC,CAC7D,CAAC,EAEC,QAAQ,IAAI,WAAa,eAAcA,EAAgB,OAASC","names":["lib_exports","__export","prisma","__toCommonJS","import_client","globalForPrisma","prisma"]}
|
package/dist/lib.mjs
ADDED
package/dist/lib.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client'\n\n/**\n * Prisma Singleton - Reuse PrismaClient across requests\n * \n * In development: Hot reload can create multiple PrismaClient instances\n * This singleton pattern prevents connection pool exhaustion\n * \n * Usage in lib/prisma.ts:\n * ```tsx\n * export { prisma } from '@webdevarif/dashui-setup/lib'\n * ```\n * \n * Then use in API routes:\n * ```tsx\n * import { prisma } from '@/lib/prisma'\n * \n * export async function GET() {\n * const users = await prisma.user.findMany()\n * return Response.json(users)\n * }\n * ```\n */\n\nconst globalForPrisma = global as unknown as { prisma: PrismaClient }\n\nexport const prisma =\n globalForPrisma.prisma ||\n new PrismaClient({\n log: process.env.NODE_ENV === 'development' ? ['query'] : [],\n })\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"mappings":"AAAA,OAAS,gBAAAA,MAAoB,iBAwB7B,IAAMC,EAAkB,OAEXC,EACXD,EAAgB,QAChB,IAAID,EAAa,CACf,IAAK,QAAQ,IAAI,WAAa,cAAgB,CAAC,OAAO,EAAI,CAAC,CAC7D,CAAC,EAEC,QAAQ,IAAI,WAAa,eAAcC,EAAgB,OAASC","names":["PrismaClient","globalForPrisma","prisma"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var I=(e,r)=>{for(var o in r)c(e,o,{get:r[o],enumerable:!0})},S=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of h(r))!g.call(e,i)&&i!==o&&c(e,i,{get:()=>r[i],enumerable:!(t=u(r,i))||t.enumerable});return e};var N=e=>S(c({},"__esModule",{value:!0}),e);var A={};I(A,{AuthProvider:()=>n,I18nProvider:()=>s,RootProvider:()=>R,SWRProvider:()=>d});module.exports=N(A);var v=require("next-auth/react"),a=require("react/jsx-runtime");function n({children:e,session:r}){return(0,a.jsx)(v.SessionProvider,{session:r,children:e})}var f=require("next-intl"),m=require("react/jsx-runtime");function s({children:e,locale:r,messages:o,timeZone:t="UTC"}){return(0,m.jsx)(f.IntlProvider,{locale:r,messages:o,timeZone:t,children:e})}var p=require("swr"),l=require("react/jsx-runtime"),W={revalidateOnFocus:!1,revalidateOnReconnect:!0,dedupingInterval:6e4,focusThrottleInterval:3e5};function d({children:e}){return(0,l.jsx)(p.SWRConfig,{value:{fetcher:r=>fetch(r).then(o=>o.json()),...W},children:e})}var P=require("react/jsx-runtime");function R({children:e,session:r,locale:o,messages:t,timeZone:i}){return(0,P.jsx)(n,{session:r,children:(0,P.jsx)(s,{locale:o,messages:t,timeZone:i,children:(0,P.jsx)(d,{children:e})})})}0&&(module.exports={AuthProvider,I18nProvider,RootProvider,SWRProvider});
|
|
2
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/index.ts","../src/providers/auth-provider.tsx","../src/providers/i18n-provider.tsx","../src/providers/swr-provider.tsx","../src/providers/root-provider.tsx"],"sourcesContent":["export { AuthProvider } from './auth-provider'\nexport { I18nProvider } from './i18n-provider'\nexport { SWRProvider } from './swr-provider'\nexport { RootProvider } from './root-provider'\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SessionProvider } from 'next-auth/react'\n\ninterface AuthProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * AuthProvider - Wraps your app with NextAuth SessionProvider\n * \n * Usage:\n * ```tsx\n * import { AuthProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <AuthProvider session={session}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function AuthProvider({ children, session }: AuthProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n </SessionProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { IntlProvider } from 'next-intl'\n\ninterface I18nProviderProps {\n children: ReactNode\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * I18nProvider - Wraps your app with next-intl IntlProvider\n * \n * Usage:\n * ```tsx\n * import { I18nProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <I18nProvider locale={locale} messages={messages} timeZone=\"Asia/Dhaka\">\n * <App />\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider({ \n children, \n locale, \n messages, \n timeZone = 'UTC' \n}: I18nProviderProps) {\n return (\n <IntlProvider locale={locale} messages={messages} timeZone={timeZone}>\n {children}\n </IntlProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SWRConfig } from 'swr'\n\ninterface SWRProviderProps {\n children: ReactNode\n}\n\nconst DEFAULT_SWR_CONFIG = {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000,\n focusThrottleInterval: 300000,\n}\n\n/**\n * SWRProvider - Wraps your app with optimized SWR config\n * \n * Default config:\n * - revalidateOnFocus: false (no refresh on window focus)\n * - revalidateOnReconnect: true (refresh when network reconnects)\n * - dedupingInterval: 60s (deduplicate requests within 60s)\n * - focusThrottleInterval: 5min (throttle focus revalidation)\n * \n * Usage:\n * ```tsx\n * import { SWRProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <SWRProvider>\n * <App />\n * </SWRProvider>\n * ```\n */\nexport function SWRProvider({ children }: SWRProviderProps) {\n return (\n <SWRConfig value={{ fetcher: (url) => fetch(url).then(r => r.json()), ...DEFAULT_SWR_CONFIG }}>\n {children}\n </SWRConfig>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { AuthProvider } from './auth-provider'\nimport { I18nProvider } from './i18n-provider'\nimport { SWRProvider } from './swr-provider'\n\ninterface RootProviderProps {\n children: ReactNode\n session?: any\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * RootProvider - Single provider that combines Auth + I18n + SWR\n * \n * Usage in layout.tsx:\n * ```tsx\n * import { RootProvider } from '@webdevarif/dashui-setup'\n * \n * export default function RootLayout({ \n * children, \n * params: { locale } \n * }: {\n * children: React.ReactNode\n * params: { locale: string }\n * }) {\n * const session = await auth()\n * const messages = await import(`../../messages/${locale}.json`)\n * \n * return (\n * <html lang={locale}>\n * <body>\n * <RootProvider \n * session={session}\n * locale={locale}\n * messages={messages.default}\n * >\n * {children}\n * </RootProvider>\n * </body>\n * </html>\n * )\n * }\n * ```\n */\nexport function RootProvider({\n children,\n session,\n locale,\n messages,\n timeZone,\n}: RootProviderProps) {\n return (\n <AuthProvider session={session}>\n <I18nProvider locale={locale} messages={messages} timeZone={timeZone}>\n <SWRProvider>\n {children}\n </SWRProvider>\n </I18nProvider>\n </AuthProvider>\n )\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,EAAA,iBAAAC,EAAA,iBAAAC,EAAA,gBAAAC,IAAA,eAAAC,EAAAN,GCGA,IAAAO,EAAgC,2BAqB5BC,EAAA,6BAFG,SAASC,EAAa,CAAE,SAAAC,EAAU,QAAAC,CAAQ,EAAsB,CACrE,SACE,OAAC,mBAAgB,QAASA,EACvB,SAAAD,EACH,CAEJ,CCzBA,IAAAE,EAA6B,qBA4BzBC,EAAA,6BAPG,SAASC,EAAa,CAC3B,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,KACb,EAAsB,CACpB,SACE,OAAC,gBAAa,OAAQF,EAAQ,SAAUC,EAAU,SAAUC,EACzD,SAAAH,EACH,CAEJ,CChCA,IAAAI,EAA0B,eAiCtBC,EAAA,6BA3BEC,EAAqB,CACzB,kBAAmB,GACnB,sBAAuB,GACvB,iBAAkB,IAClB,sBAAuB,GACzB,EAoBO,SAASC,EAAY,CAAE,SAAAC,CAAS,EAAqB,CAC1D,SACE,OAAC,aAAU,MAAO,CAAE,QAAUC,GAAQ,MAAMA,CAAG,EAAE,KAAKC,GAAKA,EAAE,KAAK,CAAC,EAAG,GAAGJ,CAAmB,EACzF,SAAAE,EACH,CAEJ,CCkBQ,IAAAG,EAAA,6BAVD,SAASC,EAAa,CAC3B,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAsB,CACpB,SACE,OAACC,EAAA,CAAa,QAASJ,EACrB,mBAACK,EAAA,CAAa,OAAQJ,EAAQ,SAAUC,EAAU,SAAUC,EAC1D,mBAACG,EAAA,CACE,SAAAP,EACH,EACF,EACF,CAEJ","names":["providers_exports","__export","AuthProvider","I18nProvider","RootProvider","SWRProvider","__toCommonJS","import_react","import_jsx_runtime","AuthProvider","children","session","import_next_intl","import_jsx_runtime","I18nProvider","children","locale","messages","timeZone","import_swr","import_jsx_runtime","DEFAULT_SWR_CONFIG","SWRProvider","children","url","r","import_jsx_runtime","RootProvider","children","session","locale","messages","timeZone","AuthProvider","I18nProvider","SWRProvider"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{SessionProvider as c}from"next-auth/react";import{jsx as v}from"react/jsx-runtime";function t({children:r,session:e}){return v(c,{session:e,children:r})}import{IntlProvider as a}from"next-intl";import{jsx as f}from"react/jsx-runtime";function n({children:r,locale:e,messages:o,timeZone:i="UTC"}){return f(a,{locale:e,messages:o,timeZone:i,children:r})}import{SWRConfig as m}from"swr";import{jsx as l}from"react/jsx-runtime";var p={revalidateOnFocus:!1,revalidateOnReconnect:!0,dedupingInterval:6e4,focusThrottleInterval:3e5};function s({children:r}){return l(m,{value:{fetcher:e=>fetch(e).then(o=>o.json()),...p},children:r})}import{jsx as d}from"react/jsx-runtime";function R({children:r,session:e,locale:o,messages:i,timeZone:P}){return d(t,{session:e,children:d(n,{locale:o,messages:i,timeZone:P,children:d(s,{children:r})})})}export{t as AuthProvider,n as I18nProvider,R as RootProvider,s as SWRProvider};
|
|
2
|
+
//# sourceMappingURL=providers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/auth-provider.tsx","../src/providers/i18n-provider.tsx","../src/providers/swr-provider.tsx","../src/providers/root-provider.tsx"],"sourcesContent":["'use client'\n\nimport { ReactNode } from 'react'\nimport { SessionProvider } from 'next-auth/react'\n\ninterface AuthProviderProps {\n children: ReactNode\n session?: any\n}\n\n/**\n * AuthProvider - Wraps your app with NextAuth SessionProvider\n * \n * Usage:\n * ```tsx\n * import { AuthProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <AuthProvider session={session}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function AuthProvider({ children, session }: AuthProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n </SessionProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { IntlProvider } from 'next-intl'\n\ninterface I18nProviderProps {\n children: ReactNode\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * I18nProvider - Wraps your app with next-intl IntlProvider\n * \n * Usage:\n * ```tsx\n * import { I18nProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <I18nProvider locale={locale} messages={messages} timeZone=\"Asia/Dhaka\">\n * <App />\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider({ \n children, \n locale, \n messages, \n timeZone = 'UTC' \n}: I18nProviderProps) {\n return (\n <IntlProvider locale={locale} messages={messages} timeZone={timeZone}>\n {children}\n </IntlProvider>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { SWRConfig } from 'swr'\n\ninterface SWRProviderProps {\n children: ReactNode\n}\n\nconst DEFAULT_SWR_CONFIG = {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000,\n focusThrottleInterval: 300000,\n}\n\n/**\n * SWRProvider - Wraps your app with optimized SWR config\n * \n * Default config:\n * - revalidateOnFocus: false (no refresh on window focus)\n * - revalidateOnReconnect: true (refresh when network reconnects)\n * - dedupingInterval: 60s (deduplicate requests within 60s)\n * - focusThrottleInterval: 5min (throttle focus revalidation)\n * \n * Usage:\n * ```tsx\n * import { SWRProvider } from '@webdevarif/dashui-setup/providers'\n * \n * <SWRProvider>\n * <App />\n * </SWRProvider>\n * ```\n */\nexport function SWRProvider({ children }: SWRProviderProps) {\n return (\n <SWRConfig value={{ fetcher: (url) => fetch(url).then(r => r.json()), ...DEFAULT_SWR_CONFIG }}>\n {children}\n </SWRConfig>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { AuthProvider } from './auth-provider'\nimport { I18nProvider } from './i18n-provider'\nimport { SWRProvider } from './swr-provider'\n\ninterface RootProviderProps {\n children: ReactNode\n session?: any\n locale: string\n messages: Record<string, any>\n timeZone?: string\n}\n\n/**\n * RootProvider - Single provider that combines Auth + I18n + SWR\n * \n * Usage in layout.tsx:\n * ```tsx\n * import { RootProvider } from '@webdevarif/dashui-setup'\n * \n * export default function RootLayout({ \n * children, \n * params: { locale } \n * }: {\n * children: React.ReactNode\n * params: { locale: string }\n * }) {\n * const session = await auth()\n * const messages = await import(`../../messages/${locale}.json`)\n * \n * return (\n * <html lang={locale}>\n * <body>\n * <RootProvider \n * session={session}\n * locale={locale}\n * messages={messages.default}\n * >\n * {children}\n * </RootProvider>\n * </body>\n * </html>\n * )\n * }\n * ```\n */\nexport function RootProvider({\n children,\n session,\n locale,\n messages,\n timeZone,\n}: RootProviderProps) {\n return (\n <AuthProvider session={session}>\n <I18nProvider locale={locale} messages={messages} timeZone={timeZone}>\n <SWRProvider>\n {children}\n </SWRProvider>\n </I18nProvider>\n </AuthProvider>\n )\n}\n"],"mappings":"AAGA,OAAS,mBAAAA,MAAuB,kBAqB5B,cAAAC,MAAA,oBAFG,SAASC,EAAa,CAAE,SAAAC,EAAU,QAAAC,CAAQ,EAAsB,CACrE,OACEH,EAACD,EAAA,CAAgB,QAASI,EACvB,SAAAD,EACH,CAEJ,CCzBA,OAAS,gBAAAE,MAAoB,YA4BzB,cAAAC,MAAA,oBAPG,SAASC,EAAa,CAC3B,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,KACb,EAAsB,CACpB,OACEL,EAACD,EAAA,CAAa,OAAQI,EAAQ,SAAUC,EAAU,SAAUC,EACzD,SAAAH,EACH,CAEJ,CChCA,OAAS,aAAAI,MAAiB,MAiCtB,cAAAC,MAAA,oBA3BJ,IAAMC,EAAqB,CACzB,kBAAmB,GACnB,sBAAuB,GACvB,iBAAkB,IAClB,sBAAuB,GACzB,EAoBO,SAASC,EAAY,CAAE,SAAAC,CAAS,EAAqB,CAC1D,OACEH,EAACD,EAAA,CAAU,MAAO,CAAE,QAAUK,GAAQ,MAAMA,CAAG,EAAE,KAAKC,GAAKA,EAAE,KAAK,CAAC,EAAG,GAAGJ,CAAmB,EACzF,SAAAE,EACH,CAEJ,CCkBQ,cAAAG,MAAA,oBAVD,SAASC,EAAa,CAC3B,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAsB,CACpB,OACEN,EAACO,EAAA,CAAa,QAASJ,EACrB,SAAAH,EAACQ,EAAA,CAAa,OAAQJ,EAAQ,SAAUC,EAAU,SAAUC,EAC1D,SAAAN,EAACS,EAAA,CACE,SAAAP,EACH,EACF,EACF,CAEJ","names":["SessionProvider","jsx","AuthProvider","children","session","IntlProvider","jsx","I18nProvider","children","locale","messages","timeZone","SWRConfig","jsx","DEFAULT_SWR_CONFIG","SWRProvider","children","url","r","jsx","RootProvider","children","session","locale","messages","timeZone","AuthProvider","I18nProvider","SWRProvider"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webdevarif/dashui-setup",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Zero-config providers, hooks, and middleware for Next.js + NextAuth + Next-intl + SWR + Prisma",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"dashui",
|
|
7
|
+
"nextjs",
|
|
8
|
+
"nextauth",
|
|
9
|
+
"next-intl",
|
|
10
|
+
"swr",
|
|
11
|
+
"prisma",
|
|
12
|
+
"setup",
|
|
13
|
+
"providers",
|
|
14
|
+
"hooks"
|
|
15
|
+
],
|
|
16
|
+
"author": "webdevarif",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"module": "./dist/index.mjs",
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/index.mjs",
|
|
25
|
+
"require": "./dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./providers": {
|
|
28
|
+
"types": "./dist/providers/index.d.ts",
|
|
29
|
+
"import": "./dist/providers/index.mjs",
|
|
30
|
+
"require": "./dist/providers/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./hooks": {
|
|
33
|
+
"types": "./dist/hooks/index.d.ts",
|
|
34
|
+
"import": "./dist/hooks/index.mjs",
|
|
35
|
+
"require": "./dist/hooks/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./middleware": {
|
|
38
|
+
"types": "./dist/middleware/index.d.ts",
|
|
39
|
+
"import": "./dist/middleware/index.mjs",
|
|
40
|
+
"require": "./dist/middleware/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./lib": {
|
|
43
|
+
"types": "./dist/lib/index.d.ts",
|
|
44
|
+
"import": "./dist/lib/index.mjs",
|
|
45
|
+
"require": "./dist/lib/index.js"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"files": [
|
|
49
|
+
"dist",
|
|
50
|
+
"templates",
|
|
51
|
+
"README.md"
|
|
52
|
+
],
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsup",
|
|
55
|
+
"dev": "tsup --watch",
|
|
56
|
+
"typecheck": "tsc --noEmit"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"next": ">=14",
|
|
60
|
+
"next-auth": ">=5",
|
|
61
|
+
"next-intl": ">=3",
|
|
62
|
+
"swr": ">=2",
|
|
63
|
+
"@prisma/client": ">=5",
|
|
64
|
+
"react": ">=18",
|
|
65
|
+
"react-dom": ">=18"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/node": "^20",
|
|
69
|
+
"@types/react": "^18",
|
|
70
|
+
"@types/react-dom": "^18",
|
|
71
|
+
"tsup": "^8.3.5",
|
|
72
|
+
"typescript": "^5"
|
|
73
|
+
},
|
|
74
|
+
"publishConfig": {
|
|
75
|
+
"access": "public"
|
|
76
|
+
}
|
|
77
|
+
}
|