import { A as Definition, C as Rules, S as DehydratedState, _ as PermixHooks, g as Permix, l as CheckArgs, v as RulesPaths } from "../index-BYcbfVQ7.mjs";

//#region src/next/permix.d.ts
/**
 * Create a per-request Permix instance for Next.js App Router.
 *
 * Backed by React's `cache()`, so all server components, route handlers, and
 * server actions within the same request share one instance while concurrent
 * requests stay fully isolated.
 *
 * @example
 * ```ts
 * // lib/permix.ts
 * import { createPermix } from 'permix/next'
 *
 * export const permix = createPermix<{
 *   post: ['create', 'read', 'update', 'delete']
 * }>()
 * ```
 *
 * ```tsx
 * // app/layout.tsx (server component)
 * import { permix } from '@/lib/permix'
 * import { getSession } from '@/lib/auth'
 *
 * export default async function RootLayout({ children }) {
 *   const session = await getSession()
 *
 *   permix.setup({
 *     post: {
 *       create: !!session,
 *       read: true,
 *       update: session?.role === 'admin',
 *       delete: session?.role === 'admin',
 *     },
 *   })
 *
 *   return <Providers state={permix.dehydrate()}>{children}</Providers>
 * }
 * ```
 *
 * @link https://permix.letstri.dev/docs/integrations/next
 */
declare function createPermix<D extends Definition>(): {
  setup: (rules: Rules<D>) => void;
  check: (...args: CheckArgs<D>) => boolean;
  dehydrate: () => DehydratedState<D>;
  get: () => Permix<D>;
  getRules: () => Rules<D> | null;
  template: <T = void>(rules: Rules<D> | ((param: T) => Rules<D>)) => (param: T) => Rules<D>;
  hook: <K extends keyof PermixHooks<D>>(name: K, fn: PermixHooks<D>[K]) => () => void;
  hookOnce: <K extends keyof PermixHooks<D>>(name: K, fn: PermixHooks<D>[K]) => void;
  $inferDefinition: D;
  $inferPath: RulesPaths<D>;
};
type NextPermix<D extends Definition> = ReturnType<typeof createPermix<D>>;
//#endregion
export { NextPermix, createPermix };