diff --git a/package.json b/package.json index 02bf310..2545760 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thilawyn/thilalib", - "version": "0.1.15", + "version": "0.1.16", "type": "module", "files": [ "./dist" diff --git a/src/Layers/JSONWebToken.ts b/src/Layers/JSONWebToken.ts index 0ee5d14..24bf772 100644 --- a/src/Layers/JSONWebToken.ts +++ b/src/Layers/JSONWebToken.ts @@ -1,12 +1,12 @@ import { Context, Effect, Layer } from "effect" -import jwt from "jsonwebtoken" +import type * as JWT from "jsonwebtoken" export class JSONWebToken extends Context.Tag("JSONWebToken") Effect.Effect< string, Error, @@ -15,32 +15,39 @@ export class JSONWebToken extends Context.Tag("JSONWebToken") Effect.Effect< - string | jwt.Jwt | jwt.JwtPayload, - jwt.VerifyErrors | Error, + string | JWT.Jwt | JWT.JwtPayload, + JWT.VerifyErrors | Error, never >, }>() {} -export const JSONWebTokenLive = Layer.succeed(JSONWebToken, { - sign: (payload, secretOrPrivateKey, options) => Effect.async(resume => - jwt.sign(payload, secretOrPrivateKey, options, (err, token) => { - resume(token - ? Effect.succeed(token) - : Effect.fail(err || new Error("Unknown error")) - ) - }) - ), - - verify: (token, secretOrPublicKey, options) => Effect.async(resume => - jwt.verify(token, secretOrPublicKey, options, (err, decoded) => { - resume(decoded - ? Effect.succeed(decoded) - : Effect.fail(err || new Error("Unknown error")) - ) - }) - ), +const importJWT = Effect.tryPromise({ + try: () => import("jsonwebtoken"), + catch: cause => new Error("Could not import 'jsonwebtoken'. Make sure it is installed.", { cause }), }) + +export const JSONWebTokenLive = Layer.effect(JSONWebToken, importJWT.pipe( + Effect.map(jwt => JSONWebToken.of({ + sign: (payload, secretOrPrivateKey, options) => Effect.async(resume => + jwt.sign(payload, secretOrPrivateKey, options, (err, token) => { + resume(token + ? Effect.succeed(token) + : Effect.fail(err || new Error("Unknown error")) + ) + }) + ), + + verify: (token, secretOrPublicKey, options) => Effect.async(resume => + jwt.verify(token, secretOrPublicKey, options, (err, decoded) => { + resume(decoded + ? Effect.succeed(decoded) + : Effect.fail(err || new Error("Unknown error")) + ) + }) + ), + })) +)) diff --git a/src/Schema/index.ts b/src/Schema/index.ts index a66cc17..dae09dc 100644 --- a/src/Schema/index.ts +++ b/src/Schema/index.ts @@ -8,4 +8,5 @@ export * from "./MutableClass" export * from "./MutableTaggedClass" export * from "./Tag" export * from "./TaggedClass" +export * as TanStackForm from "./TanStackForm" export * from "./toJsonifiable"