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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # MCBE-IPC 📡
2
2
 
3
- An IPC[^1] system for Minecraft Bedrock Edition Script API projects
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
- write(...values: number[]): void;
40
- read(amount?: number): number[];
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<T>, T>(endpoint: string, serializer: S & PROTO.Serializable<T>, value: T): Generator<void, void, void>;
90
- function listen<T, S extends PROTO.Serializable<T>>(endpoint: string, serializer: S & PROTO.Serializable<T>, callback: (value: T) => Generator<void, void, void>): () => void;
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<T>, T>(channel: string, serializer: S & PROTO.Serializable<T>, value: T): void;
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<TS extends PROTO.Serializable<T>, T, RS extends PROTO.Serializable<R>, R>(channel: string, serializer: TS & PROTO.Serializable<T>, value: T, deserializer: RS & PROTO.Serializable<R>): Promise<R>;
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<S extends PROTO.Serializable<T>, T>(channel: string, deserializer: S & PROTO.Serializable<T>, listener: (value: T) => void): () => void;
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<S extends PROTO.Serializable<T>, T>(channel: string, deserializer: S & PROTO.Serializable<T>, listener: (value: T) => void): () => void;
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<TS extends PROTO.Serializable<T>, T, RS extends PROTO.Serializable<R>, R>(channel: string, deserializer: TS & PROTO.Serializable<T>, serializer: RS & PROTO.Serializable<R>, listener: (value: T) => R): () => void;
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
- write(...values) {
45
- this.ensure_capacity(values.length);
46
- this._buffer.set(values, this.end);
47
- this._length += values.length;
44
+ write_byte(byte) {
45
+ this.ensure_capacity(1);
46
+ this._buffer[this.end] = byte;
47
+ this._length++;
48
48
  }
49
- read(amount = 1) {
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.subarray(this._offset, this._offset + max_amount);
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 globalThis.Array.from(values);
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.write(parseInt(hex, 16));
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.write(...globalThis.Array(length).fill(0));
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.read(1);
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.write(...globalThis.Array(length).fill(0));
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.read(2);
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.write(...globalThis.Array(length).fill(0));
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.read(4);
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.write(...globalThis.Array(length).fill(0));
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.read(1);
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.write(...globalThis.Array(length).fill(0));
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.read(2);
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.write(...globalThis.Array(length).fill(0));
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.read(4);
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.write((value & 0x7f) | 0x80);
212
+ stream.write_byte((value & 0x7f) | 0x80);
202
213
  value >>= 7;
203
214
  yield;
204
215
  }
205
- stream.write(value);
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.read()[0];
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.write(...globalThis.Array(length).fill(0));
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.read(4);
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.write(...globalThis.Array(length).fill(0));
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.read(8);
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.write(value ? 1 : 0);
275
+ stream.write_byte(value ? 1 : 0);
265
276
  },
266
277
  *deserialize(stream) {
267
- const value = stream.read()[0];
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.write(...value);
285
+ stream.write_bytes(value);
275
286
  },
276
287
  *deserialize(stream) {
277
288
  const length = yield* PROTO.UVarInt32.deserialize(stream);
278
- return new Uint8Array(stream.read(length));
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.write(hex_code & 0xff);
453
- buffer.write(hex_code >> 8);
463
+ buffer.write_byte(hex_code & 0xff);
464
+ buffer.write_byte(hex_code >> 8);
454
465
  }
455
466
  else {
456
- buffer.write(char_code & 0xff);
457
- buffer.write(char_code >> 8);
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
@@ -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.1.3",
6
+ "version": "3.1.4",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/OmniacDev/MCBE-IPC.git"