MCPcopy Create free account
hub / github.com/Effect-TS/effect / makeMsgPack

Function makeMsgPack

packages/effect/src/unstable/rpc/RpcSerialization.ts:506–554  ·  view source on GitHub ↗
(
  options?: (Msgpackr.Options & StreamOptions) | undefined
)

Source from the content-addressed store, hash-verified

504 * @since 4.0.0
505 */
506export const makeMsgPack = (
507 options?: (Msgpackr.Options & StreamOptions) | undefined
508): RpcSerialization["Service"] => {
509 const { maxBufferSize = defaultMaxBufferSize, ...msgpackOptions } = options ?? {}
510 return RpcSerialization.of({
511 contentType: "application/msgpack",
512 includesFraming: true,
513 makeUnsafe: () => {
514 const unpackr = new Msgpackr.Unpackr(msgpackOptions)
515 const packr = new Msgpackr.Packr(msgpackOptions)
516 const encoder = new TextEncoder()
517 let incomplete: Uint8Array | undefined = undefined
518 const failMaxBufferSize = (maxBufferSize: number): never => {
519 incomplete = undefined
520 throw new MaxBufferSizeExceeded({ maxBufferSize })
521 }
522 return {
523 decode(bytes) {
524 let buf = typeof bytes === "string" ? encoder.encode(bytes) : bytes
525 if (incomplete !== undefined) {
526 if (isBufferSizeExceeded(incomplete.length + buf.length, maxBufferSize)) {
527 failMaxBufferSize(maxBufferSize)
528 }
529 const prev = buf
530 bytes = new Uint8Array(incomplete.length + buf.length)
531 bytes.set(incomplete)
532 bytes.set(prev, incomplete.length)
533 buf = bytes
534 incomplete = undefined
535 }
536 try {
537 return unpackr.unpackMultiple(buf)
538 } catch (error_) {
539 const error = error_ as any
540 if (error.incomplete) {
541 incomplete = buf.subarray(error.lastPosition)
542 if (isBufferSizeExceeded(incomplete.length, maxBufferSize)) {
543 failMaxBufferSize(maxBufferSize)
544 }
545 return error.values ?? []
546 }
547 throw error_
548 }
549 },
550 encode: (response) => packr.pack(response)
551 }
552 }
553 })
554}
555
556/**
557 * Default MessagePack RPC serialization using record support and built-in

Callers 2

layerMsgPackWithFunction · 0.85

Calls 2

packMethod · 0.80
ofMethod · 0.65

Tested by

no test coverage detected