UNPKG

permix

Version:

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

82 lines (81 loc) 2.1 kB
import { createPermix as createPermix$1, createTemplate } from "../core/index.mjs"; import { Context, Effect, Layer } from "effect"; //#region src/effect/permix.ts let counter = 0; /** * 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 */ function createPermix(options = {}) { const id = options.id ?? `permix/effect#${counter++}`; const Tag = Context.GenericTag(id); function layer(rules) { return Layer.sync(Tag, () => createPermix$1(rules)); } function layerSetup(rules) { return Layer.effect(Tag, Effect.map(rules, (r) => createPermix$1(r))); } function setup(rules) { return Effect.map(Tag, (instance) => instance.setup(rules)); } function check(...args) { return Effect.flatMap(Tag, (instance) => Effect.try({ try: () => instance.check(...args), catch: (e) => e })); } function dehydrate() { return Effect.flatMap(Tag, (instance) => Effect.try({ try: () => instance.dehydrate(), catch: (e) => e })); } function hydrate(state) { return Effect.flatMap(Tag, (instance) => Effect.try({ try: () => instance.hydrate(state), catch: (e) => e })); } function isReady() { return Effect.map(Tag, (instance) => instance.isReady()); } function isReadyAsync() { return Effect.flatMap(Tag, (instance) => Effect.promise(() => instance.isReadyAsync())); } function getRules() { return Effect.map(Tag, (instance) => instance.getRules()); } function hook(name, fn) { return Effect.map(Tag, (instance) => instance.hook(name, fn)); } function hookOnce(name, fn) { return Effect.map(Tag, (instance) => instance.hookOnce(name, fn)); } function template(rules) { return createTemplate(rules); } return { Tag, layer, layerSetup, setup, check, dehydrate, hydrate, isReady, isReadyAsync, getRules, hook, hookOnce, template, id, $inferDefinition: void 0, $inferPath: void 0 }; } //#endregion export { createPermix };