mcbe-ipc 3.2.0 → 3.2.1
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.
- package/README.md +9 -0
- package/dist/ipc.d.ts +47 -38
- package/dist/ipc.js +3 -3
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -23,4 +23,13 @@ npm install mcbe-ipc
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
|
|
27
|
+
> [!NOTE]
|
|
28
|
+
> Official documentation is still in progress.
|
|
29
|
+
>
|
|
30
|
+
> For now, you can refer to the [DeepWiki page](https://deepwiki.com/OmniacDev/MCBE-IPC/).
|
|
31
|
+
> Please note that while it is generally accurate, some of the more advanced sections may contain small inaccuracies.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
26
35
|
[^1]: Inter-Pack Communication
|
package/dist/ipc.d.ts
CHANGED
|
@@ -23,12 +23,20 @@
|
|
|
23
23
|
* SOFTWARE.
|
|
24
24
|
*/
|
|
25
25
|
export declare namespace PROTO {
|
|
26
|
-
|
|
26
|
+
const t: unique symbol;
|
|
27
|
+
interface Phantom<T> {
|
|
28
|
+
readonly [t]?: T;
|
|
29
|
+
}
|
|
30
|
+
export interface Serializer<T> extends Phantom<T> {
|
|
27
31
|
serialize(value: T, stream: Buffer): Generator<void, void, void>;
|
|
32
|
+
}
|
|
33
|
+
export interface Deserializer<T> extends Phantom<T> {
|
|
28
34
|
deserialize(stream: Buffer): Generator<void, T, void>;
|
|
29
35
|
}
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
export interface Serializable<T> extends Serializer<T>, Deserializer<T> {
|
|
37
|
+
}
|
|
38
|
+
export type Infer<S> = S extends Phantom<infer T> ? T : never;
|
|
39
|
+
export class Buffer {
|
|
32
40
|
private _buffer;
|
|
33
41
|
private _data_view;
|
|
34
42
|
private _length;
|
|
@@ -47,64 +55,65 @@ export declare namespace PROTO {
|
|
|
47
55
|
static from_uint8array(array: Uint8Array): Buffer;
|
|
48
56
|
to_uint8array(): Uint8Array;
|
|
49
57
|
}
|
|
50
|
-
namespace MIPS {
|
|
58
|
+
export namespace MIPS {
|
|
51
59
|
function serialize(stream: PROTO.Buffer): Generator<void, string, void>;
|
|
52
60
|
function deserialize(str: string): Generator<void, PROTO.Buffer, void>;
|
|
53
61
|
}
|
|
54
|
-
const Void: PROTO.Serializable<void>;
|
|
55
|
-
const Null: PROTO.Serializable<null>;
|
|
56
|
-
const Undefined: PROTO.Serializable<undefined>;
|
|
57
|
-
const Int8: PROTO.Serializable<number>;
|
|
58
|
-
const Int16: PROTO.Serializable<number>;
|
|
59
|
-
const Int32: PROTO.Serializable<number>;
|
|
60
|
-
const UInt8: PROTO.Serializable<number>;
|
|
61
|
-
const UInt16: PROTO.Serializable<number>;
|
|
62
|
-
const UInt32: PROTO.Serializable<number>;
|
|
63
|
-
const UVarInt32: PROTO.Serializable<number>;
|
|
64
|
-
const VarInt32: PROTO.Serializable<number>;
|
|
65
|
-
const Float32: PROTO.Serializable<number>;
|
|
66
|
-
const Float64: PROTO.Serializable<number>;
|
|
67
|
-
const String: PROTO.Serializable<string>;
|
|
68
|
-
const Boolean: PROTO.Serializable<boolean>;
|
|
69
|
-
const UInt8Array: PROTO.Serializable<Uint8Array>;
|
|
70
|
-
const Date: PROTO.Serializable<Date>;
|
|
71
|
-
function Object<T extends object>(s: {
|
|
62
|
+
export const Void: PROTO.Serializable<void>;
|
|
63
|
+
export const Null: PROTO.Serializable<null>;
|
|
64
|
+
export const Undefined: PROTO.Serializable<undefined>;
|
|
65
|
+
export const Int8: PROTO.Serializable<number>;
|
|
66
|
+
export const Int16: PROTO.Serializable<number>;
|
|
67
|
+
export const Int32: PROTO.Serializable<number>;
|
|
68
|
+
export const UInt8: PROTO.Serializable<number>;
|
|
69
|
+
export const UInt16: PROTO.Serializable<number>;
|
|
70
|
+
export const UInt32: PROTO.Serializable<number>;
|
|
71
|
+
export const UVarInt32: PROTO.Serializable<number>;
|
|
72
|
+
export const VarInt32: PROTO.Serializable<number>;
|
|
73
|
+
export const Float32: PROTO.Serializable<number>;
|
|
74
|
+
export const Float64: PROTO.Serializable<number>;
|
|
75
|
+
export const String: PROTO.Serializable<string>;
|
|
76
|
+
export const Boolean: PROTO.Serializable<boolean>;
|
|
77
|
+
export const UInt8Array: PROTO.Serializable<Uint8Array>;
|
|
78
|
+
export const Date: PROTO.Serializable<Date>;
|
|
79
|
+
export function Object<T extends object>(s: {
|
|
72
80
|
[K in keyof T]: PROTO.Serializable<T[K]>;
|
|
73
81
|
}): PROTO.Serializable<T>;
|
|
74
|
-
function Array<T>(s: PROTO.Serializable<T>): PROTO.Serializable<T[]>;
|
|
75
|
-
function Tuple<T extends any[]>(...s: {
|
|
82
|
+
export function Array<T>(s: PROTO.Serializable<T>): PROTO.Serializable<T[]>;
|
|
83
|
+
export function Tuple<T extends any[]>(...s: {
|
|
76
84
|
[K in keyof T]: PROTO.Serializable<T[K]>;
|
|
77
85
|
}): PROTO.Serializable<T>;
|
|
78
|
-
function Optional<T>(s: PROTO.Serializable<T>): PROTO.Serializable<T | undefined>;
|
|
79
|
-
function Map<K, V>(kS: PROTO.Serializable<K>, vS: PROTO.Serializable<V>): PROTO.Serializable<Map<K, V>>;
|
|
80
|
-
function Set<V>(s: PROTO.Serializable<V>): PROTO.Serializable<Set<V>>;
|
|
81
|
-
type Endpoint = string;
|
|
82
|
-
type Header = {
|
|
86
|
+
export function Optional<T>(s: PROTO.Serializable<T>): PROTO.Serializable<T | undefined>;
|
|
87
|
+
export function Map<K, V>(kS: PROTO.Serializable<K>, vS: PROTO.Serializable<V>): PROTO.Serializable<Map<K, V>>;
|
|
88
|
+
export function Set<V>(s: PROTO.Serializable<V>): PROTO.Serializable<Set<V>>;
|
|
89
|
+
export type Endpoint = string;
|
|
90
|
+
export type Header = {
|
|
83
91
|
guid: string;
|
|
84
92
|
encoding: string;
|
|
85
93
|
index: number;
|
|
86
94
|
final: boolean;
|
|
87
95
|
};
|
|
88
|
-
const Endpoint: PROTO.Serializable<Endpoint>;
|
|
89
|
-
const Header: PROTO.Serializable<Header>;
|
|
96
|
+
export const Endpoint: PROTO.Serializable<Endpoint>;
|
|
97
|
+
export const Header: PROTO.Serializable<Header>;
|
|
98
|
+
export {};
|
|
90
99
|
}
|
|
91
100
|
export declare namespace NET {
|
|
92
101
|
let FRAG_MAX: number;
|
|
93
102
|
function serialize(buffer: PROTO.Buffer, max_size?: number): Generator<void, string[], void>;
|
|
94
103
|
function deserialize(strings: string[]): Generator<void, PROTO.Buffer, void>;
|
|
95
|
-
function emit<S extends PROTO.
|
|
96
|
-
function listen<
|
|
104
|
+
function emit<S extends PROTO.Serializer<any>>(endpoint: string, serializer: S, value: PROTO.Infer<S>): Generator<void, void, void>;
|
|
105
|
+
function listen<D extends PROTO.Deserializer<any>>(endpoint: string, deserializer: D, callback: (value: PROTO.Infer<D>) => Generator<void, void, void>): () => void;
|
|
97
106
|
}
|
|
98
107
|
export declare namespace IPC {
|
|
99
108
|
/** Sends a message with `args` to `channel` */
|
|
100
|
-
function send<S extends PROTO.
|
|
109
|
+
function send<S extends PROTO.Serializer<any>>(channel: string, serializer: S, value: PROTO.Infer<S>): void;
|
|
101
110
|
/** Sends an `invoke` message through IPC, and expects a result asynchronously. */
|
|
102
|
-
function invoke<S extends PROTO.
|
|
111
|
+
function invoke<S extends PROTO.Serializer<any>, D extends PROTO.Deserializer<any>>(channel: string, serializer: S, value: PROTO.Infer<S>, deserializer: D): Promise<PROTO.Infer<D>>;
|
|
103
112
|
/** Listens to `channel`. When a new message arrives, `listener` will be called with `listener(args)`. */
|
|
104
|
-
function on<D extends PROTO.
|
|
113
|
+
function on<D extends PROTO.Deserializer<any>>(channel: string, deserializer: D, listener: (value: PROTO.Infer<D>) => void): () => void;
|
|
105
114
|
/** Listens to `channel` once. When a new message arrives, `listener` will be called with `listener(args)`, and then removed. */
|
|
106
|
-
function once<D extends PROTO.
|
|
115
|
+
function once<D extends PROTO.Deserializer<any>>(channel: string, deserializer: D, listener: (value: PROTO.Infer<D>) => void): () => void;
|
|
107
116
|
/** Adds a handler for an `invoke` IPC. This handler will be called whenever `invoke(channel, ...args)` is called */
|
|
108
|
-
function handle<D extends PROTO.
|
|
117
|
+
function handle<D extends PROTO.Deserializer<any>, S extends PROTO.Serializer<any>>(channel: string, deserializer: D, serializer: S, listener: (value: PROTO.Infer<D>) => PROTO.Infer<S>): () => void;
|
|
109
118
|
}
|
|
110
119
|
export default IPC;
|
package/dist/ipc.js
CHANGED
|
@@ -524,7 +524,7 @@ export var NET;
|
|
|
524
524
|
}
|
|
525
525
|
}
|
|
526
526
|
NET.emit = emit;
|
|
527
|
-
function listen(endpoint,
|
|
527
|
+
function listen(endpoint, deserializer, callback) {
|
|
528
528
|
const buffer = new Map();
|
|
529
529
|
const listener = function* (payload, serialized_packet) {
|
|
530
530
|
let fragment = buffer.get(payload.guid);
|
|
@@ -539,7 +539,7 @@ export var NET;
|
|
|
539
539
|
fragment.data_size += payload.index + 1;
|
|
540
540
|
if (fragment.size !== -1 && fragment.data_size === (fragment.size * (fragment.size + 1)) / 2) {
|
|
541
541
|
const stream = yield* deserialize(fragment.serialized_packets);
|
|
542
|
-
const value = yield*
|
|
542
|
+
const value = yield* deserializer.deserialize(stream);
|
|
543
543
|
yield* callback(value);
|
|
544
544
|
buffer.delete(payload.guid);
|
|
545
545
|
}
|
|
@@ -557,12 +557,12 @@ export var IPC;
|
|
|
557
557
|
IPC.send = send;
|
|
558
558
|
/** Sends an `invoke` message through IPC, and expects a result asynchronously. */
|
|
559
559
|
function invoke(channel, serializer, value, deserializer) {
|
|
560
|
-
system.runJob(NET.emit(`ipc:${channel}:invoke`, serializer, value));
|
|
561
560
|
return new Promise(resolve => {
|
|
562
561
|
const terminate = NET.listen(`ipc:${channel}:handle`, deserializer, function* (value) {
|
|
563
562
|
resolve(value);
|
|
564
563
|
terminate();
|
|
565
564
|
});
|
|
565
|
+
system.runJob(NET.emit(`ipc:${channel}:invoke`, serializer, value));
|
|
566
566
|
});
|
|
567
567
|
}
|
|
568
568
|
IPC.invoke = invoke;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"author": "OmniacDev",
|
|
4
4
|
"description": "IPC system for MCBE Script API projects",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "3.2.
|
|
6
|
+
"version": "3.2.1",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "git+https://github.com/OmniacDev/MCBE-IPC.git"
|
|
@@ -20,12 +20,15 @@
|
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc",
|
|
23
|
+
"test": "vitest",
|
|
24
|
+
"bench": "vitest bench",
|
|
23
25
|
"format": "prettier --write src",
|
|
24
26
|
"prepublishOnly": "npm run build"
|
|
25
27
|
},
|
|
26
28
|
"devDependencies": {
|
|
27
29
|
"prettier": "^3.3.3",
|
|
28
|
-
"typescript": "^5.5.4"
|
|
30
|
+
"typescript": "^5.5.4",
|
|
31
|
+
"vitest": "^4.0.16"
|
|
29
32
|
},
|
|
30
33
|
"dependencies": {
|
|
31
34
|
"@minecraft/server": "^1.18.0"
|