webserial-core 1.0.7 → 1.0.9

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
@@ -218,6 +218,7 @@ arduino.on('serial:disconnected', (event) => {
218
218
 
219
219
  document.getElementById('disconnected').classList.remove('hidden');
220
220
  document.getElementById('connect').classList.remove('hidden');
221
+ document.getElementById("disconnect")?.classList.add("hidden");
221
222
  });
222
223
 
223
224
  // eslint-disable-next-line no-unused-vars
@@ -232,6 +233,7 @@ arduino.on('serial:connected', (event) => {
232
233
  document.getElementById('disconnected').classList.add('hidden');
233
234
  document.getElementById('need-permission').classList.add('hidden');
234
235
  document.getElementById('connect').classList.add('hidden');
236
+ document.getElementById("disconnect")?.classList.remove("hidden");
235
237
  });
236
238
 
237
239
  // eslint-disable-next-line no-unused-vars
@@ -239,6 +241,7 @@ arduino.on('serial:need-permission', (event) => {
239
241
  document.getElementById('disconnected').classList.remove('hidden');
240
242
  document.getElementById('need-permission').classList.remove('hidden');
241
243
  document.getElementById('connect').classList.remove('hidden');
244
+ document.getElementById("disconnect")?.classList.add("hidden");
242
245
  });
243
246
 
244
247
  // eslint-disable-next-line no-unused-vars
