permix
Version:
Permix is a lightweight, framework-agnostic, type-safe permissions management library for JavaScript applications on the client and server sides.
40 lines (39 loc) • 2.15 kB
text/typescript
import { A as Definition, C as Rules, S as DehydratedState, _ as PermixHooks, c as PermixRuleNotDefinedError, g as Permix, l as CheckArgs, s as PermixNotReadyError, v as RulesPaths } from "../index-BYcbfVQ7.mjs";
import { Context, Effect, Layer } from "effect";
//#region src/effect/permix.d.ts
interface PermixOptions {
/**
* Unique identifier for the Effect Context tag. Defaults to a unique string
* so multiple `createPermix` calls produce isolated instances.
*/
id?: string;
}
/**
* Create an Effect-compatible Permix factory.
*
* Returns a Context `Tag`, Layer constructors, and Effect-returning helpers
* that you can use in any Effect program — server or client.
*
* @link https://permix.letstri.dev/docs/integrations/effect
*/
declare function createPermix<D extends Definition>(options?: PermixOptions): {
Tag: Context.Tag<Permix<D>, Permix<D>>;
layer: (rules?: Rules<D>) => Layer.Layer<Permix<D>, never, never>;
layerSetup: <E, R>(rules: Effect.Effect<Rules<D>, E, R>) => Layer.Layer<Permix<D>, E, R>;
setup: (rules: Rules<D>) => Effect.Effect<void, never, Permix<D>>;
check: (...args: CheckArgs<D>) => Effect.Effect<boolean, PermixNotReadyError | PermixRuleNotDefinedError, Permix<D>>;
dehydrate: () => Effect.Effect<DehydratedState<D>, PermixNotReadyError, Permix<D>>;
hydrate: (state: DehydratedState<D>) => Effect.Effect<void, PermixNotReadyError, Permix<D>>;
isReady: () => Effect.Effect<boolean, never, Permix<D>>;
isReadyAsync: () => Effect.Effect<void, never, Permix<D>>;
getRules: () => Effect.Effect<Rules<D> | null, never, Permix<D>>;
hook: <K extends keyof PermixHooks<D>>(name: K, fn: PermixHooks<D>[K]) => Effect.Effect<() => void, never, Permix<D>>;
hookOnce: <K extends keyof PermixHooks<D>>(name: K, fn: PermixHooks<D>[K]) => Effect.Effect<void, never, Permix<D>>;
template: <T = void>(rules: Rules<D> | ((param: T) => Rules<D>)) => (param: T) => Rules<D>;
id: string;
$inferDefinition: D;
$inferPath: RulesPaths<D>;
};
type EffectPermix<D extends Definition> = ReturnType<typeof createPermix<D>>;
//#endregion
export { EffectPermix, PermixOptions, createPermix };