@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 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
@@ -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
@@ -0,0 +1,2 @@
1
+ import{PrismaClient as s}from"@prisma/client";var r=global,o=r.prisma||new s({log:process.env.NODE_ENV==="development"?["query"]:[]});process.env.NODE_ENV!=="production"&&(r.prisma=o);export{o as prisma};
2
+ //# sourceMappingURL=lib.mjs.map
@@ -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
+ }