@microbit/microbit-connection 0.0.0-alpha.31 → 0.0.0-alpha.33

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.
Files changed (219) hide show
  1. package/README.md +94 -5
  2. package/build/cjs/accelerometer-service.js +106 -0
  3. package/build/cjs/accelerometer-service.js.map +1 -0
  4. package/build/cjs/accelerometer.js +16 -0
  5. package/build/cjs/accelerometer.js.map +1 -0
  6. package/build/cjs/async-util.js +27 -0
  7. package/build/cjs/async-util.js.map +1 -0
  8. package/build/{bluetooth-device-wrapper.d.ts → cjs/bluetooth-device-wrapper.d.ts} +3 -0
  9. package/build/cjs/bluetooth-device-wrapper.js +467 -0
  10. package/build/cjs/bluetooth-device-wrapper.js.map +1 -0
  11. package/build/cjs/bluetooth-profile.js +86 -0
  12. package/build/cjs/bluetooth-profile.js.map +1 -0
  13. package/build/{bluetooth.d.ts → cjs/bluetooth.d.ts} +7 -2
  14. package/build/cjs/bluetooth.js +268 -0
  15. package/build/cjs/bluetooth.js.map +1 -0
  16. package/build/cjs/board-id.js +81 -0
  17. package/build/cjs/board-id.js.map +1 -0
  18. package/build/cjs/board-serial-info.js +51 -0
  19. package/build/cjs/board-serial-info.js.map +1 -0
  20. package/build/cjs/button-service.js +80 -0
  21. package/build/cjs/button-service.js.map +1 -0
  22. package/build/cjs/buttons.js +22 -0
  23. package/build/cjs/buttons.js.map +1 -0
  24. package/build/cjs/constants.js +73 -0
  25. package/build/cjs/constants.js.map +1 -0
  26. package/build/cjs/device.js +199 -0
  27. package/build/cjs/device.js.map +1 -0
  28. package/build/cjs/events.js +109 -0
  29. package/build/cjs/events.js.map +1 -0
  30. package/build/cjs/hex-flash-data-source.js +26 -0
  31. package/build/cjs/hex-flash-data-source.js.map +1 -0
  32. package/build/cjs/index.d.ts +16 -0
  33. package/build/cjs/index.js +33 -0
  34. package/build/cjs/index.js.map +1 -0
  35. package/build/cjs/led-service.js +120 -0
  36. package/build/{led-service.js.map → cjs/led-service.js.map} +1 -1
  37. package/build/cjs/led.js +3 -0
  38. package/build/cjs/led.js.map +1 -0
  39. package/build/{logging.d.ts → cjs/logging.d.ts} +3 -3
  40. package/build/cjs/logging.js +16 -0
  41. package/build/cjs/logging.js.map +1 -0
  42. package/build/cjs/magnetometer-service.d.ts +22 -0
  43. package/build/cjs/magnetometer-service.js +129 -0
  44. package/build/cjs/magnetometer-service.js.map +1 -0
  45. package/build/cjs/magnetometer.d.ts +9 -0
  46. package/build/cjs/magnetometer.js +16 -0
  47. package/build/cjs/magnetometer.js.map +1 -0
  48. package/build/cjs/package.json +1 -0
  49. package/build/cjs/promise-queue.js +78 -0
  50. package/build/cjs/promise-queue.js.map +1 -0
  51. package/build/{service-events.d.ts → cjs/service-events.d.ts} +2 -0
  52. package/build/cjs/service-events.js +39 -0
  53. package/build/cjs/service-events.js.map +1 -0
  54. package/build/cjs/setupTests.js.map +1 -0
  55. package/build/cjs/uart-service.js +76 -0
  56. package/build/cjs/uart-service.js.map +1 -0
  57. package/build/cjs/uart.js +16 -0
  58. package/build/cjs/uart.js.map +1 -0
  59. package/build/{usb-device-wrapper.d.ts → cjs/usb-device-wrapper.d.ts} +1 -6
  60. package/build/cjs/usb-device-wrapper.js +412 -0
  61. package/build/cjs/usb-device-wrapper.js.map +1 -0
  62. package/build/cjs/usb-partial-flashing-utils.js +133 -0
  63. package/build/cjs/usb-partial-flashing-utils.js.map +1 -0
  64. package/build/{usb-partial-flashing.d.ts → cjs/usb-partial-flashing.d.ts} +3 -3
  65. package/build/cjs/usb-partial-flashing.js +341 -0
  66. package/build/cjs/usb-partial-flashing.js.map +1 -0
  67. package/build/cjs/usb-radio-bridge.js +509 -0
  68. package/build/cjs/usb-radio-bridge.js.map +1 -0
  69. package/build/cjs/usb-serial-protocol.js +183 -0
  70. package/build/cjs/usb-serial-protocol.js.map +1 -0
  71. package/build/cjs/usb.js +520 -0
  72. package/build/cjs/usb.js.map +1 -0
  73. package/build/esm/accelerometer-service.d.ts +18 -0
  74. package/build/{accelerometer-service.js → esm/accelerometer-service.js} +1 -1
  75. package/build/esm/accelerometer-service.js.map +1 -0
  76. package/build/esm/accelerometer.d.ts +9 -0
  77. package/build/esm/accelerometer.js.map +1 -0
  78. package/build/esm/async-util.d.ts +13 -0
  79. package/build/esm/async-util.js.map +1 -0
  80. package/build/esm/bluetooth-device-wrapper.d.ts +63 -0
  81. package/build/{bluetooth-device-wrapper.js → esm/bluetooth-device-wrapper.js} +19 -1
  82. package/build/esm/bluetooth-device-wrapper.js.map +1 -0
  83. package/build/esm/bluetooth-profile.d.ts +139 -0
  84. package/build/esm/bluetooth-profile.js.map +1 -0
  85. package/build/esm/bluetooth.d.ts +60 -0
  86. package/build/{bluetooth.js → esm/bluetooth.js} +20 -0
  87. package/build/esm/bluetooth.js.map +1 -0
  88. package/build/esm/board-id.d.ts +36 -0
  89. package/build/esm/board-id.js.map +1 -0
  90. package/build/esm/board-serial-info.d.ts +14 -0
  91. package/build/esm/board-serial-info.js.map +1 -0
  92. package/build/esm/button-service.d.ts +13 -0
  93. package/build/esm/button-service.js.map +1 -0
  94. package/build/esm/buttons.d.ts +10 -0
  95. package/build/esm/buttons.js.map +1 -0
  96. package/build/esm/constants.d.ts +48 -0
  97. package/build/esm/constants.js.map +1 -0
  98. package/build/esm/device.d.ts +208 -0
  99. package/build/esm/device.js.map +1 -0
  100. package/build/esm/events.d.ts +111 -0
  101. package/build/esm/events.js.map +1 -0
  102. package/build/esm/hex-flash-data-source.d.ts +7 -0
  103. package/build/esm/hex-flash-data-source.js.map +1 -0
  104. package/build/esm/index.d.ts +16 -0
  105. package/build/esm/index.js +11 -0
  106. package/build/esm/index.js.map +1 -0
  107. package/build/esm/led-service.d.ts +20 -0
  108. package/build/esm/led-service.js.map +1 -0
  109. package/build/esm/led.d.ts +6 -0
  110. package/build/esm/led.js.map +1 -0
  111. package/build/esm/logging.d.ts +21 -0
  112. package/build/esm/logging.js.map +1 -0
  113. package/build/esm/magnetometer-service.d.ts +22 -0
  114. package/build/esm/magnetometer-service.js +125 -0
  115. package/build/esm/magnetometer-service.js.map +1 -0
  116. package/build/esm/magnetometer.d.ts +9 -0
  117. package/build/esm/magnetometer.js +12 -0
  118. package/build/esm/magnetometer.js.map +1 -0
  119. package/build/esm/package.json +1 -0
  120. package/build/esm/promise-queue.d.ts +27 -0
  121. package/build/esm/promise-queue.js.map +1 -0
  122. package/build/esm/service-events.d.ts +17 -0
  123. package/build/{service-events.js → esm/service-events.js} +6 -0
  124. package/build/esm/service-events.js.map +1 -0
  125. package/build/esm/setupTests.d.ts +6 -0
  126. package/build/{setupTests.js.map → esm/setupTests.js.map} +1 -1
  127. package/build/esm/uart-service.d.ts +13 -0
  128. package/build/esm/uart-service.js.map +1 -0
  129. package/build/esm/uart.d.ts +4 -0
  130. package/build/esm/uart.js.map +1 -0
  131. package/build/esm/usb-device-wrapper.d.ts +47 -0
  132. package/build/{usb-device-wrapper.js → esm/usb-device-wrapper.js} +10 -9
  133. package/build/esm/usb-device-wrapper.js.map +1 -0
  134. package/build/esm/usb-partial-flashing-utils.d.ts +17 -0
  135. package/build/esm/usb-partial-flashing-utils.js.map +1 -0
  136. package/build/esm/usb-partial-flashing.d.ts +69 -0
  137. package/build/{usb-partial-flashing.js → esm/usb-partial-flashing.js} +8 -10
  138. package/build/esm/usb-partial-flashing.js.map +1 -0
  139. package/build/esm/usb-radio-bridge.d.ts +41 -0
  140. package/build/esm/usb-radio-bridge.js.map +1 -0
  141. package/build/esm/usb-serial-protocol.d.ts +66 -0
  142. package/build/esm/usb-serial-protocol.js.map +1 -0
  143. package/build/esm/usb.d.ts +58 -0
  144. package/build/esm/usb.js.map +1 -0
  145. package/package.json +19 -6
  146. package/typedoc.json +13 -0
  147. package/build/accelerometer-service.js.map +0 -1
  148. package/build/accelerometer.js.map +0 -1
  149. package/build/async-util.js.map +0 -1
  150. package/build/bluetooth-device-wrapper.js.map +0 -1
  151. package/build/bluetooth-profile.js.map +0 -1
  152. package/build/bluetooth.js.map +0 -1
  153. package/build/board-id.js.map +0 -1
  154. package/build/board-serial-info.js.map +0 -1
  155. package/build/button-service.js.map +0 -1
  156. package/build/buttons.js.map +0 -1
  157. package/build/constants.js.map +0 -1
  158. package/build/device.js.map +0 -1
  159. package/build/events.js.map +0 -1
  160. package/build/hex-flash-data-source.js.map +0 -1
  161. package/build/index.d.ts +0 -12
  162. package/build/index.js +0 -10
  163. package/build/index.js.map +0 -1
  164. package/build/led.js.map +0 -1
  165. package/build/logging.js.map +0 -1
  166. package/build/promise-queue.js.map +0 -1
  167. package/build/service-events.js.map +0 -1
  168. package/build/uart-service.js.map +0 -1
  169. package/build/uart.js.map +0 -1
  170. package/build/usb-device-wrapper.js.map +0 -1
  171. package/build/usb-partial-flashing-utils.js.map +0 -1
  172. package/build/usb-partial-flashing.js.map +0 -1
  173. package/build/usb-radio-bridge.js.map +0 -1
  174. package/build/usb-serial-protocol.js.map +0 -1
  175. package/build/usb.js.map +0 -1
  176. package/vite.config.ts +0 -34
  177. /package/build/{accelerometer-service.d.ts → cjs/accelerometer-service.d.ts} +0 -0
  178. /package/build/{accelerometer.d.ts → cjs/accelerometer.d.ts} +0 -0
  179. /package/build/{async-util.d.ts → cjs/async-util.d.ts} +0 -0
  180. /package/build/{bluetooth-profile.d.ts → cjs/bluetooth-profile.d.ts} +0 -0
  181. /package/build/{board-id.d.ts → cjs/board-id.d.ts} +0 -0
  182. /package/build/{board-serial-info.d.ts → cjs/board-serial-info.d.ts} +0 -0
  183. /package/build/{button-service.d.ts → cjs/button-service.d.ts} +0 -0
  184. /package/build/{buttons.d.ts → cjs/buttons.d.ts} +0 -0
  185. /package/build/{constants.d.ts → cjs/constants.d.ts} +0 -0
  186. /package/build/{device.d.ts → cjs/device.d.ts} +0 -0
  187. /package/build/{events.d.ts → cjs/events.d.ts} +0 -0
  188. /package/build/{hex-flash-data-source.d.ts → cjs/hex-flash-data-source.d.ts} +0 -0
  189. /package/build/{led-service.d.ts → cjs/led-service.d.ts} +0 -0
  190. /package/build/{led.d.ts → cjs/led.d.ts} +0 -0
  191. /package/build/{promise-queue.d.ts → cjs/promise-queue.d.ts} +0 -0
  192. /package/build/{setupTests.d.ts → cjs/setupTests.d.ts} +0 -0
  193. /package/build/{uart-service.d.ts → cjs/uart-service.d.ts} +0 -0
  194. /package/build/{uart.d.ts → cjs/uart.d.ts} +0 -0
  195. /package/build/{usb-partial-flashing-utils.d.ts → cjs/usb-partial-flashing-utils.d.ts} +0 -0
  196. /package/build/{usb-radio-bridge.d.ts → cjs/usb-radio-bridge.d.ts} +0 -0
  197. /package/build/{usb-serial-protocol.d.ts → cjs/usb-serial-protocol.d.ts} +0 -0
  198. /package/build/{usb.d.ts → cjs/usb.d.ts} +0 -0
  199. /package/build/{accelerometer.js → esm/accelerometer.js} +0 -0
  200. /package/build/{async-util.js → esm/async-util.js} +0 -0
  201. /package/build/{bluetooth-profile.js → esm/bluetooth-profile.js} +0 -0
  202. /package/build/{board-id.js → esm/board-id.js} +0 -0
  203. /package/build/{board-serial-info.js → esm/board-serial-info.js} +0 -0
  204. /package/build/{button-service.js → esm/button-service.js} +0 -0
  205. /package/build/{buttons.js → esm/buttons.js} +0 -0
  206. /package/build/{constants.js → esm/constants.js} +0 -0
  207. /package/build/{device.js → esm/device.js} +0 -0
  208. /package/build/{events.js → esm/events.js} +0 -0
  209. /package/build/{hex-flash-data-source.js → esm/hex-flash-data-source.js} +0 -0
  210. /package/build/{led-service.js → esm/led-service.js} +0 -0
  211. /package/build/{led.js → esm/led.js} +0 -0
  212. /package/build/{logging.js → esm/logging.js} +0 -0
  213. /package/build/{promise-queue.js → esm/promise-queue.js} +0 -0
  214. /package/build/{uart-service.js → esm/uart-service.js} +0 -0
  215. /package/build/{uart.js → esm/uart.js} +0 -0
  216. /package/build/{usb-partial-flashing-utils.js → esm/usb-partial-flashing-utils.js} +0 -0
  217. /package/build/{usb-radio-bridge.js → esm/usb-radio-bridge.js} +0 -0
  218. /package/build/{usb-serial-protocol.js → esm/usb-serial-protocol.js} +0 -0
  219. /package/build/{usb.js → esm/usb.js} +0 -0
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MicrobitWebBluetoothConnection = void 0;
4
+ const bluetooth_device_wrapper_js_1 = require("./bluetooth-device-wrapper.js");
5
+ const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
6
+ const device_js_1 = require("./device.js");
7
+ const events_js_1 = require("./events.js");
8
+ const logging_js_1 = require("./logging.js");
9
+ const requestDeviceTimeoutDuration = 30000;
10
+ /**
11
+ * A Bluetooth connection to a micro:bit device.
12
+ */
13
+ class MicrobitWebBluetoothConnection extends events_js_1.TypedEventTarget {
14
+ constructor(options = {}) {
15
+ super();
16
+ Object.defineProperty(this, "status", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: device_js_1.ConnectionStatus.SUPPORT_NOT_KNOWN
21
+ });
22
+ /**
23
+ * The USB device we last connected to.
24
+ * Cleared if it is disconnected.
25
+ */
26
+ Object.defineProperty(this, "device", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: void 0
31
+ });
32
+ Object.defineProperty(this, "logging", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: void 0
37
+ });
38
+ Object.defineProperty(this, "connection", {
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true,
42
+ value: void 0
43
+ });
44
+ Object.defineProperty(this, "availabilityListener", {
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true,
48
+ value: (e) => {
49
+ // TODO: is this called? is `value` correct?
50
+ const value = e.value;
51
+ this.availability = value;
52
+ }
53
+ });
54
+ Object.defineProperty(this, "availability", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: void 0
59
+ });
60
+ Object.defineProperty(this, "nameFilter", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: void 0
65
+ });
66
+ this.logging = options.logging || new logging_js_1.NullLogging();
67
+ }
68
+ eventActivated(type) {
69
+ this.connection?.startNotifications(type);
70
+ }
71
+ eventDeactivated(type) {
72
+ this.connection?.stopNotifications(type);
73
+ }
74
+ log(v) {
75
+ this.logging.log(v);
76
+ }
77
+ async initialize() {
78
+ navigator.bluetooth?.addEventListener("availabilitychanged", this.availabilityListener);
79
+ this.availability = await navigator.bluetooth?.getAvailability();
80
+ this.setStatus(this.availability
81
+ ? device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE
82
+ : device_js_1.ConnectionStatus.NOT_SUPPORTED);
83
+ }
84
+ dispose() {
85
+ navigator.bluetooth?.removeEventListener("availabilitychanged", this.availabilityListener);
86
+ }
87
+ async connect() {
88
+ await this.connectInternal();
89
+ return this.status;
90
+ }
91
+ getBoardVersion() {
92
+ return this.connection?.boardVersion;
93
+ }
94
+ async disconnect() {
95
+ try {
96
+ if (this.connection) {
97
+ await this.connection.disconnect();
98
+ }
99
+ }
100
+ catch (e) {
101
+ this.log("Error during disconnection:\r\n" + e);
102
+ this.logging.event({
103
+ type: "Bluetooth-error",
104
+ message: "error-disconnecting",
105
+ });
106
+ }
107
+ finally {
108
+ this.connection = undefined;
109
+ this.setStatus(device_js_1.ConnectionStatus.DISCONNECTED);
110
+ this.logging.log("Disconnection complete");
111
+ this.logging.event({
112
+ type: "Bluetooth-info",
113
+ message: "disconnected",
114
+ });
115
+ }
116
+ }
117
+ setStatus(newStatus) {
118
+ this.status = newStatus;
119
+ this.log("Bluetooth connection status " + newStatus);
120
+ this.dispatchTypedEvent("status", new device_js_1.ConnectionStatusEvent(newStatus));
121
+ }
122
+ serialWrite(data) {
123
+ if (this.connection) {
124
+ // TODO
125
+ }
126
+ return Promise.resolve();
127
+ }
128
+ async clearDevice() {
129
+ await this.disconnect();
130
+ this.device = undefined;
131
+ this.setStatus(device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE);
132
+ }
133
+ async connectInternal() {
134
+ if (!this.connection) {
135
+ const device = await this.chooseDevice();
136
+ if (!device) {
137
+ this.setStatus(device_js_1.ConnectionStatus.NO_AUTHORIZED_DEVICE);
138
+ return;
139
+ }
140
+ this.connection = await (0, bluetooth_device_wrapper_js_1.createBluetoothDeviceWrapper)(device, this.logging, this.dispatchTypedEvent.bind(this), () => this.getActiveEvents(), {
141
+ onConnecting: () => this.setStatus(device_js_1.ConnectionStatus.CONNECTING),
142
+ onReconnecting: () => this.setStatus(device_js_1.ConnectionStatus.RECONNECTING),
143
+ onSuccess: () => this.setStatus(device_js_1.ConnectionStatus.CONNECTED),
144
+ onFail: () => {
145
+ this.setStatus(device_js_1.ConnectionStatus.DISCONNECTED);
146
+ this.connection = undefined;
147
+ },
148
+ });
149
+ return;
150
+ }
151
+ // TODO: timeout unification?
152
+ }
153
+ setNameFilter(name) {
154
+ this.nameFilter = name;
155
+ }
156
+ async chooseDevice() {
157
+ if (this.device) {
158
+ return this.device;
159
+ }
160
+ this.dispatchTypedEvent("beforerequestdevice", new device_js_1.BeforeRequestDevice());
161
+ try {
162
+ // In some situations the Chrome device prompt simply doesn't appear so we time this out after 30 seconds and reload the page
163
+ // TODO: give control over this to the caller
164
+ const result = await Promise.race([
165
+ navigator.bluetooth.requestDevice({
166
+ filters: [
167
+ {
168
+ namePrefix: this.nameFilter
169
+ ? `BBC micro:bit [${this.nameFilter}]`
170
+ : "BBC micro:bit",
171
+ },
172
+ {
173
+ // See https://github.com/bsiever/microbit-pxt-blehid/issues/31
174
+ namePrefix: this.nameFilter
175
+ ? `uBit [${this.nameFilter}]`
176
+ : "uBit",
177
+ },
178
+ ],
179
+ optionalServices: [
180
+ bluetooth_profile_js_1.profile.accelerometer.id,
181
+ bluetooth_profile_js_1.profile.button.id,
182
+ bluetooth_profile_js_1.profile.deviceInformation.id,
183
+ bluetooth_profile_js_1.profile.dfuControl.id,
184
+ bluetooth_profile_js_1.profile.event.id,
185
+ bluetooth_profile_js_1.profile.ioPin.id,
186
+ bluetooth_profile_js_1.profile.led.id,
187
+ bluetooth_profile_js_1.profile.magnetometer.id,
188
+ bluetooth_profile_js_1.profile.temperature.id,
189
+ bluetooth_profile_js_1.profile.uart.id,
190
+ ],
191
+ }),
192
+ new Promise((resolve) => setTimeout(() => resolve("timeout"), requestDeviceTimeoutDuration)),
193
+ ]);
194
+ if (result === "timeout") {
195
+ // btSelectMicrobitDialogOnLoad.set(true);
196
+ window.location.reload();
197
+ return undefined;
198
+ }
199
+ this.device = result;
200
+ return result;
201
+ }
202
+ catch (e) {
203
+ this.logging.error("Bluetooth request device failed/cancelled", e);
204
+ return undefined;
205
+ }
206
+ finally {
207
+ this.dispatchTypedEvent("afterrequestdevice", new device_js_1.AfterRequestDevice());
208
+ }
209
+ }
210
+ async getAccelerometerData() {
211
+ const accelerometerService = await this.connection?.getAccelerometerService();
212
+ return accelerometerService?.getData();
213
+ }
214
+ async getAccelerometerPeriod() {
215
+ const accelerometerService = await this.connection?.getAccelerometerService();
216
+ return accelerometerService?.getPeriod();
217
+ }
218
+ async setAccelerometerPeriod(value) {
219
+ const accelerometerService = await this.connection?.getAccelerometerService();
220
+ return accelerometerService?.setPeriod(value);
221
+ }
222
+ async setLedText(text) {
223
+ const ledService = await this.connection?.getLedService();
224
+ return ledService?.setText(text);
225
+ }
226
+ async getLedScrollingDelay() {
227
+ const ledService = await this.connection?.getLedService();
228
+ return ledService?.getScrollingDelay();
229
+ }
230
+ async setLedScrollingDelay(delayInMillis) {
231
+ const ledService = await this.connection?.getLedService();
232
+ await ledService?.setScrollingDelay(delayInMillis);
233
+ }
234
+ async getLedMatrix() {
235
+ const ledService = await this.connection?.getLedService();
236
+ return ledService?.getLedMatrix();
237
+ }
238
+ async setLedMatrix(matrix) {
239
+ const ledService = await this.connection?.getLedService();
240
+ ledService?.setLedMatrix(matrix);
241
+ }
242
+ async getMagnetometerData() {
243
+ const magnetometerService = await this.connection?.getMagnetometerService();
244
+ return magnetometerService?.getData();
245
+ }
246
+ async getMagnetometerPeriod() {
247
+ const magnetometerService = await this.connection?.getMagnetometerService();
248
+ return magnetometerService?.getPeriod();
249
+ }
250
+ async setMagnetometerPeriod(value) {
251
+ const magnetometerService = await this.connection?.getMagnetometerService();
252
+ return magnetometerService?.setPeriod(value);
253
+ }
254
+ async getMagnetometerBearing() {
255
+ const magnetometerService = await this.connection?.getMagnetometerService();
256
+ return magnetometerService?.getBearing();
257
+ }
258
+ async triggerMagnetometerCalibration() {
259
+ const magnetometerService = await this.connection?.getMagnetometerService();
260
+ return magnetometerService?.triggerCalibration();
261
+ }
262
+ async writeUART(data) {
263
+ const uartService = await this.connection?.getUARTService();
264
+ uartService?.writeData(data);
265
+ }
266
+ }
267
+ exports.MicrobitWebBluetoothConnection = MicrobitWebBluetoothConnection;
268
+ //# sourceMappingURL=bluetooth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bluetooth.js","sourceRoot":"","sources":["../../lib/bluetooth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * (c) 2021, Micro:bit Educational Foundation and contributors
4
+ *
5
+ * SPDX-License-Identifier: MIT
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.BoardId = void 0;
9
+ /**
10
+ * Validates micro:bit board IDs.
11
+ */
12
+ class BoardId {
13
+ constructor(id) {
14
+ Object.defineProperty(this, "id", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: id
19
+ });
20
+ if (!this.isV1() && !this.isV2()) {
21
+ throw new Error(`Could not recognise the Board ID ${id.toString(16)}`);
22
+ }
23
+ }
24
+ toBoardVersion() {
25
+ return this.isV1() ? "V1" : "V2";
26
+ }
27
+ isV1() {
28
+ return this.id === 0x9900 || this.id === 0x9901;
29
+ }
30
+ isV2() {
31
+ return (this.id === 0x9903 ||
32
+ this.id === 0x9904 ||
33
+ this.id === 0x9905 ||
34
+ this.id === 0x9906);
35
+ }
36
+ /**
37
+ * Return the board ID using the default ID for the board type.
38
+ * Used to integrate with MicropythonFsHex.
39
+ */
40
+ normalize() {
41
+ return this.isV1() ? BoardId.v1Normalized : BoardId.v2Normalized;
42
+ }
43
+ /**
44
+ * toString matches the input to parse.
45
+ *
46
+ * @returns the ID as a string.
47
+ */
48
+ toString() {
49
+ return this.id.toString(16);
50
+ }
51
+ /**
52
+ * @param value The ID as a hex string with no 0x prefix (e.g. 9900).
53
+ * @returns the valid board ID
54
+ * @throws if the ID isn't known.
55
+ */
56
+ static parse(value) {
57
+ return new BoardId(parseInt(value, 16));
58
+ }
59
+ static forVersion(boardVersion) {
60
+ switch (boardVersion) {
61
+ case "V1":
62
+ return this.v1Normalized;
63
+ case "V2":
64
+ return this.v2Normalized;
65
+ }
66
+ }
67
+ }
68
+ exports.BoardId = BoardId;
69
+ Object.defineProperty(BoardId, "v1Normalized", {
70
+ enumerable: true,
71
+ configurable: true,
72
+ writable: true,
73
+ value: new BoardId(0x9900)
74
+ });
75
+ Object.defineProperty(BoardId, "v2Normalized", {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: new BoardId(0x9903)
80
+ });
81
+ //# sourceMappingURL=board-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-id.js","sourceRoot":"","sources":["../../lib/board-id.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAIH;;GAEG;AACH,MAAa,OAAO;IAIlB,YAAmB,EAAU;QAAjB;;;;mBAAO,EAAE;WAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;IAClD,CAAC;IAED,IAAI;QACF,OAAO,CACL,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM;YAClB,IAAI,CAAC,EAAE,KAAK,MAAM,CACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,YAA0B;QAC1C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;IACH,CAAC;;AA5DH,0BA6DC;AA5DgB;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB;AACnC;;;;WAAe,IAAI,OAAO,CAAC,MAAM,CAAC;EAAtB,CAAuB"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoardSerialInfo = void 0;
4
+ /**
5
+ * (c) 2021, Micro:bit Educational Foundation and contributors
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ */
9
+ const board_id_js_1 = require("./board-id.js");
10
+ class BoardSerialInfo {
11
+ constructor(id, familyId, hic) {
12
+ Object.defineProperty(this, "id", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: id
17
+ });
18
+ Object.defineProperty(this, "familyId", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: familyId
23
+ });
24
+ Object.defineProperty(this, "hic", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: hic
29
+ });
30
+ }
31
+ static parse(device, log) {
32
+ const serial = device.serialNumber;
33
+ if (!serial) {
34
+ throw new Error("Could not detected ID from connected board.");
35
+ }
36
+ if (serial.length !== 48) {
37
+ log(`USB serial number unexpected length: ${serial.length}`);
38
+ }
39
+ const id = serial.substring(0, 4);
40
+ const familyId = serial.substring(4, 8);
41
+ const hic = serial.slice(-8);
42
+ return new BoardSerialInfo(board_id_js_1.BoardId.parse(id), familyId, hic);
43
+ }
44
+ eq(other) {
45
+ return (other.id === this.id &&
46
+ other.familyId === this.familyId &&
47
+ other.hic === this.hic);
48
+ }
49
+ }
50
+ exports.BoardSerialInfo = BoardSerialInfo;
51
+ //# sourceMappingURL=board-serial-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-serial-info.js","sourceRoot":"","sources":["../../lib/board-serial-info.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,+CAAwC;AAExC,MAAa,eAAe;IAC1B,YACS,EAAW,EACX,QAAgB,EAChB,GAAW;QAFlB;;;;mBAAO,EAAE;WAAS;QAClB;;;;mBAAO,QAAQ;WAAQ;QACvB;;;;mBAAO,GAAG;WAAQ;IACjB,CAAC;IACJ,MAAM,CAAC,KAAK,CAAC,MAAiB,EAAE,GAA0B;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACzB,GAAG,CAAC,wCAAwC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,eAAe,CAAC,qBAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,EAAE,CAAC,KAAsB;QACvB,OAAO,CACL,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YACpB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAChC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CACvB,CAAC;IACJ,CAAC;CACF;AA3BD,0CA2BC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ButtonService = void 0;
4
+ const bluetooth_profile_js_1 = require("./bluetooth-profile.js");
5
+ const buttons_js_1 = require("./buttons.js");
6
+ const device_js_1 = require("./device.js");
7
+ class ButtonService {
8
+ constructor(buttonACharacteristic, buttonBCharacteristic, dispatchTypedEvent) {
9
+ Object.defineProperty(this, "buttonACharacteristic", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: buttonACharacteristic
14
+ });
15
+ Object.defineProperty(this, "buttonBCharacteristic", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: buttonBCharacteristic
20
+ });
21
+ Object.defineProperty(this, "dispatchTypedEvent", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: dispatchTypedEvent
26
+ });
27
+ for (const type of ["buttonachanged", "buttonbchanged"]) {
28
+ this.characteristicForEvent(type)?.addEventListener("characteristicvaluechanged", (event) => {
29
+ const target = event.target;
30
+ const data = this.dataViewToButtonState(target.value);
31
+ this.dispatchTypedEvent(type, new buttons_js_1.ButtonEvent(type, data));
32
+ });
33
+ }
34
+ }
35
+ static async createService(gattServer, dispatcher, queueGattOperation, listenerInit) {
36
+ let buttonService;
37
+ try {
38
+ buttonService = await gattServer.getPrimaryService(bluetooth_profile_js_1.profile.button.id);
39
+ }
40
+ catch (err) {
41
+ if (listenerInit) {
42
+ dispatcher("backgrounderror", new device_js_1.BackgroundErrorEvent(err));
43
+ return;
44
+ }
45
+ else {
46
+ throw new device_js_1.DeviceError({
47
+ code: "service-missing",
48
+ message: err,
49
+ });
50
+ }
51
+ }
52
+ const buttonACharacteristic = await buttonService.getCharacteristic(bluetooth_profile_js_1.profile.button.characteristics.a.id);
53
+ const buttonBCharacteristic = await buttonService.getCharacteristic(bluetooth_profile_js_1.profile.button.characteristics.b.id);
54
+ return new ButtonService(buttonACharacteristic, buttonBCharacteristic, dispatcher);
55
+ }
56
+ dataViewToButtonState(dataView) {
57
+ return dataView.getUint8(0);
58
+ }
59
+ async startNotifications(type) {
60
+ await this.characteristicForEvent(type)?.startNotifications();
61
+ }
62
+ async stopNotifications(type) {
63
+ await this.characteristicForEvent(type)?.stopNotifications();
64
+ }
65
+ characteristicForEvent(type) {
66
+ switch (type) {
67
+ case "buttonachanged": {
68
+ return this.buttonACharacteristic;
69
+ }
70
+ case "buttonbchanged": {
71
+ return this.buttonBCharacteristic;
72
+ }
73
+ default: {
74
+ return undefined;
75
+ }
76
+ }
77
+ }
78
+ }
79
+ exports.ButtonService = ButtonService;
80
+ //# sourceMappingURL=button-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-service.js","sourceRoot":"","sources":["../../lib/button-service.ts"],"names":[],"mappings":";;;AACA,iEAAiD;AACjD,6CAAwD;AACxD,2CAAgE;AAOhE,MAAa,aAAa;IACxB,YACU,qBAAwD,EACxD,qBAAwD,EACxD,kBAA+C;QAFvD;;;;mBAAQ,qBAAqB;WAAmC;QAChE;;;;mBAAQ,qBAAqB;WAAmC;QAChE;;;;mBAAQ,kBAAkB;WAA6B;QAEvD,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAU,EAAE,CAAC;YACjE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CACjD,4BAA4B,EAC5B,CAAC,KAAY,EAAE,EAAE;gBACf,MAAM,MAAM,GAAG,KAAK,CAAC,MAAkC,CAAC;gBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,wBAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7D,CAAC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,UAAqC,EACrC,UAAuC,EACvC,kBAA+D,EAC/D,YAAqB;QAErB,IAAI,aAAyC,CAAC;QAC9C,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,8BAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,CAAC,iBAAiB,EAAE,IAAI,gCAAoB,CAAC,GAAa,CAAC,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,uBAAW,CAAC;oBACpB,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,GAAa;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,qBAAqB,GAAG,MAAM,aAAa,CAAC,iBAAiB,CACjE,8BAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC;QACF,MAAM,qBAAqB,GAAG,MAAM,aAAa,CAAC,iBAAiB,CACjE,8BAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC;QACF,OAAO,IAAI,aAAa,CACtB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,CACX,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,QAAkB;QAC9C,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/D,CAAC;IAEO,sBAAsB,CAAC,IAAuB;QACpD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;YACpC,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;YACpC,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA5ED,sCA4EC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ButtonEvent = exports.ButtonState = void 0;
4
+ var ButtonState;
5
+ (function (ButtonState) {
6
+ ButtonState[ButtonState["NotPressed"] = 0] = "NotPressed";
7
+ ButtonState[ButtonState["ShortPress"] = 1] = "ShortPress";
8
+ ButtonState[ButtonState["LongPress"] = 2] = "LongPress";
9
+ })(ButtonState || (exports.ButtonState = ButtonState = {}));
10
+ class ButtonEvent extends Event {
11
+ constructor(type, state) {
12
+ super(type);
13
+ Object.defineProperty(this, "state", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: state
18
+ });
19
+ }
20
+ }
21
+ exports.ButtonEvent = ButtonEvent;
22
+ //# sourceMappingURL=buttons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../lib/buttons.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,uDAAa,CAAA;AACf,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAID,MAAa,WAAY,SAAQ,KAAK;IACpC,YACE,IAAqB,EACL,KAAkB;QAElC,KAAK,CAAC,IAAI,CAAC,CAAC;QAFZ;;;;mBAAgB,KAAK;WAAa;IAGpC,CAAC;CACF;AAPD,kCAOC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * (c) 2021, Micro:bit Educational Foundation and contributors
4
+ *
5
+ * SPDX-License-Identifier: MIT
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.CortexSpecialReg = exports.ApReg = exports.DapVal = exports.Csw = exports.DapCmd = exports.FICR = void 0;
9
+ // https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/dap/constants.ts
10
+ // https://github.com/mmoskal/dapjs/blob/a32f11f54e9e76a9c61896ddd425c1cb1a29c143/src/cortex/constants.ts
11
+ // CRA's build tooling doesn't support const enums so we've converted them to prefixed constants here.
12
+ // If we move this to a separate library then we can replace them.
13
+ // In the meantime we should prune the list below to what we actually use.
14
+ // FICR Registers
15
+ exports.FICR = {
16
+ CODEPAGESIZE: 0x10000000 | 0x10,
17
+ CODESIZE: 0x10000000 | 0x14,
18
+ DEVICE_ID_1: 0x10000000 | 0x64,
19
+ };
20
+ exports.DapCmd = {
21
+ DAP_INFO: 0x00,
22
+ DAP_CONNECT: 0x02,
23
+ DAP_DISCONNECT: 0x03,
24
+ DAP_TRANSFER: 0x05,
25
+ DAP_TRANSFER_BLOCK: 0x06,
26
+ // Many more.
27
+ };
28
+ exports.Csw = {
29
+ CSW_SIZE: 0x00000007,
30
+ CSW_SIZE32: 0x00000002,
31
+ CSW_ADDRINC: 0x00000030,
32
+ CSW_SADDRINC: 0x00000010,
33
+ CSW_DBGSTAT: 0x00000040,
34
+ CSW_HPROT: 0x02000000,
35
+ CSW_MSTRDBG: 0x20000000,
36
+ CSW_RESERVED: 0x01000000,
37
+ CSW_VALUE: -1, // see below
38
+ // Many more.
39
+ };
40
+ exports.Csw.CSW_VALUE =
41
+ exports.Csw.CSW_RESERVED |
42
+ exports.Csw.CSW_MSTRDBG |
43
+ exports.Csw.CSW_HPROT |
44
+ exports.Csw.CSW_DBGSTAT |
45
+ exports.Csw.CSW_SADDRINC;
46
+ exports.DapVal = {
47
+ AP_ACC: 1 << 0,
48
+ READ: 1 << 1,
49
+ WRITE: 0 << 1,
50
+ // More.
51
+ };
52
+ exports.ApReg = {
53
+ CSW: 0x00,
54
+ TAR: 0x04,
55
+ DRW: 0x0c,
56
+ // More.
57
+ };
58
+ exports.CortexSpecialReg = {
59
+ // Debug Exception and Monitor Control Register
60
+ DEMCR: 0xe000edfc,
61
+ // DWTENA in armv6 architecture reference manual
62
+ DEMCR_VC_CORERESET: 1 << 0,
63
+ // CPUID Register
64
+ CPUID: 0xe000ed00,
65
+ // Debug Halting Control and Status Register
66
+ DHCSR: 0xe000edf0,
67
+ S_RESET_ST: 1 << 25,
68
+ NVIC_AIRCR: 0xe000ed0c,
69
+ NVIC_AIRCR_VECTKEY: 0x5fa << 16,
70
+ NVIC_AIRCR_SYSRESETREQ: 1 << 2,
71
+ // Many more.
72
+ };
73
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../lib/constants.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,sGAAsG;AACtG,yGAAyG;AAEzG,sGAAsG;AACtG,kEAAkE;AAClE,0EAA0E;AAE1E,iBAAiB;AACJ,QAAA,IAAI,GAAG;IAClB,YAAY,EAAE,UAAU,GAAG,IAAI;IAC/B,QAAQ,EAAE,UAAU,GAAG,IAAI;IAE3B,WAAW,EAAE,UAAU,GAAG,IAAI;CAC/B,CAAC;AAEW,QAAA,MAAM,GAAG;IACpB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,IAAI;IACxB,aAAa;CACd,CAAC;AAEW,QAAA,GAAG,GAAG;IACjB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY;IAC3B,aAAa;CACd,CAAC;AACF,WAAG,CAAC,SAAS;IACX,WAAG,CAAC,YAAY;QAChB,WAAG,CAAC,WAAW;QACf,WAAG,CAAC,SAAS;QACb,WAAG,CAAC,WAAW;QACf,WAAG,CAAC,YAAY,CAAC;AAEN,QAAA,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,IAAI,CAAC;IACb,QAAQ;CACT,CAAC;AAEW,QAAA,KAAK,GAAG;IACnB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,QAAQ;CACT,CAAC;AAEW,QAAA,gBAAgB,GAAG;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,UAAU;IACjB,gDAAgD;IAChD,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAE1B,iBAAiB;IACjB,KAAK,EAAE,UAAU;IAEjB,4CAA4C;IAC5C,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE,CAAC,IAAI,EAAE;IAEnB,UAAU,EAAE,UAAU;IACtB,kBAAkB,EAAE,KAAK,IAAI,EAAE;IAC/B,sBAAsB,EAAE,CAAC,IAAI,CAAC;IAE9B,aAAa;CACd,CAAC"}