@effect/rpc
Advanced tools
Comparing version 0.12.0 to 0.12.1
@@ -34,56 +34,62 @@ import * as Schema from '@effect/schema/Schema'; | ||
const hasSetup = ("__setup" in router.handlers); | ||
const handler = (runtimeRef, scope) => request => pipe(Effect.Do, Effect.bind("codecs", () => Either.fromNullable(codecsMap[request._tag], () => RpcNotFound({ | ||
method: request._tag ?? "" | ||
}))), Effect.bind("handler", () => Either.fromNullable(handlerMap[request._tag], () => RpcNotFound({ | ||
method: request._tag | ||
}))), Effect.bind("input", ({ | ||
codecs | ||
}) => codecs.input ? codecs.input(request.input) : Effect.unit), Effect.flatMap(({ | ||
codecs, | ||
handler, | ||
input | ||
}) => { | ||
const effect = Effect.isEffect(handler) ? handler : handler(input); | ||
if (request._tag === "__setup" && runtimeRef && scope) { | ||
return pipe(Ref.get(runtimeRef), Effect.flatMap(Option.match({ | ||
onNone: () => Effect.tap(Layer.isLayer(effect) ? Layer.toRuntime(effect) : Effect.flatMap(effect, context => Effect.provide(Effect.runtime(), context)), _ => Ref.set(runtimeRef, Option.some(_))), | ||
onSome: () => Effect.unit | ||
})), Effect.asUnit, Effect.either, Effect.provideService(Scope, scope)); | ||
} | ||
return pipe(runtimeRef ? Effect.flatMap(Ref.get(runtimeRef), Option.match({ | ||
onNone: () => Effect.fail(RpcTransportError({ | ||
error: "__setup not called" | ||
})), | ||
onSome: runtime => Effect.provide(effect, runtime) | ||
})) : effect, Effect.matchEffect({ | ||
onFailure: error => Effect.map(codecs.error(error), Either.left), | ||
onSuccess: value => codecs.output ? Effect.map(codecs.output(value), Either.right) : Effect.succeed(Either.right(null)) | ||
})); | ||
}), Effect.matchCause({ | ||
onFailure: cause => ({ | ||
_tag: "Error", | ||
error: Either.match(Cause.failureOrCause(cause), { | ||
onLeft: identity, | ||
onRight: cause => RpcTransportError({ | ||
error: Cause.pretty(cause) | ||
const handler = (runtimeRef, scope) => request => { | ||
const responseEffect = pipe(Effect.Do, Effect.bind("codecs", () => Either.fromNullable(codecsMap[request._tag], () => RpcNotFound({ | ||
method: request._tag ?? "" | ||
}))), Effect.bind("handler", () => Either.fromNullable(handlerMap[request._tag], () => RpcNotFound({ | ||
method: request._tag | ||
}))), Effect.bind("input", ({ | ||
codecs | ||
}) => codecs.input ? codecs.input(request.input) : Effect.unit), Effect.flatMap(({ | ||
codecs, | ||
handler, | ||
input | ||
}) => { | ||
const effect = Effect.isEffect(handler) ? handler : handler(input); | ||
if (request._tag === "__setup" && runtimeRef && scope) { | ||
return pipe(Ref.get(runtimeRef), Effect.flatMap(Option.match({ | ||
onNone: () => Effect.tap(Layer.isLayer(effect) ? Layer.toRuntime(effect) : Effect.flatMap(effect, context => Effect.provide(Effect.runtime(), context)), _ => Ref.set(runtimeRef, Option.some(_))), | ||
onSome: () => Effect.unit | ||
})), Effect.asUnit, Effect.either, Effect.provideService(Scope, scope)); | ||
} | ||
return Effect.matchEffect(effect, { | ||
onFailure: error => Effect.map(codecs.error(error), Either.left), | ||
onSuccess: value => codecs.output ? Effect.map(codecs.output(value), Either.right) : Effect.succeed(Either.right(void 0)) | ||
}); | ||
}), Effect.matchCause({ | ||
onFailure: cause => ({ | ||
_tag: "Error", | ||
error: Either.match(Cause.failureOrCause(cause), { | ||
onLeft: identity, | ||
onRight: cause => RpcTransportError({ | ||
error: Cause.pretty(cause) | ||
}) | ||
}) | ||
}) | ||
}), | ||
onSuccess: Either.match({ | ||
onLeft: error => ({ | ||
_tag: "Error", | ||
error | ||
}), | ||
onRight: value => ({ | ||
_tag: "Success", | ||
value | ||
onSuccess: Either.match({ | ||
onLeft: error => ({ | ||
_tag: "Error", | ||
error | ||
}), | ||
onRight: value => ({ | ||
_tag: "Success", | ||
value | ||
}) | ||
}) | ||
}) | ||
}), Effect.withSpan(`${router.options.spanPrefix}.${request._tag}`, { | ||
parent: Tracer.externalSpan({ | ||
spanId: request.spanId, | ||
traceId: request.traceId, | ||
sampled: request.sampled | ||
}) | ||
})); | ||
}), Effect.withSpan(`${router.options.spanPrefix}.${request._tag}`, { | ||
parent: Tracer.externalSpan({ | ||
spanId: request.spanId, | ||
traceId: request.traceId, | ||
sampled: request.sampled | ||
}) | ||
})); | ||
if (request._tag !== "__setup" && runtimeRef !== undefined) { | ||
return Effect.flatMap(Ref.get(runtimeRef), Option.match({ | ||
onNone: () => Effect.fail(RpcTransportError({ | ||
error: "__setup not called" | ||
})), | ||
onSome: runtime => Effect.provide(responseEffect, runtime) | ||
})); | ||
} | ||
return responseEffect; | ||
}; | ||
if (!hasSetup) { | ||
@@ -90,0 +96,0 @@ return handler(); |
{ | ||
"name": "@effect/rpc", | ||
"version": "0.12.0", | ||
"version": "0.12.1", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "dist/effect-rpc.cjs.js", |
@@ -8,3 +8,3 @@ 'use strict'; | ||
var Layer = require('effect/Layer'); | ||
var server = require('../../dist/server-4e6564df.cjs.dev.js'); | ||
var server = require('../../dist/server-8b939413.cjs.dev.js'); | ||
require('@effect/schema/Schema'); | ||
@@ -11,0 +11,0 @@ require('effect'); |
@@ -8,3 +8,3 @@ 'use strict'; | ||
var Layer = require('effect/Layer'); | ||
var server = require('../../dist/server-8b45d4f1.cjs.prod.js'); | ||
var server = require('../../dist/server-53da2064.cjs.prod.js'); | ||
require('@effect/schema/Schema'); | ||
@@ -11,0 +11,0 @@ require('effect'); |
@@ -5,3 +5,3 @@ 'use strict'; | ||
var server = require('../../dist/server-4e6564df.cjs.dev.js'); | ||
var server = require('../../dist/server-8b939413.cjs.dev.js'); | ||
require('@effect/schema/Schema'); | ||
@@ -8,0 +8,0 @@ require('effect'); |
@@ -5,3 +5,3 @@ 'use strict'; | ||
var server = require('../../dist/server-8b45d4f1.cjs.prod.js'); | ||
var server = require('../../dist/server-53da2064.cjs.prod.js'); | ||
require('@effect/schema/Schema'); | ||
@@ -8,0 +8,0 @@ require('effect'); |
@@ -72,4 +72,4 @@ import * as Schema from "@effect/schema/Schema" | ||
) => | ||
(request: RpcRequest.Payload) => | ||
pipe( | ||
(request: RpcRequest.Payload) => { | ||
const responseEffect = pipe( | ||
Effect.Do, | ||
@@ -127,23 +127,9 @@ Effect.bind( | ||
return pipe( | ||
runtimeRef | ||
? Effect.flatMap( | ||
Ref.get(runtimeRef), | ||
Option.match({ | ||
onNone: () => | ||
Effect.fail( | ||
RpcTransportError({ error: "__setup not called" }) | ||
), | ||
onSome: (runtime) => Effect.provide(effect, runtime) | ||
}) | ||
) | ||
: effect, | ||
Effect.matchEffect({ | ||
onFailure: (error) => Effect.map(codecs.error(error), Either.left), | ||
onSuccess: (value) => | ||
codecs.output ? | ||
Effect.map(codecs.output(value), Either.right) : | ||
Effect.succeed(Either.right(null)) | ||
}) | ||
) as Effect.Effect<any, RpcEncodeFailure, Either.Either<RpcError, unknown>> | ||
return Effect.matchEffect(effect, { | ||
onFailure: (error) => Effect.map(codecs.error(error), Either.left), | ||
onSuccess: (value) => | ||
codecs.output ? | ||
Effect.map(codecs.output(value), Either.right) : | ||
Effect.succeed(Either.right(void 0)) | ||
}) as Effect.Effect<any, RpcEncodeFailure, Either.Either<RpcError, unknown>> | ||
}), | ||
@@ -178,2 +164,15 @@ Effect.matchCause({ | ||
if (request._tag !== "__setup" && runtimeRef !== undefined) { | ||
return Effect.flatMap( | ||
Ref.get(runtimeRef), | ||
Option.match({ | ||
onNone: () => Effect.fail(RpcTransportError({ error: "__setup not called" })), | ||
onSome: (runtime) => Effect.provide(responseEffect, runtime) | ||
}) | ||
) | ||
} | ||
return responseEffect | ||
} | ||
if (!hasSetup) { | ||
@@ -180,0 +179,0 @@ return handler() as any |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
246941
6489