@@ -260,7 +263,11 @@ function tryConnect() {
260
263
 
261
264
  document.addEventListener('DOMContentLoaded', () => {
262
265
  tryConnect();
263
- document.getElementById('connect').addEventListener('click', tryConnect);
266
+ document.getElementById('connect')?.addEventListener('click', tryConnect);
267
+ document.getElementById("disconnect")?.addEventListener("click", async () => {
268
+ await board.disconnect().catch(console.error);
269
+ document.getElementById('log')?.innerText += 'Disconnected by user\n\n';
270
+ });
264
271
  });
265
272
 
266
273
  ```
@@ -283,6 +290,7 @@ But wait still need to create the HTML file.
283
290
  <div class="webserial w-full max-w-xl mx-auto grid grid-cols-1 gap-y-4">
284
291
  <div class="my-6"></div>
285
292
  <button id="connect" class="hidden px-4 py-3 bg-gray-800 rounded-lg">Connect to serial</button>
293
+ <button id="disconnect" class="hidden px-4 py-3 bg-rose-800 rounded-lg">Disconnect device</button>
286
294
 
287
295
  <div id="need-permission" class="hidden p-4 bg-rose-900 rounded-lg">
288
296
  Woooah! It seems that you need to give permission to access the serial port.
package/dist/Core.d.ts CHANGED
@@ -17,12 +17,17 @@ interface SerialResponse {
17
17
  as: SerialResponseAs;
18
18
  replacer: RegExp | string;
19
19
  limiter: null | string | RegExp;
20
+ prefixLimiter: boolean;
21
+ sufixLimiter: boolean;
22
+ delimited: boolean;
20
23
  }
21
24
  interface QueueData {
22
25
  bytes: string | Uint8Array | Array<string> | Array<number>;
23
26
  action: string;
24
27
  }
25
28
  type SerialData = {
29
+ aux_connecting: string;
30
+ connecting: boolean;
26
31
  connected: boolean;
27
32
  port: SerialPort | null;
28
33
  last_action: string | null;
@@ -40,6 +45,8 @@ type SerialData = {
40
45
  config_port: SerialOptions;
41
46
  queue: QueueData[];
42
47
  auto_response: any;
48
+ free_timeout_ms: number;
49
+ useRTSCTS: boolean;
43
50
  };
44
51
  interface TimeResponse {
45
52
  response_connection: number;
@@ -52,6 +59,7 @@ interface InternalIntervals {
52
59
  reconnection: number;
53
60
  }
54
61
  export type Internal = {
62
+ bypassSerialBytesConnection: boolean;
55
63
  auto_response: boolean;
56
64
  device_number: number;
57
65
  aux_port_connector: number;
@@ -67,9 +75,10 @@ interface CoreConstructorParams {
67
75
  config_port?: SerialOptions;
68
76
  no_device?: number;
69
77
  device_listen_on_channel?: number | string;
78
+ bypassSerialBytesConnection?: boolean;
70
79
  }
71
80
  interface CustomCode {
72
- code: Array<string>;
81
+ code: string | Uint8Array | Array<string> | Array<number>;
73
82
  }
74
83
  interface ICore {
75
84
  lastAction: string | null;
@@ -79,14 +88,31 @@ interface ICore {
79
88
  set serialConfigPort(config_port: SerialOptions);
80
89
  get serialConfigPort(): SerialOptions;
81
90
  get isConnected(): boolean;
91
+ get isConnecting(): boolean;
82
92
  get isDisconnected(): boolean;
93
+ get useRTSCTS(): boolean;
94
+ set useRTSCTS(value: boolean);
83
95
  get deviceNumber(): number;
84
96
  get uuid(): string;
85
97
  get typeDevice(): string;
86
98
  get queue(): QueueData[];
99
+ get timeoutBeforeResponseBytes(): number;
100
+ set timeoutBeforeResponseBytes(value: number);
101
+ get fixedBytesMessage(): number | null;
102
+ set fixedBytesMessage(length: number | null);
103
+ get responseDelimited(): boolean;
104
+ set responseDelimited(value: boolean);
105
+ get responsePrefixLimited(): boolean;
106
+ set responsePrefixLimited(value: boolean);
107
+ get responseSufixLimited(): boolean;
108
+ set responseSufixLimited(value: boolean);
109
+ get responseLimiter(): string | RegExp | null;
110
+ set responseLimiter(limiter: string | RegExp | null);
111
+ get bypassSerialBytesConnection(): boolean;
112
+ set bypassSerialBytesConnection(value: boolean);
87
113
  timeout(bytes: string[], event: string): Promise<void>;
88
114
  disconnect(detail?: null): Promise<void>;
89
- connect(): Promise<string>;
115
+ connect(): Promise<boolean>;
90
116
  serialDisconnect(): Promise<void>;
91
117
  serialPortsSaved(ports: SerialPort[]): Promise<void>;
92
118
  serialErrors(error: unknown | Error | DOMException): void;
@@ -99,15 +125,13 @@ interface ICore {
99
125
  bytesToHex(bytes: string[]): string[];
100
126
  appendToQueue(arr: string[], action: string): Promise<void>;
101
127
  serialSetConnectionConstant(listen_on_port?: number): string | Uint8Array | string[] | number[] | null;
102
- serialMessage(hex: string[]): void;
103
- serialCorruptMessage(code: string[], data: never | null): void;
128
+ serialMessage(code: string[]): void;
129
+ serialCorruptMessage(data: Uint8Array | number[] | string[] | never | null | string | ArrayBuffer): void;
104
130
  clearSerialQueue(): void;
105
131
  sumHex(arr: string[]): string;
106
132
  softReload(): void;
107
133
  sendConnect(): Promise<void>;
108
- sendCustomCode({ code }: {
109
- code: CustomCode;
110
- }): Promise<void>;
134
+ sendCustomCode(customCode: CustomCode): Promise<void>;
111
135
  stringToArrayHex(string: string): string[];
112
136
  stringToArrayBuffer(string: string, end: string): ArrayBufferLike;
113
137
  parseStringToBytes(string: string, end: string): string[];
@@ -126,7 +150,7 @@ interface ICore {
126
150
  export declare class Core extends Dispatcher implements ICore {
127
151
  #private;
128
152
  protected __internal__: Internal;
129
- constructor({ filters, config_port, no_device, device_listen_on_channel, }?: CoreConstructorParams);
153
+ constructor({ filters, config_port, no_device, device_listen_on_channel, bypassSerialBytesConnection, }?: CoreConstructorParams);
130
154
  set listenOnChannel(channel: string | number);
131
155
  get lastAction(): string | null;
132
156
  get listenOnChannel(): number;
@@ -134,15 +158,32 @@ export declare class Core extends Dispatcher implements ICore {
134
158
  get serialFilters(): SerialPortFilter[];
135
159
  set serialConfigPort(config_port: SerialOptions);
136
160
  get serialConfigPort(): SerialOptions;
161
+ get useRTSCTS(): boolean;
162
+ set useRTSCTS(value: boolean);
137
163
  get isConnected(): boolean;
164
+ get isConnecting(): boolean;
138
165
  get isDisconnected(): boolean;
139
166
  get deviceNumber(): number;
140
167
  get uuid(): string;
141
168
  get typeDevice(): string;
142
169
  get queue(): QueueData[];
170
+ get responseDelimited(): boolean;
171
+ set responseDelimited(value: boolean);
172
+ get responsePrefixLimited(): boolean;
173
+ set responsePrefixLimited(value: boolean);
174
+ get responseSufixLimited(): boolean;
175
+ set responseSufixLimited(value: boolean);
176
+ get responseLimiter(): string | RegExp | null;
177
+ set responseLimiter(limiter: string | RegExp | null);
178
+ get fixedBytesMessage(): number | null;
179
+ set fixedBytesMessage(length: number | null);
180
+ get timeoutBeforeResponseBytes(): number;
181
+ set timeoutBeforeResponseBytes(value: number);
182
+ get bypassSerialBytesConnection(): boolean;
183
+ set bypassSerialBytesConnection(value: boolean);
143
184
  timeout(bytes: string | Uint8Array | Array<string> | Array<number>, event: string): Promise<void>;
144
185
  disconnect(detail?: null): Promise<void>;
145
- connect(): Promise<string>;
186
+ connect(): Promise<boolean>;
146
187
  serialDisconnect(): Promise<void>;
147
188
  getResponseAsArrayBuffer(): void;
148
189
  getResponseAsArrayHex(): void;
@@ -160,8 +201,8 @@ export declare class Core extends Dispatcher implements ICore {
160
201
  validateBytes(data: string | Uint8Array | Array<string> | Array<number>): Uint8Array;
161
202
  appendToQueue(arr: string | Uint8Array | string[] | number[], action: string): Promise<void>;
162
203
  serialSetConnectionConstant(listen_on_port?: number): string | Uint8Array | string[] | number[] | null;
163
- serialMessage(hex: string[] | Uint8Array<ArrayBufferLike> | string | ArrayBuffer): void;
164
- serialCorruptMessage(code: Uint8Array | number[] | string[], data: never | null): void;
204
+ serialMessage(code: string[] | Uint8Array<ArrayBufferLike> | string | ArrayBuffer): void;
205
+ serialCorruptMessage(code: Uint8Array | number[] | string[] | never | null | string | ArrayBuffer): void;
165
206
  clearSerialQueue(): void;
166
207
  sumHex(arr: string[]): string;
167
208
  toString(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"Core.d.ts","sourceRoot":"","sources":["../lib/Core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Core.d.ts","sourceRoot":"","sources":["../lib/Core.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,32 @@
1
- var I = Object.defineProperty;
2
- var b = (o) => {
3
- throw TypeError(o);
1
+ var Q = Object.defineProperty;
2
+ var T = (l) => {
3
+ throw TypeError(l);
4
4
  };
5
- var M = (o, n, e) => n in o ? I(o, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[n] = e;
6
- var u = (o, n, e) => M(o, typeof n != "symbol" ? n + "" : n, e), N = (o, n, e) => n.has(o) || b("Cannot " + e);
7
- var w = (o, n, e) => n.has(o) ? b("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(o) : n.set(o, e);
8
- var l = (o, n, e) => (N(o, n, "access private method"), e);
9
- class m extends CustomEvent {
10
- constructor(n, e) {
11
- super(n, e);
5
+ var V = (l, s, e) => s in l ? Q(l, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[s] = e;
6
+ var g = (l, s, e) => V(l, typeof s != "symbol" ? s + "" : s, e), z = (l, s, e) => s.has(l) || T("Cannot " + e);
7
+ var E = (l, s, e) => s.has(l) ? T("Cannot add the same private member more than once") : s instanceof WeakSet ? s.add(l) : s.set(l, e);
8
+ var a = (l, s, e) => (z(l, s, "access private method"), e);
9
+ class A extends CustomEvent {
10
+ constructor(s, e) {
11
+ super(s, e);
12
12
  }
13
13
  }
14
- class C extends EventTarget {
14
+ class B extends EventTarget {
15
15
  constructor() {
16
16
  super(...arguments);
17
- u(this, "__listeners__", {
17
+ g(this, "__listeners__", {
18
18
  debug: !1
19
19
  });
20
- u(this, "__debug__", !1);
20
+ g(this, "__debug__", !1);
21
21
  }
22
22
  dispatch(e, t = null) {
23
- const i = new m(e, { detail: t });
24
- this.dispatchEvent(i), this.__debug__ && this.dispatchEvent(new m("debug", { detail: { type: e, data: t } }));
23
+ const i = new A(e, { detail: t });
24
+ this.dispatchEvent(i), this.__debug__ && this.dispatchEvent(new A("debug", { detail: { type: e, data: t } }));
25
25
  }
26
26
  dispatchAsync(e, t = null, i = 100) {
27
- const s = this;
27
+ const r = this;
28
28
  setTimeout(() => {
29
- s.dispatch(e, t);
29
+ r.dispatch(e, t);
30
30
  }, i);
31
31
  }
32
32
  on(e, t) {
@@ -45,58 +45,58 @@ class C extends EventTarget {
45
45
  }));
46
46
  }
47
47
  }
48
- const a = class a extends C {
48
+ const o = class o extends B {
49
49
  constructor() {
50
50
  super(), ["change"].forEach((e) => {
51
51
  this.serialRegisterAvailableListener(e);
52
52
  });
53
53
  }
54
- static $dispatchChange(n = null) {
55
- n && n.$checkAndDispatchConnection(), a.instance.dispatch("change", { devices: a.devices, dispatcher: n });
54
+ static $dispatchChange(s = null) {
55
+ s && s.$checkAndDispatchConnection(), o.instance.dispatch("change", { devices: o.devices, dispatcher: s });
56
56
  }
57
- static typeError(n) {
57
+ static typeError(s) {
58
58
  const e = new Error();
59
- throw e.message = `Type ${n} is not supported`, e.name = "DeviceTypeError", e;
59
+ throw e.message = `Type ${s} is not supported`, e.name = "DeviceTypeError", e;
60
60
  }
61
- static registerType(n) {
62
- typeof a.devices[n] > "u" && (a.devices[n] = {});
61
+ static registerType(s) {
62
+ typeof o.devices[s] > "u" && (o.devices[s] = {});
63
63
  }
64
- static add(n) {
65
- const e = n.typeDevice;
66
- typeof a.devices[e] > "u" && (a.devices[e] = {});
67
- const t = n.uuid;
68
- if (typeof a.devices[e] > "u" && a.typeError(e), a.devices[e][t])
64
+ static add(s) {
65
+ const e = s.typeDevice;
66
+ typeof o.devices[e] > "u" && (o.devices[e] = {});
67
+ const t = s.uuid;
68
+ if (typeof o.devices[e] > "u" && o.typeError(e), o.devices[e][t])
69
69
  throw new Error(`Device with id ${t} already exists`);
70
- return a.devices[e][t] = n, a.$dispatchChange(n), Object.keys(a.devices[e]).indexOf(t);
70
+ return o.devices[e][t] = s, o.$dispatchChange(s), Object.keys(o.devices[e]).indexOf(t);
71
71
  }
72
- static get(n, e) {
73
- return typeof a.devices[n] > "u" && (a.devices[n] = {}), typeof a.devices[n] > "u" && a.typeError(n), a.devices[n][e];
72
+ static get(s, e) {
73
+ return typeof o.devices[s] > "u" && (o.devices[s] = {}), typeof o.devices[s] > "u" && o.typeError(s), o.devices[s][e];
74
74
  }
75
- static getAll(n = null) {
76
- return n === null ? a.devices : (typeof a.devices[n] > "u" && a.typeError(n), a.devices[n]);
75
+ static getAll(s = null) {
76
+ return s === null ? o.devices : (typeof o.devices[s] > "u" && o.typeError(s), o.devices[s]);
77
77
  }
78
78
  static getList() {
79
- return Object.values(a.devices).map((e) => Object.values(e)).flat();
79
+ return Object.values(o.devices).map((e) => Object.values(e)).flat();
80
80
  }
81
- static getByNumber(n, e) {
82
- return typeof a.devices[n] > "u" && a.typeError(n), Object.values(a.devices[n]).find((i) => i.deviceNumber === e) ?? null;
81
+ static getByNumber(s, e) {
82
+ return typeof o.devices[s] > "u" && o.typeError(s), Object.values(o.devices[s]).find((i) => i.deviceNumber === e) ?? null;
83
83
  }
84
- static getCustom(n, e = 1) {
85
- return typeof a.devices[n] > "u" && a.typeError(n), Object.values(a.devices[n]).find((i) => i.deviceNumber === e) ?? null;
84
+ static getCustom(s, e = 1) {
85
+ return typeof o.devices[s] > "u" && o.typeError(s), Object.values(o.devices[s]).find((i) => i.deviceNumber === e) ?? null;
86
86
  }
87
87
  };
88
- u(a, "instance"), u(a, "devices", {});
89
- let _ = a;
90
- _.instance || (_.instance = new _());
91
- function v(o = 100) {
88
+ g(o, "instance"), g(o, "devices", {});
89
+ let h = o;
90
+ h.instance || (h.instance = new h());
91
+ function L(l = 100) {
92
92
  return new Promise(
93
- (n) => setTimeout(() => n(), o)
93
+ (s) => setTimeout(() => s(), l)
94
94
  );
95
95
  }
96
- function B() {
96
+ function G() {
97
97
  return "serial" in navigator;
98
98
  }
99
- const g = {
99
+ const x = {
100
100
  baudRate: 9600,
101
101
  dataBits: 8,
102
102
  stopBits: 1,
@@ -104,22 +104,25 @@ const g = {
104
104
  bufferSize: 32768,
105
105
  flowControl: "none"
106
106
  };
107
- var r, d, f, y, h, A, E, x, T, S, U, k, P, L, D, $, q;
108
- class R extends C {
107
+ var n, y, w, U, v, k, p, I, P, $, D, R, M, m, q, N, O, F, H, j, W;
108
+ class K extends B {
109
109
  constructor({
110
110
  filters: e = null,
111
- config_port: t = g,
111
+ config_port: t = x,
112
112
  no_device: i = 1,
113
- device_listen_on_channel: s = 1
113
+ device_listen_on_channel: r = 1,
114
+ bypassSerialBytesConnection: _ = !1
114
115
  } = {
115
116
  filters: null,
116
- config_port: g,
117
+ config_port: x,
117
118
  no_device: 1,
118
- device_listen_on_channel: 1
119
+ device_listen_on_channel: 1,
120
+ bypassSerialBytesConnection: !1
119
121
  }) {
120
122
  super();
121
- w(this, r);
122
- u(this, "__internal__", {
123
+ E(this, n);
124
+ g(this, "__internal__", {
125
+ bypassSerialBytesConnection: !1,
123
126
  auto_response: !1,
124
127
  device_number: 1,
125
128
  aux_port_connector: 0,
@@ -130,6 +133,8 @@ class R extends C {
130
133
  no_code: 0
131
134
  },
132
135
  serial: {
136
+ aux_connecting: "idle",
137
+ connecting: !1,
133
138
  connected: !1,
134
139
  port: null,
135
140
  last_action: null,
@@ -138,7 +143,10 @@ class R extends C {
138
143
  buffer: new Uint8Array([]),
139
144
  as: "uint8",
140
145
  replacer: /[\n\r]+/g,
141
- limiter: null
146
+ limiter: null,
147
+ prefixLimiter: !1,
148
+ sufixLimiter: !0,
149
+ delimited: !1
142
150
  },
143
151
  reader: null,
144
152
  input_done: null,
@@ -150,9 +158,13 @@ class R extends C {
150
158
  delay_first_connection: 200,
151
159
  bytes_connection: null,
152
160
  filters: [],
153
- config_port: g,
161
+ config_port: x,
154
162
  queue: [],
155
- auto_response: ["DD", "DD"]
163
+ auto_response: ["DD", "DD"],
164
+ free_timeout_ms: 50,
165
+ // In previous versions 400 was used
166
+ useRTSCTS: !1
167
+ // Use RTS/CTS flow control
156
168
  },
157
169
  device: {
158
170
  type: "unknown",
@@ -172,12 +184,12 @@ class R extends C {
172
184
  });
173
185
  if (!("serial" in navigator))
174
186
  throw new Error("Web Serial not supported");
175
- e && (this.serialFilters = e), t && (this.serialConfigPort = t), i && l(this, r, $).call(this, i), s && ["number", "string"].includes(typeof s) && (this.listenOnChannel = s), l(this, r, k).call(this), l(this, r, P).call(this);
187
+ e && (this.serialFilters = e), t && (this.serialConfigPort = t), _ && (this.__internal__.bypassSerialBytesConnection = _), i && a(this, n, j).call(this, i), r && ["number", "string"].includes(typeof r) && (this.listenOnChannel = r), a(this, n, N).call(this), a(this, n, O).call(this);
176
188
  }
177
189
  set listenOnChannel(e) {
178
190
  if (typeof e == "string" && (e = parseInt(e)), isNaN(e) || e < 1 || e > 255)
179
191
  throw new Error("Invalid port number");
180
- this.__internal__.device.listen_on_port = e, this.__internal__.serial.bytes_connection = this.serialSetConnectionConstant(e);
192
+ this.__internal__.device.listen_on_port = e, !this.__internal__.bypassSerialBytesConnection && (this.__internal__.serial.bytes_connection = this.serialSetConnectionConstant(e));
181
193
  }
182
194
  get lastAction() {
183
195
  return this.__internal__.serial.last_action;
@@ -186,24 +198,35 @@ class R extends C {
186
198
  return this.__internal__.device.listen_on_port ?? 1;
187
199
  }
188
200
  set serialFilters(e) {
201
+ if (this.isConnected) throw new Error("Cannot change serial filters while connected");
189
202
  this.__internal__.serial.filters = e;
190
203
  }
191
204
  get serialFilters() {
192
205
  return this.__internal__.serial.filters;
193
206
  }
194
207
  set serialConfigPort(e) {
208
+ if (this.isConnected) throw new Error("Cannot change serial filters while connected");
195
209
  this.__internal__.serial.config_port = e;
196
210
  }
197
211
  get serialConfigPort() {
198
212
  return this.__internal__.serial.config_port;
199
213
  }
214
+ get useRTSCTS() {
215
+ return this.__internal__.serial.useRTSCTS;
216
+ }
217
+ set useRTSCTS(e) {
218
+ this.__internal__.serial.useRTSCTS = e;
219
+ }
200
220
  get isConnected() {
201
- const e = this.__internal__.serial.connected, t = l(this, r, d).call(this, this.__internal__.serial.port);
202
- return e && !t && l(this, r, f).call(this, { error: "Port is closed, not readable or writable." }), this.__internal__.serial.connected = t, this.__internal__.serial.connected;
221
+ const e = this.__internal__.serial.connected, t = a(this, n, y).call(this, this.__internal__.serial.port);
222
+ return e && !t && a(this, n, w).call(this, { error: "Port is closed, not readable or writable." }), this.__internal__.serial.connected = t, this.__internal__.serial.connected;
223
+ }
224
+ get isConnecting() {
225
+ return this.__internal__.serial.connecting;
203
226
  }
204
227
  get isDisconnected() {
205
- const e = this.__internal__.serial.connected, t = l(this, r, d).call(this, this.__internal__.serial.port);
206
- return !e && t && (this.dispatch("serial:connected"), _.$dispatchChange(this)), this.__internal__.serial.connected = t, !this.__internal__.serial.connected;
228
+ const e = this.__internal__.serial.connected, t = a(this, n, y).call(this, this.__internal__.serial.port);
229
+ return !e && t && (this.dispatch("serial:connected"), a(this, n, m).call(this, !1), h.$dispatchChange(this)), this.__internal__.serial.connected = t, !this.__internal__.serial.connected;
207
230
  }
208
231
  get deviceNumber() {
209
232
  return this.__internal__.device_number;
@@ -217,31 +240,91 @@ class R extends C {
217
240
  get queue() {
218
241
  return this.__internal__.serial.queue;
219
242
  }
243
+ get responseDelimited() {
244
+ return this.__internal__.serial.response.delimited;
245
+ }
246
+ set responseDelimited(e) {
247
+ if (typeof e != "boolean")
248
+ throw new Error("responseDelimited must be a boolean");
249
+ this.__internal__.serial.response.delimited = e;
250
+ }
251
+ get responsePrefixLimited() {
252
+ return this.__internal__.serial.response.prefixLimiter;
253
+ }
254
+ set responsePrefixLimited(e) {
255
+ if (typeof e != "boolean")
256
+ throw new Error("responsePrefixLimited must be a boolean");
257
+ this.__internal__.serial.response.prefixLimiter = e;
258
+ }
259
+ get responseSufixLimited() {
260
+ return this.__internal__.serial.response.sufixLimiter;
261
+ }
262
+ set responseSufixLimited(e) {
263
+ if (typeof e != "boolean")
264
+ throw new Error("responseSufixLimited must be a boolean");
265
+ this.__internal__.serial.response.sufixLimiter = e;
266
+ }
267
+ get responseLimiter() {
268
+ return this.__internal__.serial.response.limiter;
269
+ }
270
+ set responseLimiter(e) {
271
+ if (typeof e != "string" && !(e instanceof RegExp))
272
+ throw new Error("responseLimiter must be a string or a RegExp");
273
+ this.__internal__.serial.response.limiter = e;
274
+ }
275
+ get fixedBytesMessage() {
276
+ return this.__internal__.serial.response.length;
277
+ }
278
+ set fixedBytesMessage(e) {
279
+ if (e !== null && (typeof e != "number" || e < 1))
280
+ throw new Error("Invalid length for fixed bytes message");
281
+ this.__internal__.serial.response.length = e;
282
+ }
283
+ get timeoutBeforeResponseBytes() {
284
+ return this.__internal__.serial.free_timeout_ms || 50;
285
+ }
286
+ set timeoutBeforeResponseBytes(e) {
287
+ if (e !== void 0 && (typeof e != "number" || e < 1))
288
+ throw new Error("Invalid timeout for response bytes");
289
+ this.__internal__.serial.free_timeout_ms = e ?? 50;
290
+ }
291
+ get bypassSerialBytesConnection() {
292
+ return this.__internal__.bypassSerialBytesConnection;
293
+ }
294
+ set bypassSerialBytesConnection(e) {
295
+ if (typeof e != "boolean")
296
+ throw new Error("bypassSerialBytesConnection must be a boolean");
297
+ this.__internal__.bypassSerialBytesConnection = e;
298
+ }
220
299
  async timeout(e, t) {
221
- this.__internal__.last_error.message = "Operation response timed out.", this.__internal__.last_error.action = t, this.__internal__.last_error.code = e, this.__internal__.timeout.until_response && (clearTimeout(this.__internal__.timeout.until_response), this.__internal__.timeout.until_response = 0), t === "connect" ? (this.__internal__.serial.connected = !1, this.dispatch("serial:reconnect", {}), _.$dispatchChange(this)) : t === "connection:start" && (await this.serialDisconnect(), this.__internal__.serial.connected = !1, this.__internal__.aux_port_connector += 1, _.$dispatchChange(this), await this.serialConnect()), this.dispatch("serial:timeout", {
300
+ this.__internal__.last_error.message = "Operation response timed out.", this.__internal__.last_error.action = t, this.__internal__.last_error.code = e, this.__internal__.timeout.until_response && (clearTimeout(this.__internal__.timeout.until_response), this.__internal__.timeout.until_response = 0), t === "connect" ? (this.__internal__.serial.connected = !1, this.dispatch("serial:reconnect", {}), h.$dispatchChange(this)) : t === "connection:start" && (await this.serialDisconnect(), this.__internal__.serial.connected = !1, this.__internal__.aux_port_connector += 1, h.$dispatchChange(this), await this.serialConnect()), this.dispatch("serial:timeout", {
222
301
  ...this.__internal__.last_error,
223
302
  bytes: e,
224
303
  action: t
225
304
  });
226
305
  }
227
306
  async disconnect(e = null) {
228
- await this.serialDisconnect(), l(this, r, f).call(this, e);
307
+ await this.serialDisconnect(), a(this, n, w).call(this, e);
229
308
  }
230
309
  async connect() {
231
- return new Promise((e, t) => {
232
- B() || t("Web Serial not supported"), setTimeout(async () => {
233
- await v(499), await this.serialConnect(), this.isConnected ? e(`${this.typeDevice} device ${this.deviceNumber} connected`) : t(`${this.typeDevice} device ${this.deviceNumber} not connected`);
234
- }, 1);
235
- });
310
+ return this.isConnected ? !0 : (this.__internal__.serial.aux_connecting = "idle", new Promise((e, t) => {
311
+ G() || t("Web Serial not supported");
312
+ const i = a(this, n, U).bind(this);
313
+ this.on("serial:connecting", i);
314
+ const r = setInterval(() => {
315
+ this.__internal__.serial.aux_connecting === "finished" ? (clearInterval(r), this.__internal__.serial.aux_connecting = "idle", this.off("serial:connecting", i), this.isConnected ? e(!0) : t(`${this.typeDevice} device ${this.deviceNumber} not connected`)) : this.__internal__.serial.aux_connecting === "connecting" && (this.__internal__.serial.aux_connecting = "idle", this.dispatch("serial:connecting", { active: !0 }));
316
+ }, 100);
317
+ this.serialConnect();
318
+ }));
236
319
  }
237
320
  async serialDisconnect() {
238
321
  try {
239
322
  const e = this.__internal__.serial.reader, t = this.__internal__.serial.output_stream;
240
- e && (await e.cancel().catch((s) => this.serialErrors(s)), await this.__internal__.serial.input_done), t && (await t.getWriter().close(), await this.__internal__.serial.output_done), this.__internal__.serial.connected && this.__internal__.serial && this.__internal__.serial.port && await this.__internal__.serial.port.close();
323
+ e && (await e.cancel().catch((r) => this.serialErrors(r)), await this.__internal__.serial.input_done), t && (await t.getWriter().close(), await this.__internal__.serial.output_done), this.__internal__.serial.connected && this.__internal__.serial && this.__internal__.serial.port && await this.__internal__.serial.port.close();
241
324
  } catch (e) {
242
325
  this.serialErrors(e);
243
326
  } finally {
244
- this.__internal__.serial.reader = null, this.__internal__.serial.input_done = null, this.__internal__.serial.output_stream = null, this.__internal__.serial.output_done = null, this.__internal__.serial.connected = !1, this.__internal__.serial.port = null, _.$dispatchChange(this);
327
+ this.__internal__.serial.reader = null, this.__internal__.serial.input_done = null, this.__internal__.serial.output_stream = null, this.__internal__.serial.output_done = null, this.__internal__.serial.connected = !1, this.__internal__.serial.port = null, h.$dispatchChange(this);
245
328
  }
246
329
  }
247
330
  getResponseAsArrayBuffer() {
@@ -281,7 +364,7 @@ class R extends C {
281
364
  case t.includes(
282
365
  "this readable stream reader has been released and cannot be used to cancel its previous owner stream"
283
366
  ):
284
- this.dispatch("serial:need-permission", {}), _.$dispatchChange(this);
367
+ this.dispatch("serial:need-permission", {}), h.$dispatchChange(this);
285
368
  break;
286
369
  case t.includes("the port is already open."):
287
370
  case t.includes("failed to open serial port"):
@@ -304,7 +387,7 @@ class R extends C {
304
387
  case t.includes("the port is already closed."):
305
388
  break;
306
389
  case t.includes("the device has been lost"):
307
- this.dispatch("serial:lost", {}), _.$dispatchChange(this);
390
+ this.dispatch("serial:lost", {}), h.$dispatchChange(this);
308
391
  break;
309
392
  case t.includes("navigator.serial is undefined"):
310
393
  this.dispatch("serial:unsupported", {});
@@ -317,14 +400,14 @@ class R extends C {
317
400
  }
318
401
  async serialConnect() {
319
402
  try {
320
- this.dispatch("serial:connecting", {});
321
- const e = await l(this, r, A).call(this);
403
+ a(this, n, m).call(this, !0);
404
+ const e = await a(this, n, I).call(this);
322
405
  if (e.length > 0)
323
406
  await this.serialPortsSaved(e);
324
407
  else {
325
- const s = this.serialFilters;
408
+ const r = this.serialFilters;
326
409
  this.__internal__.serial.port = await navigator.serial.requestPort({
327
- filters: s
410
+ filters: r
328
411
  });
329
412
  }
330
413
  const t = this.__internal__.serial.port;
@@ -332,22 +415,23 @@ class R extends C {
332
415
  throw new Error("No port selected by the user");
333
416
  await t.open(this.serialConfigPort);
334
417
  const i = this;
335
- t.onconnect = (s) => {
336
- console.log(s), i.dispatch("serial:connected", s), _.$dispatchChange(this), i.__internal__.serial.queue.length > 0 && i.dispatch("internal:queue", {});
418
+ t.onconnect = (r) => {
419
+ var _;
420
+ i.dispatch("serial:connected", r), a(_ = i, n, m).call(_, !1), h.$dispatchChange(this), i.__internal__.serial.queue.length > 0 && i.dispatch("internal:queue", {});
337
421
  }, t.ondisconnect = async () => {
338
422
  await i.disconnect();
339
- }, await v(this.__internal__.serial.delay_first_connection), this.__internal__.timeout.until_response = setTimeout(async () => {
423
+ }, await L(this.__internal__.serial.delay_first_connection), this.__internal__.timeout.until_response = setTimeout(async () => {
340
424
  await i.timeout(i.__internal__.serial.bytes_connection ?? [], "connection:start");
341
- }, this.__internal__.time.response_connection), this.__internal__.serial.last_action = "connect", await l(this, r, y).call(this, this.__internal__.serial.bytes_connection ?? []), this.dispatch("serial:sent", {
425
+ }, this.__internal__.time.response_connection), this.__internal__.serial.last_action = "connect", await a(this, n, v).call(this, this.__internal__.serial.bytes_connection ?? []), this.dispatch("serial:sent", {
342
426
  action: "connect",
343
427
  bytes: this.__internal__.serial.bytes_connection
344
- }), this.__internal__.auto_response && l(this, r, h).call(this, this.__internal__.serial.auto_response, null), await l(this, r, S).call(this);
428
+ }), this.__internal__.auto_response && a(this, n, p).call(this, this.__internal__.serial.auto_response), await a(this, n, M).call(this);
345
429
  } catch (e) {
346
- this.serialErrors(e);
430
+ a(this, n, m).call(this, !1), this.serialErrors(e);
347
431
  }
348
432
  }
349
433
  async serialForget() {
350
- return await l(this, r, U).call(this);
434
+ return await a(this, n, q).call(this);
351
435
  }
352
436
  decToHex(e) {
353
437
  return typeof e == "string" && (e = parseInt(e, 10)), e.toString(16);
@@ -360,8 +444,8 @@ class R extends C {
360
444
  }
361
445
  add0x(e) {
362
446
  const t = [];
363
- return e.forEach((i, s) => {
364
- t[s] = "0x" + i;
447
+ return e.forEach((i, r) => {
448
+ t[r] = "0x" + i;
365
449
  }), t;
366
450
  }
367
451
  bytesToHex(e) {
@@ -391,13 +475,14 @@ class R extends C {
391
475
  this.__internal__.serial.queue.push({ bytes: i, action: t }), this.dispatch("internal:queue", {});
392
476
  }
393
477
  serialSetConnectionConstant(e = 1) {
478
+ if (this.__internal__.bypassSerialBytesConnection) return this.__internal__.serial.bytes_connection;
394
479
  throw new Error(`Method not implemented 'serialSetConnectionConstant' to listen on channel ${e}`);
395
480
  }
396
481
  serialMessage(e) {
397
- throw console.log(e), new Error("Method not implemented 'serialMessage'");
482
+ throw console.log(e), this.dispatch("serial:message", { code: e }), new Error("Method not implemented 'serialMessage'");
398
483
  }
399
- serialCorruptMessage(e, t) {
400
- throw console.log(e, t), new Error("Method not implemented 'serialCorruptMessage'");
484
+ serialCorruptMessage(e) {
485
+ throw console.log(e), this.dispatch("serial:corrupt-message", { code: e }), new Error("Method not implemented 'serialCorruptMessage'");
401
486
  }
402
487
  clearSerialQueue() {
403
488
  this.__internal__.serial.queue = [];
@@ -418,18 +503,17 @@ class R extends C {
418
503
  });
419
504
  }
420
505
  softReload() {
421
- l(this, r, q).call(this), this.dispatch("serial:soft-reload", {});
506
+ a(this, n, W).call(this), this.dispatch("serial:soft-reload", {});
422
507
  }
423
508
  async sendConnect() {
424
509
  if (!this.__internal__.serial.bytes_connection)
425
510
  throw new Error("No connection bytes defined");
426
511
  await this.appendToQueue(this.__internal__.serial.bytes_connection, "connect");
427
512
  }
428
- // @ts-expect-error code is required but can be empty
429
513
  async sendCustomCode({ code: e = [] } = { code: [] }) {
430
- if (e === null || e.length === 0)
514
+ if (!e)
431
515
  throw new Error("No data to send");
432
- await this.appendToQueue(e, "custom");
516
+ this.__internal__.bypassSerialBytesConnection && (this.__internal__.serial.bytes_connection = this.validateBytes(e)), await this.appendToQueue(e, "custom");
433
517
  }
434
518
  stringToArrayHex(e) {
435
519
  return Array.from(e).map((t) => t.charCodeAt(0).toString(16));
@@ -446,7 +530,7 @@ class R extends C {
446
530
  parseStringToBytes(e = "", t = `
447
531
  `) {
448
532
  const i = this.parseStringToTextEncoder(e, t);
449
- return Array.from(i).map((s) => s.toString(16));
533
+ return Array.from(i).map((r) => r.toString(16));
450
534
  }
451
535
  parseUint8ToHex(e) {
452
536
  return Array.from(e).map((t) => t.toString(16));
@@ -456,29 +540,29 @@ class R extends C {
456
540
  }
457
541
  stringArrayToUint8Array(e) {
458
542
  const t = [];
459
- return e.forEach((i) => {
460
- const s = i.replace("0x", "");
461
- t.push(parseInt(s, 16));
462
- }), new Uint8Array(t);
543
+ return typeof e == "string" ? this.parseStringToTextEncoder(e).buffer : (e.forEach((i) => {
544
+ const r = i.replace("0x", "");
545
+ t.push(parseInt(r, 16));
546
+ }), new Uint8Array(t));
463
547
  }
464
548
  parseUint8ArrayToString(e) {
465
549
  let t = new Uint8Array(0);
466
550
  e instanceof Uint8Array ? t = e : t = this.stringArrayToUint8Array(e), e = this.parseUint8ToHex(t);
467
- const i = e.map((s) => parseInt(s, 16));
551
+ const i = e.map((r) => parseInt(r, 16));
468
552
  return this.__internal__.serial.response.replacer ? String.fromCharCode(...i).replace(this.__internal__.serial.response.replacer, "") : String.fromCharCode(...i);
469
553
  }
470
554
  hexToAscii(e) {
471
555
  const t = e.toString();
472
556
  let i = "";
473
- for (let s = 0; s < t.length; s += 2)
474
- i += String.fromCharCode(parseInt(t.substring(s, 2), 16));
557
+ for (let r = 0; r < t.length; r += 2)
558
+ i += String.fromCharCode(parseInt(t.substring(r, 2), 16));
475
559
  return i;
476
560
  }
477
561
  asciiToHex(e) {
478
562
  const t = [];
479
- for (let i = 0, s = e.length; i < s; i++) {
480
- const c = Number(e.charCodeAt(i)).toString(16);
481
- t.push(c);
563
+ for (let i = 0, r = e.length; i < r; i++) {
564
+ const _ = Number(e.charCodeAt(i)).toString(16);
565
+ t.push(_);
482
566
  }
483
567
  return t.join("");
484
568
  }
@@ -486,102 +570,151 @@ class R extends C {
486
570
  return this.isConnected;
487
571
  }
488
572
  }
489
- r = new WeakSet(), d = function(e) {
573
+ n = new WeakSet(), y = function(e) {
490
574
  return !!(e && e.readable && e.writable);
491
- }, f = function(e = null) {
492
- this.__internal__.serial.connected = !1, this.__internal__.aux_port_connector = 0, this.dispatch("serial:disconnected", e), _.$dispatchChange(this);
493
- }, y = async function(e) {
575
+ }, w = function(e = null) {
576
+ this.__internal__.serial.connected = !1, this.__internal__.aux_port_connector = 0, this.dispatch("serial:disconnected", e), h.$dispatchChange(this);
577
+ }, U = function(e) {
578
+ this.__internal__.serial.aux_connecting = e.detail.active ? "connecting" : "finished";
579
+ }, v = async function(e) {
494
580
  const t = this.__internal__.serial.port;
495
581
  if (!t || t && (!t.readable || !t.writable))
496
- throw l(this, r, f).call(this, { error: "Port is closed, not readable or writable." }), new Error("The port is closed or is not readable/writable");
582
+ throw a(this, n, w).call(this, { error: "Port is closed, not readable or writable." }), new Error("The port is closed or is not readable/writable");
497
583
  const i = this.validateBytes(e);
498
- if (t.writable === null) return;
499
- const s = t.writable.getWriter();
500
- await s.write(i), s.releaseLock();
501
- }, h = function(e = new Uint8Array([]), t = null) {
584
+ if (this.useRTSCTS && await a(this, n, k).call(this, t, 5e3), t.writable === null) return;
585
+ const r = t.writable.getWriter();
586
+ await r.write(i), r.releaseLock();
587
+ }, k = async function(e, t = 5e3) {
588
+ const i = Date.now();
589
+ for (; ; ) {
590
+ if (Date.now() - i > t)
591
+ throw new Error("Timeout waiting for clearToSend signal");
592
+ const { clearToSend: r } = await e.getSignals();
593
+ if (r) return;
594
+ await L(100);
595
+ }
596
+ }, p = function(e = new Uint8Array([]), t = !1) {
502
597
  if (e && e.length > 0) {
503
598
  const i = this.__internal__.serial.connected;
504
- if (this.__internal__.serial.connected = l(this, r, d).call(this, this.__internal__.serial.port), _.$dispatchChange(this), !i && this.__internal__.serial.connected && this.dispatch("serial:connected"), this.__internal__.interval.reconnection && (clearInterval(this.__internal__.interval.reconnection), this.__internal__.interval.reconnection = 0), this.__internal__.timeout.until_response && (clearTimeout(this.__internal__.timeout.until_response), this.__internal__.timeout.until_response = 0), this.__internal__.serial.response.as === "hex")
505
- this.serialMessage(this.parseUint8ToHex(e));
599
+ if (this.__internal__.serial.connected = a(this, n, y).call(this, this.__internal__.serial.port), h.$dispatchChange(this), !i && this.__internal__.serial.connected && (this.dispatch("serial:connected"), a(this, n, m).call(this, !1)), this.__internal__.interval.reconnection && (clearInterval(this.__internal__.interval.reconnection), this.__internal__.interval.reconnection = 0), this.__internal__.timeout.until_response && (clearTimeout(this.__internal__.timeout.until_response), this.__internal__.timeout.until_response = 0), this.__internal__.serial.response.as === "hex")
600
+ t ? this.serialCorruptMessage(this.parseUint8ToHex(e)) : this.serialMessage(this.parseUint8ToHex(e));
506
601
  else if (this.__internal__.serial.response.as === "uint8")
507
- this.serialMessage(e);
602
+ t ? this.serialCorruptMessage(e) : this.serialMessage(e);
508
603
  else if (this.__internal__.serial.response.as === "string") {
509
- const s = this.parseUint8ArrayToString(e);
604
+ const r = this.parseUint8ArrayToString(e);
510
605
  if (this.__internal__.serial.response.limiter !== null) {
511
- const c = s.split(this.__internal__.serial.response.limiter);
512
- for (const p in c)
513
- c[p] && this.serialMessage(c[p]);
606
+ const _ = r.split(this.__internal__.serial.response.limiter);
607
+ for (const c in _)
608
+ _[c] && (t ? this.serialCorruptMessage(_[c]) : this.serialMessage(_[c]));
514
609
  } else
515
- this.serialMessage(s);
610
+ t ? this.serialCorruptMessage(r) : this.serialMessage(r);
516
611
  } else {
517
- const s = this.stringToArrayBuffer(this.parseUint8ArrayToString(e));
518
- this.serialMessage(s);
612
+ const r = this.stringToArrayBuffer(this.parseUint8ArrayToString(e));
613
+ t ? this.serialCorruptMessage(r) : this.serialMessage(r);
519
614
  }
520
- } else
521
- this.serialCorruptMessage(e, t);
615
+ }
522
616
  this.__internal__.serial.queue.length !== 0 && this.dispatch("internal:queue", {});
523
- }, A = async function() {
617
+ }, I = async function() {
524
618
  const e = this.serialFilters, t = await navigator.serial.getPorts({ filters: e });
525
- return e.length === 0 ? t : t.filter((s) => {
526
- const c = s.getInfo();
527
- return e.some((p) => c.usbProductId === p.usbProductId && c.usbVendorId === p.usbVendorId);
528
- }).filter((s) => !l(this, r, d).call(this, s));
529
- }, E = function(e) {
619
+ return e.length === 0 ? t : t.filter((r) => {
620
+ const _ = r.getInfo();
621
+ return e.some((c) => _.usbProductId === c.usbProductId && _.usbVendorId === c.usbVendorId);
622
+ }).filter((r) => !a(this, n, y).call(this, r));
623
+ }, P = function(e) {
530
624
  if (e) {
531
625
  const t = this.__internal__.serial.response.buffer, i = new Uint8Array(t.length + e.byteLength);
532
626
  i.set(t, 0), i.set(new Uint8Array(e), t.length), this.__internal__.serial.response.buffer = i;
533
627
  }
534
- }, x = async function() {
628
+ }, $ = async function() {
535
629
  this.__internal__.serial.time_until_send_bytes && (clearTimeout(this.__internal__.serial.time_until_send_bytes), this.__internal__.serial.time_until_send_bytes = 0), this.__internal__.serial.time_until_send_bytes = setTimeout(() => {
536
- this.__internal__.serial.response.buffer && l(this, r, h).call(this, this.__internal__.serial.response.buffer), this.__internal__.serial.response.buffer = new Uint8Array(0);
537
- }, 400);
538
- }, T = async function() {
539
- if (this.__internal__.serial.response.length !== null) {
540
- if (this.__internal__.serial.response.length === this.__internal__.serial.response.buffer.length)
541
- l(this, r, h).call(this, this.__internal__.serial.response.buffer), this.__internal__.serial.response.buffer = new Uint8Array(0);
542
- else if (this.__internal__.serial.response.length < this.__internal__.serial.response.buffer.length) {
543
- let e = new Uint8Array(0);
544
- for (let i = 0; i < this.__internal__.serial.response.length; i++)
545
- e[i] = this.__internal__.serial.response.buffer[i];
546
- if (e.length === this.__internal__.serial.response.length) {
547
- l(this, r, h).call(this, e), this.__internal__.serial.response.buffer = new Uint8Array(0);
548
- return;
549
- }
550
- e = new Uint8Array(0);
551
- const t = this.__internal__.serial.response.length * 2;
552
- if (this.__internal__.serial.response.buffer.length === t) {
553
- for (let i = 14; i < t; i++)
554
- e[i - this.__internal__.serial.response.length] = this.__internal__.serial.response.buffer[i];
555
- e.length === this.__internal__.serial.response.length && (l(this, r, h).call(this, e), this.__internal__.serial.response.buffer = new Uint8Array(0));
630
+ this.__internal__.serial.response.buffer && a(this, n, p).call(this, this.__internal__.serial.response.buffer), this.__internal__.serial.response.buffer = new Uint8Array(0);
631
+ }, this.__internal__.serial.free_timeout_ms || 50);
632
+ }, D = async function() {
633
+ const e = this.__internal__.serial.response.length;
634
+ let t = this.__internal__.serial.response.buffer;
635
+ if (this.__internal__.serial.time_until_send_bytes && (clearTimeout(this.__internal__.serial.time_until_send_bytes), this.__internal__.serial.time_until_send_bytes = 0), !(e === null || !t || t.length === 0)) {
636
+ for (; t.length >= e; ) {
637
+ const i = t.slice(0, e);
638
+ a(this, n, p).call(this, i), t = t.slice(e);
639
+ }
640
+ this.__internal__.serial.response.buffer = t, t.length > 0 && (this.__internal__.serial.time_until_send_bytes = setTimeout(() => {
641
+ a(this, n, p).call(this, this.__internal__.serial.response.buffer, !0);
642
+ }, this.__internal__.serial.free_timeout_ms || 50));
643
+ }
644
+ }, R = async function() {
645
+ const {
646
+ limiter: e,
647
+ prefixLimiter: t = !1,
648
+ sufixLimiter: i = !0
649
+ } = this.__internal__.serial.response;
650
+ if (!e)
651
+ throw new Error("No limiter defined for delimited serial response");
652
+ const r = this.__internal__.serial.response.buffer;
653
+ if (!e || !r || r.length === 0) return;
654
+ this.__internal__.serial.time_until_send_bytes && (clearTimeout(this.__internal__.serial.time_until_send_bytes), this.__internal__.serial.time_until_send_bytes = 0);
655
+ let c = new TextDecoder().decode(r);
656
+ const b = [];
657
+ if (typeof e == "string") {
658
+ let u;
659
+ if (t && i)
660
+ u = new RegExp(`${e}([^${e}]+)${e}`, "g");
661
+ else if (t)
662
+ u = new RegExp(`${e}([^${e}]*)`, "g");
663
+ else if (i)
664
+ u = new RegExp(`([^${e}]+)${e}`, "g");
665
+ else
666
+ return;
667
+ let f, d = 0;
668
+ for (; (f = u.exec(c)) !== null; )
669
+ b.push(new TextEncoder().encode(f[1])), d = u.lastIndex;
670
+ c = c.slice(d);
671
+ } else if (e instanceof RegExp) {
672
+ let u, f = 0;
673
+ if (t && i) {
674
+ const d = new RegExp(`${e.source}(.*?)${e.source}`, "g");
675
+ for (; (u = d.exec(c)) !== null; )
676
+ b.push(new TextEncoder().encode(u[1])), f = d.lastIndex;
677
+ } else if (i)
678
+ for (; (u = e.exec(c)) !== null; ) {
679
+ const d = u.index, C = c.slice(f, d);
680
+ b.push(new TextEncoder().encode(C)), f = e.lastIndex;
556
681
  }
682
+ else if (t) {
683
+ const d = c.split(e);
684
+ d.shift();
685
+ for (const C of d)
686
+ b.push(new TextEncoder().encode(C));
687
+ c = "";
557
688
  }
558
- }
559
- }, S = async function() {
689
+ c = c.slice(f);
690
+ }
691
+ for (const u of b)
692
+ a(this, n, p).call(this, u);
693
+ const S = new TextEncoder().encode(c);
694
+ this.__internal__.serial.response.buffer = S, S.length > 0 && (this.__internal__.serial.time_until_send_bytes = setTimeout(() => {
695
+ a(this, n, p).call(this, this.__internal__.serial.response.buffer, !0), this.__internal__.serial.response.buffer = new Uint8Array(0);
696
+ }, this.__internal__.serial.free_timeout_ms ?? 50));
697
+ }, M = async function() {
560
698
  const e = this.__internal__.serial.port;
561
699
  if (!e || !e.readable) throw new Error("Port is not readable");
562
- for (; e.readable && this.__internal__.serial.keep_reading; ) {
563
- const t = e.readable.getReader();
564
- this.__internal__.serial.reader = t;
565
- try {
566
- let i = !0;
567
- for (; i; ) {
568
- const { value: s, done: c } = await t.read();
569
- if (c) {
570
- t.releaseLock(), this.__internal__.serial.keep_reading = !1, i = !1;
571
- break;
572
- }
573
- l(this, r, E).call(this, s), this.__internal__.serial.response.length === null ? await l(this, r, x).call(this) : await l(this, r, T).call(this);
574
- }
575
- } catch (i) {
576
- this.serialErrors(i);
577
- } finally {
578
- t.releaseLock();
700
+ const t = e.readable.getReader();
701
+ this.__internal__.serial.reader = t;
702
+ try {
703
+ for (; this.__internal__.serial.keep_reading; ) {
704
+ const { value: i, done: r } = await t.read();
705
+ if (r) break;
706
+ a(this, n, P).call(this, i), this.__internal__.serial.response.delimited ? await a(this, n, R).call(this) : this.__internal__.serial.response.length === null ? await a(this, n, $).call(this) : await a(this, n, D).call(this);
579
707
  }
580
- }
581
- this.__internal__.serial.keep_reading = !0, this.__internal__.serial.port && await this.__internal__.serial.port.close();
582
- }, U = async function() {
708
+ } catch (i) {
709
+ this.serialErrors(i);
710
+ } finally {
711
+ t.releaseLock(), this.__internal__.serial.keep_reading = !0, this.__internal__.serial.port && await this.__internal__.serial.port.close();
712
+ }
713
+ }, m = function(e) {
714
+ e !== this.__internal__.serial.connecting && (this.__internal__.serial.connecting = e, e ? this.dispatch("serial:connecting", { active: !0 }) : this.dispatch("serial:connecting", { active: !1 }));
715
+ }, q = async function() {
583
716
  return typeof window > "u" ? !1 : "serial" in navigator && "forget" in SerialPort.prototype && this.__internal__.serial.port ? (await this.__internal__.serial.port.forget(), !0) : !1;
584
- }, k = function() {
717
+ }, N = function() {
585
718
  [
586
719
  "serial:connected",
587
720
  "serial:connecting",
@@ -591,6 +724,7 @@ r = new WeakSet(), d = function(e) {
591
724
  "serial:sent",
592
725
  "serial:soft-reload",
593
726
  "serial:message",
727
+ "serial:corrupt-message",
594
728
  "unknown",
595
729
  "serial:need-permission",
596
730
  "serial:lost",
@@ -600,21 +734,21 @@ r = new WeakSet(), d = function(e) {
600
734
  ].forEach((t) => {
601
735
  this.serialRegisterAvailableListener(t);
602
736
  });
603
- }, P = function() {
737
+ }, O = function() {
604
738
  const e = this;
605
739
  this.on("internal:queue", async () => {
606
740
  var t;
607
- await l(t = e, r, D).call(t);
608
- }), l(this, r, L).call(this);
609
- }, L = function() {
741
+ await a(t = e, n, H).call(t);
742
+ }), a(this, n, F).call(this);
743
+ }, F = function() {
610
744
  const e = this;
611
745
  navigator.serial.addEventListener("connect", async () => {
612
746
  e.isDisconnected && await e.serialConnect().catch(() => {
613
747
  });
614
748
  });
615
- }, D = async function() {
616
- if (!l(this, r, d).call(this, this.__internal__.serial.port)) {
617
- l(this, r, f).call(this, { error: "Port is closed, not readable or writable." }), await this.serialConnect();
749
+ }, H = async function() {
750
+ if (!a(this, n, y).call(this, this.__internal__.serial.port)) {
751
+ a(this, n, w).call(this, { error: "Port is closed, not readable or writable." }), await this.serialConnect();
618
752
  return;
619
753
  }
620
754
  if (this.__internal__.timeout.until_response || this.__internal__.serial.queue.length === 0) return;
@@ -622,23 +756,23 @@ r = new WeakSet(), d = function(e) {
622
756
  let t = this.__internal__.time.response_general;
623
757
  if (e.action === "connect" && (t = this.__internal__.time.response_connection), this.__internal__.timeout.until_response = setTimeout(async () => {
624
758
  await this.timeout(e.bytes, e.action);
625
- }, t), this.__internal__.serial.last_action = e.action ?? "unknown", await l(this, r, y).call(this, e.bytes), this.dispatch("serial:sent", {
759
+ }, t), this.__internal__.serial.last_action = e.action ?? "unknown", await a(this, n, v).call(this, e.bytes), this.dispatch("serial:sent", {
626
760
  action: e.action,
627
761
  bytes: e.bytes
628
762
  }), this.__internal__.auto_response) {
629
- let s = new Uint8Array(0);
763
+ let r = new Uint8Array(0);
630
764
  try {
631
- s = this.validateBytes(this.__internal__.serial.auto_response);
632
- } catch (c) {
633
- this.serialErrors(c);
765
+ r = this.validateBytes(this.__internal__.serial.auto_response);
766
+ } catch (_) {
767
+ this.serialErrors(_);
634
768
  }
635
- l(this, r, h).call(this, s, null);
769
+ a(this, n, p).call(this, r);
636
770
  }
637
771
  const i = [...this.__internal__.serial.queue];
638
772
  this.__internal__.serial.queue = i.splice(1);
639
- }, $ = function(e = 1) {
640
- this.__internal__.device_number = e, this.__internal__.serial.bytes_connection = this.serialSetConnectionConstant(e);
641
- }, q = function() {
773
+ }, j = function(e = 1) {
774
+ this.__internal__.device_number = e, !this.__internal__.bypassSerialBytesConnection && (this.__internal__.serial.bytes_connection = this.serialSetConnectionConstant(e));
775
+ }, W = function() {
642
776
  this.__internal__.last_error = {
643
777
  message: null,
644
778
  action: null,
@@ -647,7 +781,7 @@ r = new WeakSet(), d = function(e) {
647
781
  };
648
782
  };
649
783
  export {
650
- R as Core,
651
- _ as Devices,
652
- C as Dispatcher
784
+ K as Core,
785
+ h as Devices,
786
+ B as Dispatcher
653
787
  };
@@ -1,4 +1,4 @@
1
- (function(o,_){typeof exports=="object"&&typeof module<"u"?_(exports):typeof define=="function"&&define.amd?define(["exports"],_):(o=typeof globalThis<"u"?globalThis:o||self,_(o.WebSerialCore={}))})(this,function(o){"use strict";var O=Object.defineProperty;var C=o=>{throw TypeError(o)};var B=(o,_,h)=>_ in o?O(o,_,{enumerable:!0,configurable:!0,writable:!0,value:h}):o[_]=h;var p=(o,_,h)=>B(o,typeof _!="symbol"?_+"":_,h),R=(o,_,h)=>_.has(o)||C("Cannot "+h);var A=(o,_,h)=>_.has(o)?C("Cannot add the same private member more than once"):_ instanceof WeakSet?_.add(o):_.set(o,h);var l=(o,_,h)=>(R(o,_,"access private method"),h);var n,f,y,m,d,E,T,S,x,U,k,P,D,L,$,q,I;class _ extends CustomEvent{constructor(r,e){super(r,e)}}class h extends EventTarget{constructor(){super(...arguments);p(this,"__listeners__",{debug:!1});p(this,"__debug__",!1)}dispatch(e,t=null){const i=new _(e,{detail:t});this.dispatchEvent(i),this.__debug__&&this.dispatchEvent(new _("debug",{detail:{type:e,data:t}}))}dispatchAsync(e,t=null,i=100){const s=this;setTimeout(()=>{s.dispatch(e,t)},i)}on(e,t){typeof this.__listeners__[e]<"u"&&!this.__listeners__[e]&&(this.__listeners__[e]=!0),this.addEventListener(e,t)}off(e,t){this.removeEventListener(e,t)}serialRegisterAvailableListener(e){this.__listeners__[e]||(this.__listeners__[e]=!1)}get availableListeners(){return Object.keys(this.__listeners__).sort().map(t=>({type:t,listening:this.__listeners__[t]}))}}const a=class a extends h{constructor(){super(),["change"].forEach(e=>{this.serialRegisterAvailableListener(e)})}static $dispatchChange(r=null){r&&r.$checkAndDispatchConnection(),a.instance.dispatch("change",{devices:a.devices,dispatcher:r})}static typeError(r){const e=new Error;throw e.message=`Type ${r} is not supported`,e.name="DeviceTypeError",e}static registerType(r){typeof a.devices[r]>"u"&&(a.devices[r]={})}static add(r){const e=r.typeDevice;typeof a.devices[e]>"u"&&(a.devices[e]={});const t=r.uuid;if(typeof a.devices[e]>"u"&&a.typeError(e),a.devices[e][t])throw new Error(`Device with id ${t} already exists`);return a.devices[e][t]=r,a.$dispatchChange(r),Object.keys(a.devices[e]).indexOf(t)}static get(r,e){return typeof a.devices[r]>"u"&&(a.devices[r]={}),typeof a.devices[r]>"u"&&a.typeError(r),a.devices[r][e]}static getAll(r=null){return r===null?a.devices:(typeof a.devices[r]>"u"&&a.typeError(r),a.devices[r])}static getList(){return Object.values(a.devices).map(e=>Object.values(e)).flat()}static getByNumber(r,e){return typeof a.devices[r]>"u"&&a.typeError(r),Object.values(a.devices[r]).find(i=>i.deviceNumber===e)??null}static getCustom(r,e=1){return typeof a.devices[r]>"u"&&a.typeError(r),Object.values(a.devices[r]).find(i=>i.deviceNumber===e)??null}};p(a,"instance"),p(a,"devices",{});let c=a;c.instance||(c.instance=new c);function v(b=100){return new Promise(r=>setTimeout(()=>r(),b))}function M(){return"serial"in navigator}const w={baudRate:9600,dataBits:8,stopBits:1,parity:"none",bufferSize:32768,flowControl:"none"};class N extends h{constructor({filters:e=null,config_port:t=w,no_device:i=1,device_listen_on_channel:s=1}={filters:null,config_port:w,no_device:1,device_listen_on_channel:1}){super();A(this,n);p(this,"__internal__",{auto_response:!1,device_number:1,aux_port_connector:0,last_error:{message:null,action:null,code:null,no_code:0},serial:{connected:!1,port:null,last_action:null,response:{length:null,buffer:new Uint8Array([]),as:"uint8",replacer:/[\n\r]+/g,limiter:null},reader:null,input_done:null,output_done:null,input_stream:null,output_stream:null,keep_reading:!0,time_until_send_bytes:void 0,delay_first_connection:200,bytes_connection:null,filters:[],config_port:w,queue:[],auto_response:["DD","DD"]},device:{type:"unknown",id:window.crypto.randomUUID(),listen_on_port:null},time:{response_connection:500,response_general:2e3},timeout:{until_response:0},interval:{reconnection:0}});if(!("serial"in navigator))throw new Error("Web Serial not supported");e&&(this.serialFilters=e),t&&(this.serialConfigPort=t),i&&l(this,n,q).call(this,i),s&&["number","string"].includes(typeof s)&&(this.listenOnChannel=s),l(this,n,P).call(this),l(this,n,D).call(this)}set listenOnChannel(e){if(typeof e=="string"&&(e=parseInt(e)),isNaN(e)||e<1||e>255)throw new Error("Invalid port number");this.__internal__.device.listen_on_port=e,this.__internal__.serial.bytes_connection=this.serialSetConnectionConstant(e)}get lastAction(){return this.__internal__.serial.last_action}get listenOnChannel(){return this.__internal__.device.listen_on_port??1}set serialFilters(e){this.__internal__.serial.filters=e}get serialFilters(){return this.__internal__.serial.filters}set serialConfigPort(e){this.__internal__.serial.config_port=e}get serialConfigPort(){return this.__internal__.serial.config_port}get isConnected(){const e=this.__internal__.serial.connected,t=l(this,n,f).call(this,this.__internal__.serial.port);return e&&!t&&l(this,n,y).call(this,{error:"Port is closed, not readable or writable."}),this.__internal__.serial.connected=t,this.__internal__.serial.connected}get isDisconnected(){const e=this.__internal__.serial.connected,t=l(this,n,f).call(this,this.__internal__.serial.port);return!e&&t&&(this.dispatch("serial:connected"),c.$dispatchChange(this)),this.__internal__.serial.connected=t,!this.__internal__.serial.connected}get deviceNumber(){return this.__internal__.device_number}get uuid(){return this.__internal__.device.id}get typeDevice(){return this.__internal__.device.type}get queue(){return this.__internal__.serial.queue}async timeout(e,t){this.__internal__.last_error.message="Operation response timed out.",this.__internal__.last_error.action=t,this.__internal__.last_error.code=e,this.__internal__.timeout.until_response&&(clearTimeout(this.__internal__.timeout.until_response),this.__internal__.timeout.until_response=0),t==="connect"?(this.__internal__.serial.connected=!1,this.dispatch("serial:reconnect",{}),c.$dispatchChange(this)):t==="connection:start"&&(await this.serialDisconnect(),this.__internal__.serial.connected=!1,this.__internal__.aux_port_connector+=1,c.$dispatchChange(this),await this.serialConnect()),this.dispatch("serial:timeout",{...this.__internal__.last_error,bytes:e,action:t})}async disconnect(e=null){await this.serialDisconnect(),l(this,n,y).call(this,e)}async connect(){return new Promise((e,t)=>{M()||t("Web Serial not supported"),setTimeout(async()=>{await v(499),await this.serialConnect(),this.isConnected?e(`${this.typeDevice} device ${this.deviceNumber} connected`):t(`${this.typeDevice} device ${this.deviceNumber} not connected`)},1)})}async serialDisconnect(){try{const e=this.__internal__.serial.reader,t=this.__internal__.serial.output_stream;e&&(await e.cancel().catch(s=>this.serialErrors(s)),await this.__internal__.serial.input_done),t&&(await t.getWriter().close(),await this.__internal__.serial.output_done),this.__internal__.serial.connected&&this.__internal__.serial&&this.__internal__.serial.port&&await this.__internal__.serial.port.close()}catch(e){this.serialErrors(e)}finally{this.__internal__.serial.reader=null,this.__internal__.serial.input_done=null,this.__internal__.serial.output_stream=null,this.__internal__.serial.output_done=null,this.__internal__.serial.connected=!1,this.__internal__.serial.port=null,c.$dispatchChange(this)}}getResponseAsArrayBuffer(){this.__internal__.serial.response.as="arraybuffer"}getResponseAsArrayHex(){this.__internal__.serial.response.as="hex"}getResponseAsUint8Array(){this.__internal__.serial.response.as="uint8"}getResponseAsString(){this.__internal__.serial.response.as="string"}async serialPortsSaved(e){const t=this.serialFilters;if(this.__internal__.aux_port_connector<e.length){const i=this.__internal__.aux_port_connector;this.__internal__.serial.port=e[i]}else this.__internal__.aux_port_connector=0,this.__internal__.serial.port=await navigator.serial.requestPort({filters:t});if(!this.__internal__.serial.port)throw new Error("Select another port please")}serialErrors(e){const t=e.toString().toLowerCase();switch(!0){case t.includes("must be handling a user gesture to show a permission request"):case t.includes("the port is closed."):case t.includes("the port is closed or is not writable"):case t.includes("the port is closed or is not readable"):case t.includes("the port is closed or is not readable/writable"):case t.includes("select another port please"):case t.includes("no port selected by the user"):case t.includes("this readable stream reader has been released and cannot be used to cancel its previous owner stream"):this.dispatch("serial:need-permission",{}),c.$dispatchChange(this);break;case t.includes("the port is already open."):case t.includes("failed to open serial port"):this.serialDisconnect().then(async()=>{this.__internal__.aux_port_connector+=1,await this.serialConnect()});break;case t.includes("cannot read properties of undefined (reading 'writable')"):case t.includes("cannot read properties of null (reading 'writable')"):case t.includes("cannot read property 'writable' of null"):case t.includes("cannot read property 'writable' of undefined"):this.serialDisconnect().then(async()=>{await this.serialConnect()});break;case t.includes("'close' on 'serialport': a call to close() is already in progress."):break;case t.includes("failed to execute 'open' on 'serialport': a call to open() is already in progress."):break;case t.includes("the port is already closed."):break;case t.includes("the device has been lost"):this.dispatch("serial:lost",{}),c.$dispatchChange(this);break;case t.includes("navigator.serial is undefined"):this.dispatch("serial:unsupported",{});break;default:console.error(e);break}this.dispatch("serial:error",e)}async serialConnect(){try{this.dispatch("serial:connecting",{});const e=await l(this,n,E).call(this);if(e.length>0)await this.serialPortsSaved(e);else{const s=this.serialFilters;this.__internal__.serial.port=await navigator.serial.requestPort({filters:s})}const t=this.__internal__.serial.port;if(!t)throw new Error("No port selected by the user");await t.open(this.serialConfigPort);const i=this;t.onconnect=s=>{console.log(s),i.dispatch("serial:connected",s),c.$dispatchChange(this),i.__internal__.serial.queue.length>0&&i.dispatch("internal:queue",{})},t.ondisconnect=async()=>{await i.disconnect()},await v(this.__internal__.serial.delay_first_connection),this.__internal__.timeout.until_response=setTimeout(async()=>{await i.timeout(i.__internal__.serial.bytes_connection??[],"connection:start")},this.__internal__.time.response_connection),this.__internal__.serial.last_action="connect",await l(this,n,m).call(this,this.__internal__.serial.bytes_connection??[]),this.dispatch("serial:sent",{action:"connect",bytes:this.__internal__.serial.bytes_connection}),this.__internal__.auto_response&&l(this,n,d).call(this,this.__internal__.serial.auto_response,null),await l(this,n,U).call(this)}catch(e){this.serialErrors(e)}}async serialForget(){return await l(this,n,k).call(this)}decToHex(e){return typeof e=="string"&&(e=parseInt(e,10)),e.toString(16)}hexToDec(e){return parseInt(e,16)}hexMaker(e="00",t=2){return e.toString().padStart(t,"0").toLowerCase()}add0x(e){const t=[];return e.forEach((i,s)=>{t[s]="0x"+i}),t}bytesToHex(e){return this.add0x(Array.from(e,t=>this.hexMaker(t)))}validateBytes(e){let t=new Uint8Array(0);if(e instanceof Uint8Array)t=e;else if(typeof e=="string")t=this.parseStringToTextEncoder(e);else if(Array.isArray(e)&&typeof e[0]=="string")t=this.stringArrayToUint8Array(e);else if(Array.isArray(e)&&typeof e[0]=="number")t=new Uint8Array(e);else throw new Error("Invalid data type");return t}async appendToQueue(e,t){const i=this.validateBytes(e);if(["connect","connection:start"].includes(t)){if(this.__internal__.serial.connected)return;await this.serialConnect();return}this.__internal__.serial.queue.push({bytes:i,action:t}),this.dispatch("internal:queue",{})}serialSetConnectionConstant(e=1){throw new Error(`Method not implemented 'serialSetConnectionConstant' to listen on channel ${e}`)}serialMessage(e){throw console.log(e),new Error("Method not implemented 'serialMessage'")}serialCorruptMessage(e,t){throw console.log(e,t),new Error("Method not implemented 'serialCorruptMessage'")}clearSerialQueue(){this.__internal__.serial.queue=[]}sumHex(e){let t=0;return e.forEach(i=>{t+=parseInt(i,16)}),t.toString(16)}toString(){return JSON.stringify({__class:this.typeDevice,device_number:this.deviceNumber,uuid:this.uuid,connected:this.isConnected,connection:this.__internal__.serial.bytes_connection})}softReload(){l(this,n,I).call(this),this.dispatch("serial:soft-reload",{})}async sendConnect(){if(!this.__internal__.serial.bytes_connection)throw new Error("No connection bytes defined");await this.appendToQueue(this.__internal__.serial.bytes_connection,"connect")}async sendCustomCode({code:e=[]}={code:[]}){if(e===null||e.length===0)throw new Error("No data to send");await this.appendToQueue(e,"custom")}stringToArrayHex(e){return Array.from(e).map(t=>t.charCodeAt(0).toString(16))}stringToArrayBuffer(e,t=`
1
+ (function(l,_){typeof exports=="object"&&typeof module<"u"?_(exports):typeof define=="function"&&define.amd?define(["exports"],_):(l=typeof globalThis<"u"?globalThis:l||self,_(l.WebSerialCore={}))})(this,function(l){"use strict";var G=Object.defineProperty;var B=l=>{throw TypeError(l)};var J=(l,_,d)=>_ in l?G(l,_,{enumerable:!0,configurable:!0,writable:!0,value:d}):l[_]=d;var m=(l,_,d)=>J(l,typeof _!="symbol"?_+"":_,d),K=(l,_,d)=>_.has(l)||B("Cannot "+d);var U=(l,_,d)=>_.has(l)?B("Cannot add the same private member more than once"):_ instanceof WeakSet?_.add(l):_.set(l,d);var a=(l,_,d)=>(K(l,_,"access private method"),d);var n,b,v,k,E,D,g,I,P,$,R,M,q,w,N,O,F,H,j,W,Q;class _ extends CustomEvent{constructor(r,e){super(r,e)}}class d extends EventTarget{constructor(){super(...arguments);m(this,"__listeners__",{debug:!1});m(this,"__debug__",!1)}dispatch(e,t=null){const i=new _(e,{detail:t});this.dispatchEvent(i),this.__debug__&&this.dispatchEvent(new _("debug",{detail:{type:e,data:t}}))}dispatchAsync(e,t=null,i=100){const s=this;setTimeout(()=>{s.dispatch(e,t)},i)}on(e,t){typeof this.__listeners__[e]<"u"&&!this.__listeners__[e]&&(this.__listeners__[e]=!0),this.addEventListener(e,t)}off(e,t){this.removeEventListener(e,t)}serialRegisterAvailableListener(e){this.__listeners__[e]||(this.__listeners__[e]=!1)}get availableListeners(){return Object.keys(this.__listeners__).sort().map(t=>({type:t,listening:this.__listeners__[t]}))}}const o=class o extends d{constructor(){super(),["change"].forEach(e=>{this.serialRegisterAvailableListener(e)})}static $dispatchChange(r=null){r&&r.$checkAndDispatchConnection(),o.instance.dispatch("change",{devices:o.devices,dispatcher:r})}static typeError(r){const e=new Error;throw e.message=`Type ${r} is not supported`,e.name="DeviceTypeError",e}static registerType(r){typeof o.devices[r]>"u"&&(o.devices[r]={})}static add(r){const e=r.typeDevice;typeof o.devices[e]>"u"&&(o.devices[e]={});const t=r.uuid;if(typeof o.devices[e]>"u"&&o.typeError(e),o.devices[e][t])throw new Error(`Device with id ${t} already exists`);return o.devices[e][t]=r,o.$dispatchChange(r),Object.keys(o.devices[e]).indexOf(t)}static get(r,e){return typeof o.devices[r]>"u"&&(o.devices[r]={}),typeof o.devices[r]>"u"&&o.typeError(r),o.devices[r][e]}static getAll(r=null){return r===null?o.devices:(typeof o.devices[r]>"u"&&o.typeError(r),o.devices[r])}static getList(){return Object.values(o.devices).map(e=>Object.values(e)).flat()}static getByNumber(r,e){return typeof o.devices[r]>"u"&&o.typeError(r),Object.values(o.devices[r]).find(i=>i.deviceNumber===e)??null}static getCustom(r,e=1){return typeof o.devices[r]>"u"&&o.typeError(r),Object.values(o.devices[r]).find(i=>i.deviceNumber===e)??null}};m(o,"instance"),m(o,"devices",{});let u=o;u.instance||(u.instance=new u);function A(x=100){return new Promise(r=>setTimeout(()=>r(),x))}function V(){return"serial"in navigator}const S={baudRate:9600,dataBits:8,stopBits:1,parity:"none",bufferSize:32768,flowControl:"none"};class z extends d{constructor({filters:e=null,config_port:t=S,no_device:i=1,device_listen_on_channel:s=1,bypassSerialBytesConnection:c=!1}={filters:null,config_port:S,no_device:1,device_listen_on_channel:1,bypassSerialBytesConnection:!1}){super();U(this,n);m(this,"__internal__",{bypassSerialBytesConnection:!1,auto_response:!1,device_number:1,aux_port_connector:0,last_error:{message:null,action:null,code:null,no_code:0},serial:{aux_connecting:"idle",connecting:!1,connected:!1,port:null,last_action:null,response:{length:null,buffer:new Uint8Array([]),as:"uint8",replacer:/[\n\r]+/g,limiter:null,prefixLimiter:!1,sufixLimiter:!0,delimited:!1},reader:null,input_done:null,output_done:null,input_stream:null,output_stream:null,keep_reading:!0,time_until_send_bytes:void 0,delay_first_connection:200,bytes_connection:null,filters:[],config_port:S,queue:[],auto_response:["DD","DD"],free_timeout_ms:50,useRTSCTS:!1},device:{type:"unknown",id:window.crypto.randomUUID(),listen_on_port:null},time:{response_connection:500,response_general:2e3},timeout:{until_response:0},interval:{reconnection:0}});if(!("serial"in navigator))throw new Error("Web Serial not supported");e&&(this.serialFilters=e),t&&(this.serialConfigPort=t),c&&(this.__internal__.bypassSerialBytesConnection=c),i&&a(this,n,W).call(this,i),s&&["number","string"].includes(typeof s)&&(this.listenOnChannel=s),a(this,n,O).call(this),a(this,n,F).call(this)}set listenOnChannel(e){if(typeof e=="string"&&(e=parseInt(e)),isNaN(e)||e<1||e>255)throw new Error("Invalid port number");this.__internal__.device.listen_on_port=e,!this.__internal__.bypassSerialBytesConnection&&(this.__internal__.serial.bytes_connection=this.serialSetConnectionConstant(e))}get lastAction(){return this.__internal__.serial.last_action}get listenOnChannel(){return this.__internal__.device.listen_on_port??1}set serialFilters(e){if(this.isConnected)throw new Error("Cannot change serial filters while connected");this.__internal__.serial.filters=e}get serialFilters(){return this.__internal__.serial.filters}set serialConfigPort(e){if(this.isConnected)throw new Error("Cannot change serial filters while connected");this.__internal__.serial.config_port=e}get serialConfigPort(){return this.__internal__.serial.config_port}get useRTSCTS(){return this.__internal__.serial.useRTSCTS}set useRTSCTS(e){this.__internal__.serial.useRTSCTS=e}get isConnected(){const e=this.__internal__.serial.connected,t=a(this,n,b).call(this,this.__internal__.serial.port);return e&&!t&&a(this,n,v).call(this,{error:"Port is closed, not readable or writable."}),this.__internal__.serial.connected=t,this.__internal__.serial.connected}get isConnecting(){return this.__internal__.serial.connecting}get isDisconnected(){const e=this.__internal__.serial.connected,t=a(this,n,b).call(this,this.__internal__.serial.port);return!e&&t&&(this.dispatch("serial:connected"),a(this,n,w).call(this,!1),u.$dispatchChange(this)),this.__internal__.serial.connected=t,!this.__internal__.serial.connected}get deviceNumber(){return this.__internal__.device_number}get uuid(){return this.__internal__.device.id}get typeDevice(){return this.__internal__.device.type}get queue(){return this.__internal__.serial.queue}get responseDelimited(){return this.__internal__.serial.response.delimited}set responseDelimited(e){if(typeof e!="boolean")throw new Error("responseDelimited must be a boolean");this.__internal__.serial.response.delimited=e}get responsePrefixLimited(){return this.__internal__.serial.response.prefixLimiter}set responsePrefixLimited(e){if(typeof e!="boolean")throw new Error("responsePrefixLimited must be a boolean");this.__internal__.serial.response.prefixLimiter=e}get responseSufixLimited(){return this.__internal__.serial.response.sufixLimiter}set responseSufixLimited(e){if(typeof e!="boolean")throw new Error("responseSufixLimited must be a boolean");this.__internal__.serial.response.sufixLimiter=e}get responseLimiter(){return this.__internal__.serial.response.limiter}set responseLimiter(e){if(typeof e!="string"&&!(e instanceof RegExp))throw new Error("responseLimiter must be a string or a RegExp");this.__internal__.serial.response.limiter=e}get fixedBytesMessage(){return this.__internal__.serial.response.length}set fixedBytesMessage(e){if(e!==null&&(typeof e!="number"||e<1))throw new Error("Invalid length for fixed bytes message");this.__internal__.serial.response.length=e}get timeoutBeforeResponseBytes(){return this.__internal__.serial.free_timeout_ms||50}set timeoutBeforeResponseBytes(e){if(e!==void 0&&(typeof e!="number"||e<1))throw new Error("Invalid timeout for response bytes");this.__internal__.serial.free_timeout_ms=e??50}get bypassSerialBytesConnection(){return this.__internal__.bypassSerialBytesConnection}set bypassSerialBytesConnection(e){if(typeof e!="boolean")throw new Error("bypassSerialBytesConnection must be a boolean");this.__internal__.bypassSerialBytesConnection=e}async timeout(e,t){this.__internal__.last_error.message="Operation response timed out.",this.__internal__.last_error.action=t,this.__internal__.last_error.code=e,this.__internal__.timeout.until_response&&(clearTimeout(this.__internal__.timeout.until_response),this.__internal__.timeout.until_response=0),t==="connect"?(this.__internal__.serial.connected=!1,this.dispatch("serial:reconnect",{}),u.$dispatchChange(this)):t==="connection:start"&&(await this.serialDisconnect(),this.__internal__.serial.connected=!1,this.__internal__.aux_port_connector+=1,u.$dispatchChange(this),await this.serialConnect()),this.dispatch("serial:timeout",{...this.__internal__.last_error,bytes:e,action:t})}async disconnect(e=null){await this.serialDisconnect(),a(this,n,v).call(this,e)}async connect(){return this.isConnected?!0:(this.__internal__.serial.aux_connecting="idle",new Promise((e,t)=>{V()||t("Web Serial not supported");const i=a(this,n,k).bind(this);this.on("serial:connecting",i);const s=setInterval(()=>{this.__internal__.serial.aux_connecting==="finished"?(clearInterval(s),this.__internal__.serial.aux_connecting="idle",this.off("serial:connecting",i),this.isConnected?e(!0):t(`${this.typeDevice} device ${this.deviceNumber} not connected`)):this.__internal__.serial.aux_connecting==="connecting"&&(this.__internal__.serial.aux_connecting="idle",this.dispatch("serial:connecting",{active:!0}))},100);this.serialConnect()}))}async serialDisconnect(){try{const e=this.__internal__.serial.reader,t=this.__internal__.serial.output_stream;e&&(await e.cancel().catch(s=>this.serialErrors(s)),await this.__internal__.serial.input_done),t&&(await t.getWriter().close(),await this.__internal__.serial.output_done),this.__internal__.serial.connected&&this.__internal__.serial&&this.__internal__.serial.port&&await this.__internal__.serial.port.close()}catch(e){this.serialErrors(e)}finally{this.__internal__.serial.reader=null,this.__internal__.serial.input_done=null,this.__internal__.serial.output_stream=null,this.__internal__.serial.output_done=null,this.__internal__.serial.connected=!1,this.__internal__.serial.port=null,u.$dispatchChange(this)}}getResponseAsArrayBuffer(){this.__internal__.serial.response.as="arraybuffer"}getResponseAsArrayHex(){this.__internal__.serial.response.as="hex"}getResponseAsUint8Array(){this.__internal__.serial.response.as="uint8"}getResponseAsString(){this.__internal__.serial.response.as="string"}async serialPortsSaved(e){const t=this.serialFilters;if(this.__internal__.aux_port_connector<e.length){const i=this.__internal__.aux_port_connector;this.__internal__.serial.port=e[i]}else this.__internal__.aux_port_connector=0,this.__internal__.serial.port=await navigator.serial.requestPort({filters:t});if(!this.__internal__.serial.port)throw new Error("Select another port please")}serialErrors(e){const t=e.toString().toLowerCase();switch(!0){case t.includes("must be handling a user gesture to show a permission request"):case t.includes("the port is closed."):case t.includes("the port is closed or is not writable"):case t.includes("the port is closed or is not readable"):case t.includes("the port is closed or is not readable/writable"):case t.includes("select another port please"):case t.includes("no port selected by the user"):case t.includes("this readable stream reader has been released and cannot be used to cancel its previous owner stream"):this.dispatch("serial:need-permission",{}),u.$dispatchChange(this);break;case t.includes("the port is already open."):case t.includes("failed to open serial port"):this.serialDisconnect().then(async()=>{this.__internal__.aux_port_connector+=1,await this.serialConnect()});break;case t.includes("cannot read properties of undefined (reading 'writable')"):case t.includes("cannot read properties of null (reading 'writable')"):case t.includes("cannot read property 'writable' of null"):case t.includes("cannot read property 'writable' of undefined"):this.serialDisconnect().then(async()=>{await this.serialConnect()});break;case t.includes("'close' on 'serialport': a call to close() is already in progress."):break;case t.includes("failed to execute 'open' on 'serialport': a call to open() is already in progress."):break;case t.includes("the port is already closed."):break;case t.includes("the device has been lost"):this.dispatch("serial:lost",{}),u.$dispatchChange(this);break;case t.includes("navigator.serial is undefined"):this.dispatch("serial:unsupported",{});break;default:console.error(e);break}this.dispatch("serial:error",e)}async serialConnect(){try{a(this,n,w).call(this,!0);const e=await a(this,n,I).call(this);if(e.length>0)await this.serialPortsSaved(e);else{const s=this.serialFilters;this.__internal__.serial.port=await navigator.serial.requestPort({filters:s})}const t=this.__internal__.serial.port;if(!t)throw new Error("No port selected by the user");await t.open(this.serialConfigPort);const i=this;t.onconnect=s=>{var c;i.dispatch("serial:connected",s),a(c=i,n,w).call(c,!1),u.$dispatchChange(this),i.__internal__.serial.queue.length>0&&i.dispatch("internal:queue",{})},t.ondisconnect=async()=>{await i.disconnect()},await A(this.__internal__.serial.delay_first_connection),this.__internal__.timeout.until_response=setTimeout(async()=>{await i.timeout(i.__internal__.serial.bytes_connection??[],"connection:start")},this.__internal__.time.response_connection),this.__internal__.serial.last_action="connect",await a(this,n,E).call(this,this.__internal__.serial.bytes_connection??[]),this.dispatch("serial:sent",{action:"connect",bytes:this.__internal__.serial.bytes_connection}),this.__internal__.auto_response&&a(this,n,g).call(this,this.__internal__.serial.auto_response),await a(this,n,q).call(this)}catch(e){a(this,n,w).call(this,!1),this.serialErrors(e)}}async serialForget(){return await a(this,n,N).call(this)}decToHex(e){return typeof e=="string"&&(e=parseInt(e,10)),e.toString(16)}hexToDec(e){return parseInt(e,16)}hexMaker(e="00",t=2){return e.toString().padStart(t,"0").toLowerCase()}add0x(e){const t=[];return e.forEach((i,s)=>{t[s]="0x"+i}),t}bytesToHex(e){return this.add0x(Array.from(e,t=>this.hexMaker(t)))}validateBytes(e){let t=new Uint8Array(0);if(e instanceof Uint8Array)t=e;else if(typeof e=="string")t=this.parseStringToTextEncoder(e);else if(Array.isArray(e)&&typeof e[0]=="string")t=this.stringArrayToUint8Array(e);else if(Array.isArray(e)&&typeof e[0]=="number")t=new Uint8Array(e);else throw new Error("Invalid data type");return t}async appendToQueue(e,t){const i=this.validateBytes(e);if(["connect","connection:start"].includes(t)){if(this.__internal__.serial.connected)return;await this.serialConnect();return}this.__internal__.serial.queue.push({bytes:i,action:t}),this.dispatch("internal:queue",{})}serialSetConnectionConstant(e=1){if(this.__internal__.bypassSerialBytesConnection)return this.__internal__.serial.bytes_connection;throw new Error(`Method not implemented 'serialSetConnectionConstant' to listen on channel ${e}`)}serialMessage(e){throw console.log(e),this.dispatch("serial:message",{code:e}),new Error("Method not implemented 'serialMessage'")}serialCorruptMessage(e){throw console.log(e),this.dispatch("serial:corrupt-message",{code:e}),new Error("Method not implemented 'serialCorruptMessage'")}clearSerialQueue(){this.__internal__.serial.queue=[]}sumHex(e){let t=0;return e.forEach(i=>{t+=parseInt(i,16)}),t.toString(16)}toString(){return JSON.stringify({__class:this.typeDevice,device_number:this.deviceNumber,uuid:this.uuid,connected:this.isConnected,connection:this.__internal__.serial.bytes_connection})}softReload(){a(this,n,Q).call(this),this.dispatch("serial:soft-reload",{})}async sendConnect(){if(!this.__internal__.serial.bytes_connection)throw new Error("No connection bytes defined");await this.appendToQueue(this.__internal__.serial.bytes_connection,"connect")}async sendCustomCode({code:e=[]}={code:[]}){if(!e)throw new Error("No data to send");this.__internal__.bypassSerialBytesConnection&&(this.__internal__.serial.bytes_connection=this.validateBytes(e)),await this.appendToQueue(e,"custom")}stringToArrayHex(e){return Array.from(e).map(t=>t.charCodeAt(0).toString(16))}stringToArrayBuffer(e,t=`
2
2
  `){return this.parseStringToTextEncoder(e,t).buffer}parseStringToTextEncoder(e="",t=`
3
3
  `){const i=new TextEncoder;return e+=t,i.encode(e)}parseStringToBytes(e="",t=`
4
- `){const i=this.parseStringToTextEncoder(e,t);return Array.from(i).map(s=>s.toString(16))}parseUint8ToHex(e){return Array.from(e).map(t=>t.toString(16))}parseHexToUint8(e){return new Uint8Array(e.map(t=>parseInt(t,16)))}stringArrayToUint8Array(e){const t=[];return e.forEach(i=>{const s=i.replace("0x","");t.push(parseInt(s,16))}),new Uint8Array(t)}parseUint8ArrayToString(e){let t=new Uint8Array(0);e instanceof Uint8Array?t=e:t=this.stringArrayToUint8Array(e),e=this.parseUint8ToHex(t);const i=e.map(s=>parseInt(s,16));return this.__internal__.serial.response.replacer?String.fromCharCode(...i).replace(this.__internal__.serial.response.replacer,""):String.fromCharCode(...i)}hexToAscii(e){const t=e.toString();let i="";for(let s=0;s<t.length;s+=2)i+=String.fromCharCode(parseInt(t.substring(s,2),16));return i}asciiToHex(e){const t=[];for(let i=0,s=e.length;i<s;i++){const u=Number(e.charCodeAt(i)).toString(16);t.push(u)}return t.join("")}$checkAndDispatchConnection(){return this.isConnected}}n=new WeakSet,f=function(e){return!!(e&&e.readable&&e.writable)},y=function(e=null){this.__internal__.serial.connected=!1,this.__internal__.aux_port_connector=0,this.dispatch("serial:disconnected",e),c.$dispatchChange(this)},m=async function(e){const t=this.__internal__.serial.port;if(!t||t&&(!t.readable||!t.writable))throw l(this,n,y).call(this,{error:"Port is closed, not readable or writable."}),new Error("The port is closed or is not readable/writable");const i=this.validateBytes(e);if(t.writable===null)return;const s=t.writable.getWriter();await s.write(i),s.releaseLock()},d=function(e=new Uint8Array([]),t=null){if(e&&e.length>0){const i=this.__internal__.serial.connected;if(this.__internal__.serial.connected=l(this,n,f).call(this,this.__internal__.serial.port),c.$dispatchChange(this),!i&&this.__internal__.serial.connected&&this.dispatch("serial:connected"),this.__internal__.interval.reconnection&&(clearInterval(this.__internal__.interval.reconnection),this.__internal__.interval.reconnection=0),this.__internal__.timeout.until_response&&(clearTimeout(this.__internal__.timeout.until_response),this.__internal__.timeout.until_response=0),this.__internal__.serial.response.as==="hex")this.serialMessage(this.parseUint8ToHex(e));else if(this.__internal__.serial.response.as==="uint8")this.serialMessage(e);else if(this.__internal__.serial.response.as==="string"){const s=this.parseUint8ArrayToString(e);if(this.__internal__.serial.response.limiter!==null){const u=s.split(this.__internal__.serial.response.limiter);for(const g in u)u[g]&&this.serialMessage(u[g])}else this.serialMessage(s)}else{const s=this.stringToArrayBuffer(this.parseUint8ArrayToString(e));this.serialMessage(s)}}else this.serialCorruptMessage(e,t);this.__internal__.serial.queue.length!==0&&this.dispatch("internal:queue",{})},E=async function(){const e=this.serialFilters,t=await navigator.serial.getPorts({filters:e});return e.length===0?t:t.filter(s=>{const u=s.getInfo();return e.some(g=>u.usbProductId===g.usbProductId&&u.usbVendorId===g.usbVendorId)}).filter(s=>!l(this,n,f).call(this,s))},T=function(e){if(e){const t=this.__internal__.serial.response.buffer,i=new Uint8Array(t.length+e.byteLength);i.set(t,0),i.set(new Uint8Array(e),t.length),this.__internal__.serial.response.buffer=i}},S=async function(){this.__internal__.serial.time_until_send_bytes&&(clearTimeout(this.__internal__.serial.time_until_send_bytes),this.__internal__.serial.time_until_send_bytes=0),this.__internal__.serial.time_until_send_bytes=setTimeout(()=>{this.__internal__.serial.response.buffer&&l(this,n,d).call(this,this.__internal__.serial.response.buffer),this.__internal__.serial.response.buffer=new Uint8Array(0)},400)},x=async function(){if(this.__internal__.serial.response.length!==null){if(this.__internal__.serial.response.length===this.__internal__.serial.response.buffer.length)l(this,n,d).call(this,this.__internal__.serial.response.buffer),this.__internal__.serial.response.buffer=new Uint8Array(0);else if(this.__internal__.serial.response.length<this.__internal__.serial.response.buffer.length){let e=new Uint8Array(0);for(let i=0;i<this.__internal__.serial.response.length;i++)e[i]=this.__internal__.serial.response.buffer[i];if(e.length===this.__internal__.serial.response.length){l(this,n,d).call(this,e),this.__internal__.serial.response.buffer=new Uint8Array(0);return}e=new Uint8Array(0);const t=this.__internal__.serial.response.length*2;if(this.__internal__.serial.response.buffer.length===t){for(let i=14;i<t;i++)e[i-this.__internal__.serial.response.length]=this.__internal__.serial.response.buffer[i];e.length===this.__internal__.serial.response.length&&(l(this,n,d).call(this,e),this.__internal__.serial.response.buffer=new Uint8Array(0))}}}},U=async function(){const e=this.__internal__.serial.port;if(!e||!e.readable)throw new Error("Port is not readable");for(;e.readable&&this.__internal__.serial.keep_reading;){const t=e.readable.getReader();this.__internal__.serial.reader=t;try{let i=!0;for(;i;){const{value:s,done:u}=await t.read();if(u){t.releaseLock(),this.__internal__.serial.keep_reading=!1,i=!1;break}l(this,n,T).call(this,s),this.__internal__.serial.response.length===null?await l(this,n,S).call(this):await l(this,n,x).call(this)}}catch(i){this.serialErrors(i)}finally{t.releaseLock()}}this.__internal__.serial.keep_reading=!0,this.__internal__.serial.port&&await this.__internal__.serial.port.close()},k=async function(){return typeof window>"u"?!1:"serial"in navigator&&"forget"in SerialPort.prototype&&this.__internal__.serial.port?(await this.__internal__.serial.port.forget(),!0):!1},P=function(){["serial:connected","serial:connecting","serial:reconnect","serial:timeout","serial:disconnected","serial:sent","serial:soft-reload","serial:message","unknown","serial:need-permission","serial:lost","serial:unsupported","serial:error","debug"].forEach(t=>{this.serialRegisterAvailableListener(t)})},D=function(){const e=this;this.on("internal:queue",async()=>{var t;await l(t=e,n,$).call(t)}),l(this,n,L).call(this)},L=function(){const e=this;navigator.serial.addEventListener("connect",async()=>{e.isDisconnected&&await e.serialConnect().catch(()=>{})})},$=async function(){if(!l(this,n,f).call(this,this.__internal__.serial.port)){l(this,n,y).call(this,{error:"Port is closed, not readable or writable."}),await this.serialConnect();return}if(this.__internal__.timeout.until_response||this.__internal__.serial.queue.length===0)return;const e=this.__internal__.serial.queue[0];let t=this.__internal__.time.response_general;if(e.action==="connect"&&(t=this.__internal__.time.response_connection),this.__internal__.timeout.until_response=setTimeout(async()=>{await this.timeout(e.bytes,e.action)},t),this.__internal__.serial.last_action=e.action??"unknown",await l(this,n,m).call(this,e.bytes),this.dispatch("serial:sent",{action:e.action,bytes:e.bytes}),this.__internal__.auto_response){let s=new Uint8Array(0);try{s=this.validateBytes(this.__internal__.serial.auto_response)}catch(u){this.serialErrors(u)}l(this,n,d).call(this,s,null)}const i=[...this.__internal__.serial.queue];this.__internal__.serial.queue=i.splice(1)},q=function(e=1){this.__internal__.device_number=e,this.__internal__.serial.bytes_connection=this.serialSetConnectionConstant(e)},I=function(){this.__internal__.last_error={message:null,action:null,code:null,no_code:0}},o.Core=N,o.Devices=c,o.Dispatcher=h,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
4
+ `){const i=this.parseStringToTextEncoder(e,t);return Array.from(i).map(s=>s.toString(16))}parseUint8ToHex(e){return Array.from(e).map(t=>t.toString(16))}parseHexToUint8(e){return new Uint8Array(e.map(t=>parseInt(t,16)))}stringArrayToUint8Array(e){const t=[];return typeof e=="string"?this.parseStringToTextEncoder(e).buffer:(e.forEach(i=>{const s=i.replace("0x","");t.push(parseInt(s,16))}),new Uint8Array(t))}parseUint8ArrayToString(e){let t=new Uint8Array(0);e instanceof Uint8Array?t=e:t=this.stringArrayToUint8Array(e),e=this.parseUint8ToHex(t);const i=e.map(s=>parseInt(s,16));return this.__internal__.serial.response.replacer?String.fromCharCode(...i).replace(this.__internal__.serial.response.replacer,""):String.fromCharCode(...i)}hexToAscii(e){const t=e.toString();let i="";for(let s=0;s<t.length;s+=2)i+=String.fromCharCode(parseInt(t.substring(s,2),16));return i}asciiToHex(e){const t=[];for(let i=0,s=e.length;i<s;i++){const c=Number(e.charCodeAt(i)).toString(16);t.push(c)}return t.join("")}$checkAndDispatchConnection(){return this.isConnected}}n=new WeakSet,b=function(e){return!!(e&&e.readable&&e.writable)},v=function(e=null){this.__internal__.serial.connected=!1,this.__internal__.aux_port_connector=0,this.dispatch("serial:disconnected",e),u.$dispatchChange(this)},k=function(e){this.__internal__.serial.aux_connecting=e.detail.active?"connecting":"finished"},E=async function(e){const t=this.__internal__.serial.port;if(!t||t&&(!t.readable||!t.writable))throw a(this,n,v).call(this,{error:"Port is closed, not readable or writable."}),new Error("The port is closed or is not readable/writable");const i=this.validateBytes(e);if(this.useRTSCTS&&await a(this,n,D).call(this,t,5e3),t.writable===null)return;const s=t.writable.getWriter();await s.write(i),s.releaseLock()},D=async function(e,t=5e3){const i=Date.now();for(;;){if(Date.now()-i>t)throw new Error("Timeout waiting for clearToSend signal");const{clearToSend:s}=await e.getSignals();if(s)return;await A(100)}},g=function(e=new Uint8Array([]),t=!1){if(e&&e.length>0){const i=this.__internal__.serial.connected;if(this.__internal__.serial.connected=a(this,n,b).call(this,this.__internal__.serial.port),u.$dispatchChange(this),!i&&this.__internal__.serial.connected&&(this.dispatch("serial:connected"),a(this,n,w).call(this,!1)),this.__internal__.interval.reconnection&&(clearInterval(this.__internal__.interval.reconnection),this.__internal__.interval.reconnection=0),this.__internal__.timeout.until_response&&(clearTimeout(this.__internal__.timeout.until_response),this.__internal__.timeout.until_response=0),this.__internal__.serial.response.as==="hex")t?this.serialCorruptMessage(this.parseUint8ToHex(e)):this.serialMessage(this.parseUint8ToHex(e));else if(this.__internal__.serial.response.as==="uint8")t?this.serialCorruptMessage(e):this.serialMessage(e);else if(this.__internal__.serial.response.as==="string"){const s=this.parseUint8ArrayToString(e);if(this.__internal__.serial.response.limiter!==null){const c=s.split(this.__internal__.serial.response.limiter);for(const h in c)c[h]&&(t?this.serialCorruptMessage(c[h]):this.serialMessage(c[h]))}else t?this.serialCorruptMessage(s):this.serialMessage(s)}else{const s=this.stringToArrayBuffer(this.parseUint8ArrayToString(e));t?this.serialCorruptMessage(s):this.serialMessage(s)}}this.__internal__.serial.queue.length!==0&&this.dispatch("internal:queue",{})},I=async function(){const e=this.serialFilters,t=await navigator.serial.getPorts({filters:e});return e.length===0?t:t.filter(s=>{const c=s.getInfo();return e.some(h=>c.usbProductId===h.usbProductId&&c.usbVendorId===h.usbVendorId)}).filter(s=>!a(this,n,b).call(this,s))},P=function(e){if(e){const t=this.__internal__.serial.response.buffer,i=new Uint8Array(t.length+e.byteLength);i.set(t,0),i.set(new Uint8Array(e),t.length),this.__internal__.serial.response.buffer=i}},$=async function(){this.__internal__.serial.time_until_send_bytes&&(clearTimeout(this.__internal__.serial.time_until_send_bytes),this.__internal__.serial.time_until_send_bytes=0),this.__internal__.serial.time_until_send_bytes=setTimeout(()=>{this.__internal__.serial.response.buffer&&a(this,n,g).call(this,this.__internal__.serial.response.buffer),this.__internal__.serial.response.buffer=new Uint8Array(0)},this.__internal__.serial.free_timeout_ms||50)},R=async function(){const e=this.__internal__.serial.response.length;let t=this.__internal__.serial.response.buffer;if(this.__internal__.serial.time_until_send_bytes&&(clearTimeout(this.__internal__.serial.time_until_send_bytes),this.__internal__.serial.time_until_send_bytes=0),!(e===null||!t||t.length===0)){for(;t.length>=e;){const i=t.slice(0,e);a(this,n,g).call(this,i),t=t.slice(e)}this.__internal__.serial.response.buffer=t,t.length>0&&(this.__internal__.serial.time_until_send_bytes=setTimeout(()=>{a(this,n,g).call(this,this.__internal__.serial.response.buffer,!0)},this.__internal__.serial.free_timeout_ms||50))}},M=async function(){const{limiter:e,prefixLimiter:t=!1,sufixLimiter:i=!0}=this.__internal__.serial.response;if(!e)throw new Error("No limiter defined for delimited serial response");const s=this.__internal__.serial.response.buffer;if(!e||!s||s.length===0)return;this.__internal__.serial.time_until_send_bytes&&(clearTimeout(this.__internal__.serial.time_until_send_bytes),this.__internal__.serial.time_until_send_bytes=0);let h=new TextDecoder().decode(s);const C=[];if(typeof e=="string"){let p;if(t&&i)p=new RegExp(`${e}([^${e}]+)${e}`,"g");else if(t)p=new RegExp(`${e}([^${e}]*)`,"g");else if(i)p=new RegExp(`([^${e}]+)${e}`,"g");else return;let y,f=0;for(;(y=p.exec(h))!==null;)C.push(new TextEncoder().encode(y[1])),f=p.lastIndex;h=h.slice(f)}else if(e instanceof RegExp){let p,y=0;if(t&&i){const f=new RegExp(`${e.source}(.*?)${e.source}`,"g");for(;(p=f.exec(h))!==null;)C.push(new TextEncoder().encode(p[1])),y=f.lastIndex}else if(i)for(;(p=e.exec(h))!==null;){const f=p.index,T=h.slice(y,f);C.push(new TextEncoder().encode(T)),y=e.lastIndex}else if(t){const f=h.split(e);f.shift();for(const T of f)C.push(new TextEncoder().encode(T));h=""}h=h.slice(y)}for(const p of C)a(this,n,g).call(this,p);const L=new TextEncoder().encode(h);this.__internal__.serial.response.buffer=L,L.length>0&&(this.__internal__.serial.time_until_send_bytes=setTimeout(()=>{a(this,n,g).call(this,this.__internal__.serial.response.buffer,!0),this.__internal__.serial.response.buffer=new Uint8Array(0)},this.__internal__.serial.free_timeout_ms??50))},q=async function(){const e=this.__internal__.serial.port;if(!e||!e.readable)throw new Error("Port is not readable");const t=e.readable.getReader();this.__internal__.serial.reader=t;try{for(;this.__internal__.serial.keep_reading;){const{value:i,done:s}=await t.read();if(s)break;a(this,n,P).call(this,i),this.__internal__.serial.response.delimited?await a(this,n,M).call(this):this.__internal__.serial.response.length===null?await a(this,n,$).call(this):await a(this,n,R).call(this)}}catch(i){this.serialErrors(i)}finally{t.releaseLock(),this.__internal__.serial.keep_reading=!0,this.__internal__.serial.port&&await this.__internal__.serial.port.close()}},w=function(e){e!==this.__internal__.serial.connecting&&(this.__internal__.serial.connecting=e,e?this.dispatch("serial:connecting",{active:!0}):this.dispatch("serial:connecting",{active:!1}))},N=async function(){return typeof window>"u"?!1:"serial"in navigator&&"forget"in SerialPort.prototype&&this.__internal__.serial.port?(await this.__internal__.serial.port.forget(),!0):!1},O=function(){["serial:connected","serial:connecting","serial:reconnect","serial:timeout","serial:disconnected","serial:sent","serial:soft-reload","serial:message","serial:corrupt-message","unknown","serial:need-permission","serial:lost","serial:unsupported","serial:error","debug"].forEach(t=>{this.serialRegisterAvailableListener(t)})},F=function(){const e=this;this.on("internal:queue",async()=>{var t;await a(t=e,n,j).call(t)}),a(this,n,H).call(this)},H=function(){const e=this;navigator.serial.addEventListener("connect",async()=>{e.isDisconnected&&await e.serialConnect().catch(()=>{})})},j=async function(){if(!a(this,n,b).call(this,this.__internal__.serial.port)){a(this,n,v).call(this,{error:"Port is closed, not readable or writable."}),await this.serialConnect();return}if(this.__internal__.timeout.until_response||this.__internal__.serial.queue.length===0)return;const e=this.__internal__.serial.queue[0];let t=this.__internal__.time.response_general;if(e.action==="connect"&&(t=this.__internal__.time.response_connection),this.__internal__.timeout.until_response=setTimeout(async()=>{await this.timeout(e.bytes,e.action)},t),this.__internal__.serial.last_action=e.action??"unknown",await a(this,n,E).call(this,e.bytes),this.dispatch("serial:sent",{action:e.action,bytes:e.bytes}),this.__internal__.auto_response){let s=new Uint8Array(0);try{s=this.validateBytes(this.__internal__.serial.auto_response)}catch(c){this.serialErrors(c)}a(this,n,g).call(this,s)}const i=[...this.__internal__.serial.queue];this.__internal__.serial.queue=i.splice(1)},W=function(e=1){this.__internal__.device_number=e,!this.__internal__.bypassSerialBytesConnection&&(this.__internal__.serial.bytes_connection=this.serialSetConnectionConstant(e))},Q=function(){this.__internal__.last_error={message:null,action:null,code:null,no_code:0}},l.Core=z,l.Devices=u,l.Dispatcher=d,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "webserial-core",
3
3
  "description": "Webserial Core to easy connections with serial devices",
4
- "version": "1.0.7",
4
+ "version": "1.0.9",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": "danidoble",
@@ -45,13 +45,13 @@
45
45
  "format": "prettier --write ./lib/**/*.ts"
46
46
  },
47
47
  "devDependencies": {
48
- "@eslint/js": "^9.26.0",
48
+ "@eslint/js": "^9.29.0",
49
49
  "@types/w3c-web-serial": "^1.0.8",
50
- "eslint": "^9.26.0",
50
+ "eslint": "^9.29.0",
51
51
  "globals": "^15.15.0",
52
52
  "prettier": "3.4.2",
53
53
  "typescript": "~5.7.3",
54
- "typescript-eslint": "^8.32.0",
54
+ "typescript-eslint": "^8.35.0",
55
55
  "vite": "^6.3.5"
56
56
  },
57
57
  "publishConfig": {