UNPKG

permix

Version:

Permix is a lightweight, framework-agnostic, type-safe permissions management library for JavaScript applications on the client and server sides.

58 lines (57 loc) 1.92 kB
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 };