EdgeAIG's picture
download
raw
2.07 kB
import * as Context from "../../Context.js";
import * as Effect from "../../Effect.js";
import * as Layer from "../../Layer.js";
import * as Schema from "../../Schema.js";
import * as Transferable from "../workers/Transferable.js";
/**
* Context service that supplies the initial RPC worker message as encoded data
* paired with any transferables that should be posted with it.
*
* @category initial message
* @since 4.0.0
*/
export class InitialMessage extends /*#__PURE__*/Context.Service()("effect/rpc/RpcWorker/InitialMessage") {}
const ProtocolTag = /*#__PURE__*/Context.Service("effect/rpc/RpcServer/Protocol");
/**
* Runs an effect, encodes its result with the schema's JSON codec, and returns
* the encoded value together with collected transferables.
*
* @category initial message
* @since 4.0.0
*/
export const makeInitialMessage = (schema, effect) => {
const schemaJson = Schema.toCodecJson(schema);
return Effect.flatMap(effect, value => {
const collector = Transferable.makeCollectorUnsafe();
return Schema.encodeEffect(schemaJson)(value).pipe(Effect.provideService(Transferable.Collector, collector), Effect.map(encoded => [encoded, collector.clearUnsafe()]));
});
};
/**
* Provides the `InitialMessage` service from a schema and build effect,
* capturing the layer context and dying if schema encoding fails.
*
* @category initial message
* @since 4.0.0
*/
export const layerInitialMessage = (schema, build) => Layer.effect(InitialMessage)(Effect.contextWith(context => Effect.succeed(Effect.provideContext(Effect.orDie(makeInitialMessage(schema, build)), context))));
/**
* Reads the protocol initial message and decodes it with the supplied schema,
* failing if no initial message is available or decoding fails.
*
* @category initial message
* @since 4.0.0
*/
export const initialMessage = schema => ProtocolTag.pipe(Effect.flatMap(protocol => protocol.initialMessage), Effect.flatMap(Effect.fromOption), Effect.flatMap(Schema.decodeUnknownEffect(Schema.toCodecJson(schema))));
//# sourceMappingURL=RpcWorker.js.map

Xet Storage Details

Size:
2.07 kB
·
Xet hash:
1507e26508eefe1835aaacb0c92952ddd2c587909d291425c7d66d8c78303e36

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.