@nmtjs/msgpack-format 0.15.0-beta.24 → 0.15.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ import type { DecodeRPCContext } from '@nmtjs/protocol';
2
+ import type { EncodeRPCContext, ProtocolClientBlobStream, ProtocolServerBlobStream } from '@nmtjs/protocol/client';
3
+ import { BaseClientFormat } from '@nmtjs/protocol/client';
4
+ /**
5
+ * MessagePack encoding format with support for Neemata streams.
6
+ * Uses extension types to embed stream ID + metadata directly,
7
+ * eliminating the need for separate stream metadata chunks.
8
+ */
9
+ export declare class MsgpackFormat extends BaseClientFormat {
10
+ contentType: string;
11
+ encode(data: any): Uint8Array;
12
+ encodeRPC(data: unknown, context: EncodeRPCContext<ProtocolClientBlobStream>): Uint8Array<ArrayBuffer>;
13
+ decode(data: ArrayBufferView): any;
14
+ decodeRPC(buffer: ArrayBufferView, context: DecodeRPCContext<(options?: {
15
+ signal?: AbortSignal;
16
+ }) => ProtocolServerBlobStream>): unknown;
17
+ }
package/dist/client.js ADDED
@@ -0,0 +1,51 @@
1
+ import { decode, encode } from '@msgpack/msgpack';
2
+ import { ProtocolBlob } from '@nmtjs/protocol';
3
+ import { BaseClientFormat } from '@nmtjs/protocol/client';
4
+ import { decodeStreamExt, encodeStreamExt, extensionCodec } from './common.js';
5
+ /**
6
+ * MessagePack encoding format with support for Neemata streams.
7
+ * Uses extension types to embed stream ID + metadata directly,
8
+ * eliminating the need for separate stream metadata chunks.
9
+ */
10
+ export class MsgpackFormat extends BaseClientFormat {
11
+ contentType = 'application/msgpack';
12
+ encode(data) {
13
+ return encode(data, { ignoreUndefined: true });
14
+ }
15
+ encodeRPC(data, context) {
16
+ if (typeof data === 'undefined') {
17
+ return new Uint8Array(0);
18
+ }
19
+ return encode(data, {
20
+ extensionCodec,
21
+ ignoreUndefined: true,
22
+ context: {
23
+ encodeStream: (object) => {
24
+ if (object instanceof ProtocolBlob) {
25
+ const stream = context.addStream(object);
26
+ return encodeStreamExt(stream.id, stream.metadata);
27
+ }
28
+ return null;
29
+ },
30
+ },
31
+ });
32
+ }
33
+ decode(data) {
34
+ return decode(data);
35
+ }
36
+ decodeRPC(buffer, context) {
37
+ if (buffer.byteLength === 0) {
38
+ return undefined;
39
+ }
40
+ return decode(buffer, {
41
+ extensionCodec,
42
+ context: {
43
+ decodeStream: (data) => {
44
+ const { id, metadata } = decodeStreamExt(data);
45
+ return context.addStream(id, metadata);
46
+ },
47
+ },
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE9E;;;;GAIG;AACH,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACjD,WAAW,GAAG,qBAAqB,CAAA;IAEnC,MAAM,CAAC,IAAS,EAAc;QAC5B,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAA;IAAA,CAC/C;IAED,SAAS,CACP,IAAa,EACb,OAAmD,EACnD;QACA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,EAAE;YAClB,cAAc;YACd,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE;gBACP,YAAY,EAAE,CAAC,MAAe,EAAqB,EAAE,CAAC;oBACpD,IAAI,MAAM,YAAY,YAAY,EAAE,CAAC;wBACnC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;wBACxC,OAAO,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;oBACpD,CAAC;oBACD,OAAO,IAAI,CAAA;gBAAA,CACZ;aACF;SACF,CAAC,CAAA;IAAA,CACH;IAED,MAAM,CAAC,IAAqB,EAAO;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IAAA,CACpB;IAED,SAAS,CACP,MAAuB,EACvB,OAEC,EACD;QACA,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,EAAE;YACpB,cAAc;YACd,OAAO,EAAE;gBACP,YAAY,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC;oBAClC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;oBAC9C,OAAO,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;gBAAA,CACvC;aACF;SACF,CAAC,CAAA;IAAA,CACH;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { ProtocolBlobMetadata } from '@nmtjs/protocol';
2
+ import { ExtensionCodec } from '@msgpack/msgpack';
3
+ export declare const STREAM_EXT_TYPE = 1;
4
+ export declare const encodeStreamExt: (id: number, metadata: ProtocolBlobMetadata) => Uint8Array<ArrayBufferLike>;
5
+ export declare const decodeStreamExt: (data: Uint8Array<ArrayBufferLike>) => {
6
+ id: number;
7
+ metadata: ProtocolBlobMetadata;
8
+ };
9
+ export type MsgpackContext = {
10
+ encodeStream?: (object: unknown) => Uint8Array | null;
11
+ decodeStream?: (data: Uint8Array) => unknown;
12
+ };
13
+ export declare const extensionCodec: ExtensionCodec<MsgpackContext>;
package/dist/common.js ADDED
@@ -0,0 +1,33 @@
1
+ import { decode, ExtensionCodec, encode } from '@msgpack/msgpack';
2
+ // Extension type code for blob streams
3
+ export const STREAM_EXT_TYPE = 0x01;
4
+ // Encodes stream ID + metadata into extension type payload
5
+ export const encodeStreamExt = (id, metadata) => {
6
+ // Format: [id: u32 BE][metadata: msgpack]
7
+ const metadataBuffer = encode(metadata);
8
+ const buffer = new Uint8Array(4 + metadataBuffer.byteLength);
9
+ const view = new DataView(buffer.buffer);
10
+ view.setUint32(0, id, false); // big-endian
11
+ buffer.set(metadataBuffer, 4);
12
+ return buffer;
13
+ };
14
+ // Decodes stream ID + metadata from extension type payload
15
+ export const decodeStreamExt = (data) => {
16
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
17
+ const id = view.getUint32(0, false);
18
+ const metadata = decode(data.subarray(4));
19
+ return { id, metadata };
20
+ };
21
+ // Shared extension codec - reused across all encode/decode operations
22
+ // Uses msgpack's context feature to pass dynamic encode/decode handlers
23
+ export const extensionCodec = new ExtensionCodec();
24
+ extensionCodec.register({
25
+ type: STREAM_EXT_TYPE,
26
+ encode: (object, context) => {
27
+ return context.encodeStream(object) ?? null;
28
+ },
29
+ decode: (data, _extType, context) => {
30
+ return context.decodeStream(data);
31
+ },
32
+ });
33
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEjE,uCAAuC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAA;AAEnC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,EAAU,EACV,QAA8B,EAClB,EAAE,CAAC;IACf,0CAA0C;IAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA,CAAC,aAAa;IAC1C,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;IAC7B,OAAO,MAAM,CAAA;AAAA,CACd,CAAA;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAgB,EACgC,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACxE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAyB,CAAA;IACjE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAA;AAAA,CACxB,CAAA;AAQD,sEAAsE;AACtE,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAkB,CAAA;AAElE,cAAc,CAAC,QAAQ,CAAC;IACtB,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,CAAC,MAAe,EAAE,OAAuB,EAAqB,EAAE,CAAC;QACvE,OAAO,OAAO,CAAC,YAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAA;IAAA,CAC7C;IACD,MAAM,EAAE,CAAC,IAAgB,EAAE,QAAgB,EAAE,OAAuB,EAAE,EAAE,CAAC;QACvE,OAAO,OAAO,CAAC,YAAa,CAAC,IAAI,CAAC,CAAA;IAAA,CACnC;CACF,CAAC,CAAA"}
@@ -0,0 +1,26 @@
1
+ import type { DecodeRPCContext, EncodeRPCStreams } from '@nmtjs/protocol';
2
+ import type { ProtocolClientStream } from '@nmtjs/protocol/server';
3
+ import { BaseServerFormat } from '@nmtjs/protocol/server';
4
+ declare class StreamIdMarker {
5
+ readonly streamId: number;
6
+ readonly metadata: {
7
+ type: string;
8
+ size?: number;
9
+ filename?: string;
10
+ };
11
+ constructor(streamId: number, metadata: {
12
+ type: string;
13
+ size?: number;
14
+ filename?: string;
15
+ });
16
+ }
17
+ export declare class MsgpackFormat extends BaseServerFormat {
18
+ contentType: string;
19
+ accept: string[];
20
+ encode(data: any): Buffer<ArrayBuffer>;
21
+ encodeBlob(streamId: number, metadata: EncodeRPCStreams[number]): StreamIdMarker;
22
+ encodeRPC(data: unknown, _streams: EncodeRPCStreams): Buffer<ArrayBuffer>;
23
+ decode(data: Buffer): unknown;
24
+ decodeRPC(buffer: Buffer, context: DecodeRPCContext<() => ProtocolClientStream>): unknown;
25
+ }
26
+ export {};
package/dist/server.js ADDED
@@ -0,0 +1,66 @@
1
+ import { decode, encode } from '@msgpack/msgpack';
2
+ import { ProtocolBlob } from '@nmtjs/protocol';
3
+ import { BaseServerFormat } from '@nmtjs/protocol/server';
4
+ import { decodeStreamExt, encodeStreamExt, extensionCodec } from './common.js';
5
+ // Marker class for stream IDs (used internally for msgpack extension encoding)
6
+ class StreamIdMarker {
7
+ streamId;
8
+ metadata;
9
+ constructor(streamId, metadata) {
10
+ this.streamId = streamId;
11
+ this.metadata = metadata;
12
+ }
13
+ }
14
+ export class MsgpackFormat extends BaseServerFormat {
15
+ contentType = 'application/msgpack';
16
+ accept = ['application/msgpack'];
17
+ encode(data) {
18
+ return typeof data !== 'undefined'
19
+ ? Buffer.from(encode(data, { ignoreUndefined: true }))
20
+ : Buffer.alloc(0);
21
+ }
22
+ encodeBlob(streamId, metadata) {
23
+ return new StreamIdMarker(streamId, metadata);
24
+ }
25
+ encodeRPC(data, _streams) {
26
+ if (typeof data === 'undefined') {
27
+ return Buffer.alloc(0);
28
+ }
29
+ return Buffer.from(encode(data, {
30
+ extensionCodec,
31
+ ignoreUndefined: true,
32
+ context: {
33
+ encodeStream: (object) => {
34
+ if (object instanceof StreamIdMarker) {
35
+ return encodeStreamExt(object.streamId, object.metadata);
36
+ }
37
+ if (object instanceof ProtocolBlob && object.encode) {
38
+ const marker = object.encode(object.metadata);
39
+ if (marker instanceof StreamIdMarker) {
40
+ return encodeStreamExt(marker.streamId, marker.metadata);
41
+ }
42
+ }
43
+ return null;
44
+ },
45
+ },
46
+ }));
47
+ }
48
+ decode(data) {
49
+ return decode(data);
50
+ }
51
+ decodeRPC(buffer, context) {
52
+ if (buffer.byteLength === 0) {
53
+ return undefined;
54
+ }
55
+ return decode(buffer, {
56
+ extensionCodec,
57
+ context: {
58
+ decodeStream: (data) => {
59
+ const { id, metadata } = decodeStreamExt(data);
60
+ return context.addStream(id, metadata);
61
+ },
62
+ },
63
+ });
64
+ }
65
+ }
66
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE9E,+EAA+E;AAC/E,MAAM,cAAc;IAEA,QAAQ;IACR,QAAQ;IAF1B,YACkB,QAAgB,EAChB,QAIf,EACD;wBANgB,QAAQ;wBACR,QAAQ;IAKvB,CAAC;CACL;AAED,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACjD,WAAW,GAAG,qBAAqB,CAAA;IACnC,MAAM,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAEhC,MAAM,CAAC,IAAS,EAAE;QAChB,OAAO,OAAO,IAAI,KAAK,WAAW;YAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAAA,CACpB;IAED,UAAU,CAAC,QAAgB,EAAE,QAAkC,EAAE;QAC/D,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAAA,CAC9C;IAED,SAAS,CAAC,IAAa,EAAE,QAA0B,EAAE;QACnD,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,IAAI,EAAE;YACX,cAAc;YACd,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE;gBACP,YAAY,EAAE,CAAC,MAAe,EAAqB,EAAE,CAAC;oBACpD,IAAI,MAAM,YAAY,cAAc,EAAE,CAAC;wBACrC,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;oBAC1D,CAAC;oBACD,IAAI,MAAM,YAAY,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAmB,CAAA;wBAC/D,IAAI,MAAM,YAAY,cAAc,EAAE,CAAC;4BACrC,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;wBAC1D,CAAC;oBACH,CAAC;oBACD,OAAO,IAAI,CAAA;gBAAA,CACZ;aACF;SACF,CAAC,CACH,CAAA;IAAA,CACF;IAED,MAAM,CAAC,IAAY,EAAE;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IAAA,CACpB;IAED,SAAS,CACP,MAAc,EACd,OAAqD,EACrD;QACA,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,EAAE;YACpB,cAAc;YACd,OAAO,EAAE;gBACP,YAAY,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC;oBAClC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;oBAC9C,OAAO,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;gBAAA,CACvC;aACF;SACF,CAAC,CAAA;IAAA,CACH;CACF"}
package/package.json CHANGED
@@ -7,12 +7,12 @@
7
7
  },
8
8
  "dependencies": {
9
9
  "@msgpack/msgpack": "^3.1.3",
10
- "@nmtjs/common": "0.15.0-beta.24",
11
- "@nmtjs/protocol": "0.15.0-beta.24"
10
+ "@nmtjs/common": "0.15.0-beta.26",
11
+ "@nmtjs/protocol": "0.15.0-beta.26"
12
12
  },
13
13
  "peerDependencies": {
14
- "@nmtjs/protocol": "0.15.0-beta.24",
15
- "@nmtjs/common": "0.15.0-beta.24"
14
+ "@nmtjs/common": "0.15.0-beta.26",
15
+ "@nmtjs/protocol": "0.15.0-beta.26"
16
16
  },
17
17
  "files": [
18
18
  "dist",
@@ -20,7 +20,7 @@
20
20
  "LICENSE.md",
21
21
  "README.md"
22
22
  ],
23
- "version": "0.15.0-beta.24",
23
+ "version": "0.15.0-beta.26",
24
24
  "scripts": {
25
25
  "clean-build": "rm -rf ./dist"
26
26
  }