mcbe-ipc 3.1.3 → 3.1.4
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 +2 -2
- package/dist/ipc.d.ts +12 -9
- package/dist/ipc.js +47 -36
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCBE-IPC 📡
|
|
2
2
|
|
|
3
|
-
An IPC[^1] system for
|
|
3
|
+
An IPC[^1] system for MCBE Script API projects
|
|
4
4
|
|
|
5
5
|
## 🔗 Dependencies
|
|
6
6
|
|
|
@@ -23,4 +23,4 @@ npm install mcbe-ipc
|
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
[^1]: Inter-Pack Communication
|
|
26
|
+
[^1]: Inter-Pack Communication
|
package/dist/ipc.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export declare namespace PROTO {
|
|
|
27
27
|
serialize(value: T, stream: Buffer): Generator<void, void, void>;
|
|
28
28
|
deserialize(stream: Buffer): Generator<void, T, void>;
|
|
29
29
|
}
|
|
30
|
+
type Infer<S> = S extends PROTO.Serializable<infer T> ? T : never;
|
|
30
31
|
class Buffer {
|
|
31
32
|
private _buffer;
|
|
32
33
|
private _data_view;
|
|
@@ -36,8 +37,10 @@ export declare namespace PROTO {
|
|
|
36
37
|
get front(): number;
|
|
37
38
|
get data_view(): DataView;
|
|
38
39
|
constructor(size?: number);
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
write_byte(byte: number): void;
|
|
41
|
+
write_bytes(bytes: Uint8Array): void;
|
|
42
|
+
read_byte(): number;
|
|
43
|
+
read_bytes(amount: number): Uint8Array;
|
|
41
44
|
ensure_capacity(size: number): void;
|
|
42
45
|
static from_uint8array(array: Uint8Array): Buffer;
|
|
43
46
|
to_uint8array(): Uint8Array;
|
|
@@ -86,19 +89,19 @@ export declare namespace NET {
|
|
|
86
89
|
let FRAG_MAX: number;
|
|
87
90
|
function serialize(buffer: PROTO.Buffer, max_size?: number): Generator<void, string[], void>;
|
|
88
91
|
function deserialize(strings: string[]): Generator<void, PROTO.Buffer, void>;
|
|
89
|
-
function emit<S extends PROTO.Serializable<
|
|
90
|
-
function listen<
|
|
92
|
+
function emit<S extends PROTO.Serializable<any>>(endpoint: string, serializer: S, value: PROTO.Infer<S>): Generator<void, void, void>;
|
|
93
|
+
function listen<S extends PROTO.Serializable<any>>(endpoint: string, serializer: S, callback: (value: PROTO.Infer<S>) => Generator<void, void, void>): () => void;
|
|
91
94
|
}
|
|
92
95
|
export declare namespace IPC {
|
|
93
96
|
/** Sends a message with `args` to `channel` */
|
|
94
|
-
function send<S extends PROTO.Serializable<
|
|
97
|
+
function send<S extends PROTO.Serializable<any>>(channel: string, serializer: S, value: PROTO.Infer<S>): void;
|
|
95
98
|
/** Sends an `invoke` message through IPC, and expects a result asynchronously. */
|
|
96
|
-
function invoke<
|
|
99
|
+
function invoke<S extends PROTO.Serializable<any>, D extends PROTO.Serializable<any>>(channel: string, serializer: S, value: PROTO.Infer<S>, deserializer: S): Promise<PROTO.Infer<D>>;
|
|
97
100
|
/** Listens to `channel`. When a new message arrives, `listener` will be called with `listener(args)`. */
|
|
98
|
-
function on<
|
|
101
|
+
function on<D extends PROTO.Serializable<any>>(channel: string, deserializer: D, listener: (value: PROTO.Infer<D>) => void): () => void;
|
|
99
102
|
/** Listens to `channel` once. When a new message arrives, `listener` will be called with `listener(args)`, and then removed. */
|
|
100
|
-
function once<
|
|
103
|
+
function once<D extends PROTO.Serializable<any>>(channel: string, deserializer: D, listener: (value: PROTO.Infer<D>) => void): () => void;
|
|
101
104
|
/** Adds a handler for an `invoke` IPC. This handler will be called whenever `invoke(channel, ...args)` is called */
|
|
102
|
-
function handle<
|
|
105
|
+
function handle<D extends PROTO.Serializable<any>, S extends PROTO.Serializable<any>>(channel: string, deserializer: D, serializer: S, listener: (value: PROTO.Infer<D>) => PROTO.Infer<S>): () => void;
|
|
103
106
|
}
|
|
104
107
|
export default IPC;
|
package/dist/ipc.js
CHANGED
|
@@ -41,20 +41,31 @@ export var PROTO;
|
|
|
41
41
|
this._length = 0;
|
|
42
42
|
this._offset = 0;
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
this.ensure_capacity(
|
|
46
|
-
this._buffer
|
|
47
|
-
this._length
|
|
44
|
+
write_byte(byte) {
|
|
45
|
+
this.ensure_capacity(1);
|
|
46
|
+
this._buffer[this.end] = byte;
|
|
47
|
+
this._length++;
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
write_bytes(bytes) {
|
|
50
|
+
this.ensure_capacity(bytes.length);
|
|
51
|
+
this._buffer.set(bytes, this.end);
|
|
52
|
+
this._length += bytes.length;
|
|
53
|
+
}
|
|
54
|
+
read_byte() {
|
|
55
|
+
const byte = this._buffer[this._offset];
|
|
56
|
+
this._length--;
|
|
57
|
+
this._offset++;
|
|
58
|
+
return byte;
|
|
59
|
+
}
|
|
60
|
+
read_bytes(amount) {
|
|
50
61
|
if (this._length > 0) {
|
|
51
62
|
const max_amount = amount > this._length ? this._length : amount;
|
|
52
|
-
const values = this._buffer.
|
|
63
|
+
const values = this._buffer.slice(this._offset, this._offset + max_amount);
|
|
53
64
|
this._length -= max_amount;
|
|
54
65
|
this._offset += max_amount;
|
|
55
|
-
return
|
|
66
|
+
return values;
|
|
56
67
|
}
|
|
57
|
-
return
|
|
68
|
+
return new Uint8Array();
|
|
58
69
|
}
|
|
59
70
|
ensure_capacity(size) {
|
|
60
71
|
if (this.end + size > this._buffer.length) {
|
|
@@ -98,7 +109,7 @@ export var PROTO;
|
|
|
98
109
|
const hex_str = str.slice(3, str.length - 1);
|
|
99
110
|
for (let i = 0; i < hex_str.length; i++) {
|
|
100
111
|
const hex = hex_str[i] + hex_str[++i];
|
|
101
|
-
buffer.
|
|
112
|
+
buffer.write_byte(parseInt(hex, 16));
|
|
102
113
|
yield;
|
|
103
114
|
}
|
|
104
115
|
return buffer;
|
|
@@ -126,90 +137,90 @@ export var PROTO;
|
|
|
126
137
|
PROTO.Int8 = {
|
|
127
138
|
*serialize(value, stream) {
|
|
128
139
|
const length = 1;
|
|
129
|
-
stream.
|
|
140
|
+
stream.write_bytes(new Uint8Array(length));
|
|
130
141
|
stream.data_view.setInt8(stream.end - length, value);
|
|
131
142
|
},
|
|
132
143
|
*deserialize(stream) {
|
|
133
144
|
const value = stream.data_view.getInt8(stream.front);
|
|
134
|
-
stream.
|
|
145
|
+
stream.read_bytes(1);
|
|
135
146
|
return value;
|
|
136
147
|
}
|
|
137
148
|
};
|
|
138
149
|
PROTO.Int16 = {
|
|
139
150
|
*serialize(value, stream) {
|
|
140
151
|
const length = 2;
|
|
141
|
-
stream.
|
|
152
|
+
stream.write_bytes(new Uint8Array(length));
|
|
142
153
|
stream.data_view.setInt16(stream.end - length, value);
|
|
143
154
|
},
|
|
144
155
|
*deserialize(stream) {
|
|
145
156
|
const value = stream.data_view.getInt16(stream.front);
|
|
146
|
-
stream.
|
|
157
|
+
stream.read_bytes(2);
|
|
147
158
|
return value;
|
|
148
159
|
}
|
|
149
160
|
};
|
|
150
161
|
PROTO.Int32 = {
|
|
151
162
|
*serialize(value, stream) {
|
|
152
163
|
const length = 4;
|
|
153
|
-
stream.
|
|
164
|
+
stream.write_bytes(new Uint8Array(length));
|
|
154
165
|
stream.data_view.setInt32(stream.end - length, value);
|
|
155
166
|
},
|
|
156
167
|
*deserialize(stream) {
|
|
157
168
|
const value = stream.data_view.getInt32(stream.front);
|
|
158
|
-
stream.
|
|
169
|
+
stream.read_bytes(4);
|
|
159
170
|
return value;
|
|
160
171
|
}
|
|
161
172
|
};
|
|
162
173
|
PROTO.UInt8 = {
|
|
163
174
|
*serialize(value, stream) {
|
|
164
175
|
const length = 1;
|
|
165
|
-
stream.
|
|
176
|
+
stream.write_bytes(new Uint8Array(length));
|
|
166
177
|
stream.data_view.setUint8(stream.end - length, value);
|
|
167
178
|
},
|
|
168
179
|
*deserialize(stream) {
|
|
169
180
|
const value = stream.data_view.getUint8(stream.front);
|
|
170
|
-
stream.
|
|
181
|
+
stream.read_bytes(1);
|
|
171
182
|
return value;
|
|
172
183
|
}
|
|
173
184
|
};
|
|
174
185
|
PROTO.UInt16 = {
|
|
175
186
|
*serialize(value, stream) {
|
|
176
187
|
const length = 2;
|
|
177
|
-
stream.
|
|
188
|
+
stream.write_bytes(new Uint8Array(length));
|
|
178
189
|
stream.data_view.setUint16(stream.end - length, value);
|
|
179
190
|
},
|
|
180
191
|
*deserialize(stream) {
|
|
181
192
|
const value = stream.data_view.getUint16(stream.front);
|
|
182
|
-
stream.
|
|
193
|
+
stream.read_bytes(2);
|
|
183
194
|
return value;
|
|
184
195
|
}
|
|
185
196
|
};
|
|
186
197
|
PROTO.UInt32 = {
|
|
187
198
|
*serialize(value, stream) {
|
|
188
199
|
const length = 4;
|
|
189
|
-
stream.
|
|
200
|
+
stream.write_bytes(new Uint8Array(length));
|
|
190
201
|
stream.data_view.setUint32(stream.end - length, value);
|
|
191
202
|
},
|
|
192
203
|
*deserialize(stream) {
|
|
193
204
|
const value = stream.data_view.getUint32(stream.front);
|
|
194
|
-
stream.
|
|
205
|
+
stream.read_bytes(4);
|
|
195
206
|
return value;
|
|
196
207
|
}
|
|
197
208
|
};
|
|
198
209
|
PROTO.UVarInt32 = {
|
|
199
210
|
*serialize(value, stream) {
|
|
200
211
|
while (value >= 0x80) {
|
|
201
|
-
stream.
|
|
212
|
+
stream.write_byte((value & 0x7f) | 0x80);
|
|
202
213
|
value >>= 7;
|
|
203
214
|
yield;
|
|
204
215
|
}
|
|
205
|
-
stream.
|
|
216
|
+
stream.write_byte(value);
|
|
206
217
|
},
|
|
207
218
|
*deserialize(stream) {
|
|
208
219
|
let value = 0;
|
|
209
220
|
let size = 0;
|
|
210
221
|
let byte;
|
|
211
222
|
do {
|
|
212
|
-
byte = stream.
|
|
223
|
+
byte = stream.read_byte();
|
|
213
224
|
value |= (byte & 0x7f) << (size * 7);
|
|
214
225
|
size += 1;
|
|
215
226
|
yield;
|
|
@@ -220,24 +231,24 @@ export var PROTO;
|
|
|
220
231
|
PROTO.Float32 = {
|
|
221
232
|
*serialize(value, stream) {
|
|
222
233
|
const length = 4;
|
|
223
|
-
stream.
|
|
234
|
+
stream.write_bytes(new Uint8Array(length));
|
|
224
235
|
stream.data_view.setFloat32(stream.end - length, value);
|
|
225
236
|
},
|
|
226
237
|
*deserialize(stream) {
|
|
227
238
|
const value = stream.data_view.getFloat32(stream.front);
|
|
228
|
-
stream.
|
|
239
|
+
stream.read_bytes(4);
|
|
229
240
|
return value;
|
|
230
241
|
}
|
|
231
242
|
};
|
|
232
243
|
PROTO.Float64 = {
|
|
233
244
|
*serialize(value, stream) {
|
|
234
245
|
const length = 8;
|
|
235
|
-
stream.
|
|
246
|
+
stream.write_bytes(new Uint8Array(length));
|
|
236
247
|
stream.data_view.setFloat64(stream.end - length, value);
|
|
237
248
|
},
|
|
238
249
|
*deserialize(stream) {
|
|
239
250
|
const value = stream.data_view.getFloat64(stream.front);
|
|
240
|
-
stream.
|
|
251
|
+
stream.read_bytes(8);
|
|
241
252
|
return value;
|
|
242
253
|
}
|
|
243
254
|
};
|
|
@@ -261,21 +272,21 @@ export var PROTO;
|
|
|
261
272
|
};
|
|
262
273
|
PROTO.Boolean = {
|
|
263
274
|
*serialize(value, stream) {
|
|
264
|
-
stream.
|
|
275
|
+
stream.write_byte(value ? 1 : 0);
|
|
265
276
|
},
|
|
266
277
|
*deserialize(stream) {
|
|
267
|
-
const value = stream.
|
|
278
|
+
const value = stream.read_byte();
|
|
268
279
|
return value === 1;
|
|
269
280
|
}
|
|
270
281
|
};
|
|
271
282
|
PROTO.UInt8Array = {
|
|
272
283
|
*serialize(value, stream) {
|
|
273
284
|
yield* PROTO.UVarInt32.serialize(value.length, stream);
|
|
274
|
-
stream.
|
|
285
|
+
stream.write_bytes(value);
|
|
275
286
|
},
|
|
276
287
|
*deserialize(stream) {
|
|
277
288
|
const length = yield* PROTO.UVarInt32.deserialize(stream);
|
|
278
|
-
return
|
|
289
|
+
return stream.read_bytes(length);
|
|
279
290
|
}
|
|
280
291
|
};
|
|
281
292
|
PROTO.Date = {
|
|
@@ -449,12 +460,12 @@ export var NET;
|
|
|
449
460
|
if (char_code <= 0xff) {
|
|
450
461
|
const hex = str[j] + str[++j];
|
|
451
462
|
const hex_code = parseInt(hex, 16);
|
|
452
|
-
buffer.
|
|
453
|
-
buffer.
|
|
463
|
+
buffer.write_byte(hex_code & 0xff);
|
|
464
|
+
buffer.write_byte(hex_code >> 8);
|
|
454
465
|
}
|
|
455
466
|
else {
|
|
456
|
-
buffer.
|
|
457
|
-
buffer.
|
|
467
|
+
buffer.write_byte(char_code & 0xff);
|
|
468
|
+
buffer.write_byte(char_code >> 8);
|
|
458
469
|
}
|
|
459
470
|
yield;
|
|
460
471
|
}
|
package/package.json
CHANGED