@microbit/microbit-connection 0.1.0 → 0.9.0-apps.alpha.0
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 +4 -4
- package/build/cjs/accelerometer-service.d.ts +5 -5
- package/build/cjs/accelerometer-service.js +41 -42
- package/build/cjs/accelerometer-service.js.map +1 -1
- package/build/cjs/async-util.d.ts +9 -0
- package/build/cjs/async-util.js +27 -7
- package/build/cjs/async-util.js.map +1 -1
- package/build/cjs/bluetooth-device-wrapper.d.ts +61 -27
- package/build/cjs/bluetooth-device-wrapper.js +285 -266
- package/build/cjs/bluetooth-device-wrapper.js.map +1 -1
- package/build/cjs/bluetooth-profile.d.ts +43 -35
- package/build/cjs/bluetooth-profile.js +35 -29
- package/build/cjs/bluetooth-profile.js.map +1 -1
- package/build/cjs/bluetooth.d.ts +10 -6
- package/build/cjs/bluetooth.js +286 -100
- package/build/cjs/bluetooth.js.map +1 -1
- package/build/cjs/button-service.d.ts +5 -5
- package/build/cjs/button-service.js +31 -45
- package/build/cjs/button-service.js.map +1 -1
- package/build/cjs/device-information-service.d.ts +6 -0
- package/build/cjs/device-information-service.js +34 -0
- package/build/cjs/device-information-service.js.map +1 -0
- package/build/cjs/device.d.ts +65 -8
- package/build/cjs/device.js +16 -2
- package/build/cjs/device.js.map +1 -1
- package/build/cjs/dfu-service.d.ts +9 -0
- package/build/cjs/dfu-service.js +26 -0
- package/build/cjs/dfu-service.js.map +1 -0
- package/build/cjs/flashing/flashing-full.d.ts +14 -0
- package/build/cjs/flashing/flashing-full.js +87 -0
- package/build/cjs/flashing/flashing-full.js.map +1 -0
- package/build/cjs/flashing/flashing-makecode.d.ts +6 -0
- package/build/cjs/flashing/flashing-makecode.js +48 -0
- package/build/cjs/flashing/flashing-makecode.js.map +1 -0
- package/build/cjs/flashing/flashing-partial.d.ts +9 -0
- package/build/cjs/flashing/flashing-partial.js +98 -0
- package/build/cjs/flashing/flashing-partial.js.map +1 -0
- package/build/cjs/flashing/flashing-v1.d.ts +11 -0
- package/build/cjs/flashing/flashing-v1.js +24 -0
- package/build/cjs/flashing/flashing-v1.js.map +1 -0
- package/build/cjs/flashing/nordic-dfu.d.ts +3 -0
- package/build/cjs/flashing/nordic-dfu.js +214 -0
- package/build/cjs/flashing/nordic-dfu.js.map +1 -0
- package/build/cjs/flashing/zip.d.ts +12 -0
- package/build/cjs/flashing/zip.js +177 -0
- package/build/cjs/flashing/zip.js.map +1 -0
- package/build/cjs/index.d.ts +3 -3
- package/build/cjs/index.js +2 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/led-service.d.ts +5 -7
- package/build/cjs/led-service.js +13 -44
- package/build/cjs/led-service.js.map +1 -1
- package/build/cjs/logging.d.ts +1 -1
- package/build/cjs/logging.js +3 -3
- package/build/cjs/logging.js.map +1 -1
- package/build/cjs/magnetometer-service.d.ts +5 -9
- package/build/cjs/magnetometer-service.js +30 -65
- package/build/cjs/magnetometer-service.js.map +1 -1
- package/build/cjs/partial-flashing-service.d.ts +45 -0
- package/build/cjs/partial-flashing-service.js +110 -0
- package/build/cjs/partial-flashing-service.js.map +1 -0
- package/build/cjs/uart-service.d.ts +4 -5
- package/build/cjs/uart-service.js +19 -40
- package/build/cjs/uart-service.js.map +1 -1
- package/build/cjs/usb-device-wrapper.js +33 -8
- package/build/cjs/usb-device-wrapper.js.map +1 -1
- package/build/cjs/usb-partial-flashing.d.ts +1 -3
- package/build/cjs/usb-partial-flashing.js +4 -3
- package/build/cjs/usb-partial-flashing.js.map +1 -1
- package/build/cjs/usb-radio-bridge.js +1 -2
- package/build/cjs/usb-radio-bridge.js.map +1 -1
- package/build/cjs/usb.d.ts +4 -2
- package/build/cjs/usb.js +31 -16
- package/build/cjs/usb.js.map +1 -1
- package/build/esm/accelerometer-service.d.ts +5 -5
- package/build/esm/accelerometer-service.js +42 -43
- package/build/esm/accelerometer-service.js.map +1 -1
- package/build/esm/async-util.d.ts +9 -0
- package/build/esm/async-util.js +22 -6
- package/build/esm/async-util.js.map +1 -1
- package/build/esm/bluetooth-device-wrapper.d.ts +61 -27
- package/build/esm/bluetooth-device-wrapper.js +284 -265
- package/build/esm/bluetooth-device-wrapper.js.map +1 -1
- package/build/esm/bluetooth-profile.d.ts +43 -35
- package/build/esm/bluetooth-profile.js +35 -29
- package/build/esm/bluetooth-profile.js.map +1 -1
- package/build/esm/bluetooth.d.ts +10 -6
- package/build/esm/bluetooth.js +263 -103
- package/build/esm/bluetooth.js.map +1 -1
- package/build/esm/button-service.d.ts +5 -5
- package/build/esm/button-service.js +32 -46
- package/build/esm/button-service.js.map +1 -1
- package/build/esm/device-information-service.d.ts +6 -0
- package/build/esm/device-information-service.js +30 -0
- package/build/esm/device-information-service.js.map +1 -0
- package/build/esm/device.d.ts +65 -8
- package/build/esm/device.js +15 -1
- package/build/esm/device.js.map +1 -1
- package/build/esm/dfu-service.d.ts +9 -0
- package/build/esm/dfu-service.js +22 -0
- package/build/esm/dfu-service.js.map +1 -0
- package/build/esm/flashing/flashing-full.d.ts +14 -0
- package/build/esm/flashing/flashing-full.js +84 -0
- package/build/esm/flashing/flashing-full.js.map +1 -0
- package/build/esm/flashing/flashing-makecode.d.ts +6 -0
- package/build/esm/flashing/flashing-makecode.js +44 -0
- package/build/esm/flashing/flashing-makecode.js.map +1 -0
- package/build/esm/flashing/flashing-partial.d.ts +9 -0
- package/build/esm/flashing/flashing-partial.js +95 -0
- package/build/esm/flashing/flashing-partial.js.map +1 -0
- package/build/esm/flashing/flashing-v1.d.ts +11 -0
- package/build/esm/flashing/flashing-v1.js +20 -0
- package/build/esm/flashing/flashing-v1.js.map +1 -0
- package/build/esm/flashing/nordic-dfu.d.ts +3 -0
- package/build/esm/flashing/nordic-dfu.js +211 -0
- package/build/esm/flashing/nordic-dfu.js.map +1 -0
- package/build/esm/flashing/zip.d.ts +12 -0
- package/build/esm/flashing/zip.js +174 -0
- package/build/esm/flashing/zip.js.map +1 -0
- package/build/esm/index.d.ts +3 -3
- package/build/esm/index.js +2 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/led-service.d.ts +5 -7
- package/build/esm/led-service.js +13 -44
- package/build/esm/led-service.js.map +1 -1
- package/build/esm/logging.d.ts +1 -1
- package/build/esm/logging.js +1 -1
- package/build/esm/logging.js.map +1 -1
- package/build/esm/magnetometer-service.d.ts +5 -9
- package/build/esm/magnetometer-service.js +31 -66
- package/build/esm/magnetometer-service.js.map +1 -1
- package/build/esm/partial-flashing-service.d.ts +45 -0
- package/build/esm/partial-flashing-service.js +106 -0
- package/build/esm/partial-flashing-service.js.map +1 -0
- package/build/esm/uart-service.d.ts +4 -5
- package/build/esm/uart-service.js +19 -40
- package/build/esm/uart-service.js.map +1 -1
- package/build/esm/usb-device-wrapper.js +33 -8
- package/build/esm/usb-device-wrapper.js.map +1 -1
- package/build/esm/usb-partial-flashing.d.ts +1 -3
- package/build/esm/usb-partial-flashing.js +4 -3
- package/build/esm/usb-partial-flashing.js.map +1 -1
- package/build/esm/usb-radio-bridge.js +2 -3
- package/build/esm/usb-radio-bridge.js.map +1 -1
- package/build/esm/usb.d.ts +4 -2
- package/build/esm/usb.js +33 -18
- package/build/esm/usb.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { Capacitor } from "@capacitor/core";
|
|
2
|
+
import { Directory, Filesystem } from "@capacitor/filesystem";
|
|
3
|
+
import { DfuState, NordicDfu } from "@microbit/capacitor-community-nordic-dfu";
|
|
4
|
+
import { createZip } from "./zip";
|
|
5
|
+
import { DeviceError, ProgressStage, } from "../device";
|
|
6
|
+
const appBinFilename = "application.bin";
|
|
7
|
+
const appDatFilename = "application.dat";
|
|
8
|
+
const manifestData = JSON.stringify({
|
|
9
|
+
manifest: {
|
|
10
|
+
application: {
|
|
11
|
+
bin_file: appBinFilename,
|
|
12
|
+
dat_file: appDatFilename,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
function uint8ArrayToBase64(uint8Array) {
|
|
17
|
+
let binary = "";
|
|
18
|
+
const len = uint8Array.byteLength;
|
|
19
|
+
for (let i = 0; i < len; i++) {
|
|
20
|
+
binary += String.fromCharCode(uint8Array[i]);
|
|
21
|
+
}
|
|
22
|
+
return btoa(binary);
|
|
23
|
+
}
|
|
24
|
+
async function writeCacheFile(options) {
|
|
25
|
+
const directory = Directory.Cache;
|
|
26
|
+
const { uri } = await Filesystem.writeFile({ directory, ...options });
|
|
27
|
+
return uri;
|
|
28
|
+
}
|
|
29
|
+
async function createDfuZipFile(boardVersion, appBin) {
|
|
30
|
+
const createInitPacket = boardVersion === "V1" ? createLegacyInitPacketV1 : createInitPacketV2;
|
|
31
|
+
const encoder = new TextEncoder();
|
|
32
|
+
const zipData = createZip([
|
|
33
|
+
{ name: appDatFilename, data: createInitPacket(appBin) },
|
|
34
|
+
{ name: appBinFilename, data: appBin },
|
|
35
|
+
{ name: "manifest.json", data: encoder.encode(manifestData) },
|
|
36
|
+
]);
|
|
37
|
+
return await writeCacheFile({
|
|
38
|
+
path: "dfu.zip",
|
|
39
|
+
data: uint8ArrayToBase64(zipData),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async function getFilePath(boardVersion, appBin) {
|
|
43
|
+
const uri = await createDfuZipFile(boardVersion, appBin);
|
|
44
|
+
return { uri, filename: "dfu.zip" };
|
|
45
|
+
}
|
|
46
|
+
async function cleanupTemporaryFile(connection, filename) {
|
|
47
|
+
try {
|
|
48
|
+
await Filesystem.deleteFile({
|
|
49
|
+
directory: Directory.Cache,
|
|
50
|
+
path: filename,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
// File might not exist or already deleted, ignore errors
|
|
55
|
+
connection.error(`Could not delete temporary file ${filename}`, error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function flashDfu(connection, boardVersion, appBin, progress) {
|
|
59
|
+
const { device } = connection;
|
|
60
|
+
const { uri: filePath, filename } = await getFilePath(boardVersion, appBin);
|
|
61
|
+
let listener;
|
|
62
|
+
try {
|
|
63
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
64
|
+
await new Promise(async (resolve, reject) => {
|
|
65
|
+
listener = await NordicDfu.addListener("DFUStateChanged", ({ state, data }) => {
|
|
66
|
+
switch (state) {
|
|
67
|
+
case DfuState.DFU_COMPLETED: {
|
|
68
|
+
progress(ProgressStage.FullFlashing, 1);
|
|
69
|
+
resolve();
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case DfuState.DFU_ABORTED: {
|
|
73
|
+
reject(new DeviceError({
|
|
74
|
+
code: "flash-cancelled",
|
|
75
|
+
message: "Flash operation was cancelled",
|
|
76
|
+
}));
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case DfuState.DFU_PROGRESS: {
|
|
80
|
+
if (typeof data.percent === "number") {
|
|
81
|
+
progress(ProgressStage.FullFlashing, data.percent / 100);
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case DfuState.DFU_FAILED: {
|
|
86
|
+
reject(new DeviceError({
|
|
87
|
+
code: "flash-full-failed",
|
|
88
|
+
message: "Full flash via DFU failed",
|
|
89
|
+
}));
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
default: {
|
|
93
|
+
connection.log(`DFU state: ${state}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
// Note this doesn't await the whole DFU process, just its initialization
|
|
98
|
+
const error = await NordicDfu.startDFU({
|
|
99
|
+
deviceName: device.name,
|
|
100
|
+
deviceAddress: device.deviceId,
|
|
101
|
+
filePath,
|
|
102
|
+
dfuOptions: Capacitor.getPlatform() === "android"
|
|
103
|
+
? {
|
|
104
|
+
...{
|
|
105
|
+
V1: { forceDfu: true },
|
|
106
|
+
V2: {
|
|
107
|
+
unsafeExperimentalButtonlessServiceInSecureDfuEnabled: true,
|
|
108
|
+
disableNotification: true,
|
|
109
|
+
restoreBond: true,
|
|
110
|
+
},
|
|
111
|
+
}[boardVersion],
|
|
112
|
+
startAsForegroundService: false,
|
|
113
|
+
keepBond: true,
|
|
114
|
+
packetReceiptNotificationsEnabled: true,
|
|
115
|
+
}
|
|
116
|
+
: {},
|
|
117
|
+
});
|
|
118
|
+
if (error) {
|
|
119
|
+
connection.error(`DFU Error: ${error.message}`, error);
|
|
120
|
+
reject(new DeviceError({
|
|
121
|
+
code: "flash-full-failed",
|
|
122
|
+
message: error.message || "Full flash via DFU failed",
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
// Final resolution will come from listener callbacks.
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
await listener?.remove();
|
|
130
|
+
await cleanupTemporaryFile(connection, filename);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const createLegacyInitPacketV1 = (appData) => {
|
|
134
|
+
// Legacy DFU init packet structure for micro:bit V1
|
|
135
|
+
// Based on: dev-type 0xFFFF, dev-revision 0xFFFFFFFF, application-version 0xFFFFFFFF, sd-req 0x64
|
|
136
|
+
const buffer = new ArrayBuffer(14);
|
|
137
|
+
const view = new DataView(buffer);
|
|
138
|
+
const uint8View = new Uint8Array(buffer);
|
|
139
|
+
let offset = 0;
|
|
140
|
+
// Device Type (2 bytes, little-endian) - 0xFFFF (wildcard)
|
|
141
|
+
view.setUint16(offset, 0xffff, true);
|
|
142
|
+
offset += 2;
|
|
143
|
+
// Device Revision (2 bytes, little-endian) - 0xFFFF (wildcard, truncated from 0xFFFFFFFF)
|
|
144
|
+
view.setUint16(offset, 0xffff, true);
|
|
145
|
+
offset += 2;
|
|
146
|
+
// Application Version (4 bytes, little-endian) - 0xFFFFFFFF (wildcard)
|
|
147
|
+
view.setUint32(offset, 0xffffffff, true);
|
|
148
|
+
offset += 4;
|
|
149
|
+
// SoftDevice length (2 bytes, little-endian) - 1 (one SoftDevice requirement)
|
|
150
|
+
view.setUint16(offset, 1, true);
|
|
151
|
+
offset += 2;
|
|
152
|
+
// SoftDevice requirement (2 bytes, little-endian) - 0x0064 (S110 v10.0)
|
|
153
|
+
view.setUint16(offset, 0x0064, true);
|
|
154
|
+
offset += 2;
|
|
155
|
+
// CRC-16 of the application (2 bytes, little-endian)
|
|
156
|
+
const crc16 = calculateCRC16(appData);
|
|
157
|
+
view.setUint16(offset, crc16, true);
|
|
158
|
+
return uint8View;
|
|
159
|
+
};
|
|
160
|
+
const calculateCRC16 = (data) => {
|
|
161
|
+
// CRC-16/CCITT-FALSE (polynomial 0x1021, initial value 0xFFFF)
|
|
162
|
+
let crc = 0xffff;
|
|
163
|
+
for (let i = 0; i < data.length; i++) {
|
|
164
|
+
crc ^= data[i] << 8;
|
|
165
|
+
for (let j = 0; j < 8; j++) {
|
|
166
|
+
if (crc & 0x8000) {
|
|
167
|
+
crc = (crc << 1) ^ 0x1021;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
crc = crc << 1;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return crc & 0xffff;
|
|
175
|
+
};
|
|
176
|
+
const createInitPacketV2 = (appBin) => {
|
|
177
|
+
//typedef struct {
|
|
178
|
+
// uint8_t magic[12]; // identify this struct "microbit_app"
|
|
179
|
+
// uint32_t version; // version of this struct == 1
|
|
180
|
+
// uint32_t app_size; // only used for DFU_FW_TYPE_APPLICATION
|
|
181
|
+
// uint32_t hash_size; // 32 => DFU_HASH_TYPE_SHA256 or zero to bypass hash check
|
|
182
|
+
// uint8_t hash_bytes[32]; // hash of whole DFU download
|
|
183
|
+
//} microbit_dfu_app_t;
|
|
184
|
+
const appSize = appBin.length;
|
|
185
|
+
const magic = "microbit_app";
|
|
186
|
+
const version = 1;
|
|
187
|
+
const hashSize = 0;
|
|
188
|
+
const hash = new Uint8Array(32).fill(0);
|
|
189
|
+
const buffer = new ArrayBuffer(12 + 4 + 4 + 4 + 32); // total: 56 bytes
|
|
190
|
+
const view = new DataView(buffer);
|
|
191
|
+
const uint8View = new Uint8Array(buffer);
|
|
192
|
+
let offset = 0;
|
|
193
|
+
// Write magic string (12 bytes)
|
|
194
|
+
const encoder = new TextEncoder();
|
|
195
|
+
const magicBytes = encoder.encode(magic);
|
|
196
|
+
uint8View.set(magicBytes, offset);
|
|
197
|
+
offset += 12;
|
|
198
|
+
// Write version (4 bytes, little-endian)
|
|
199
|
+
view.setUint32(offset, version, true);
|
|
200
|
+
offset += 4;
|
|
201
|
+
// Write appSize (4 bytes, little-endian)
|
|
202
|
+
view.setUint32(offset, appSize, true);
|
|
203
|
+
offset += 4;
|
|
204
|
+
// Write hashSize (4 bytes, little-endian)
|
|
205
|
+
view.setUint32(offset, hashSize, true);
|
|
206
|
+
offset += 4;
|
|
207
|
+
// Write hash (32 bytes)
|
|
208
|
+
uint8View.set(hash, offset);
|
|
209
|
+
return uint8View;
|
|
210
|
+
};
|
|
211
|
+
//# sourceMappingURL=nordic-dfu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nordic-dfu.js","sourceRoot":"","sources":["../../../lib/flashing/nordic-dfu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal ZIP file creator using STORE method (no compression).
|
|
3
|
+
* Sufficient for creating Nordic DFU packages.
|
|
4
|
+
*/
|
|
5
|
+
export interface ZipEntry {
|
|
6
|
+
name: string;
|
|
7
|
+
data: Uint8Array;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a ZIP file containing the given entries with no compression.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createZip(entries: ZipEntry[]): Uint8Array;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal ZIP file creator using STORE method (no compression).
|
|
3
|
+
* Sufficient for creating Nordic DFU packages.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Creates a ZIP file containing the given entries with no compression.
|
|
7
|
+
*/
|
|
8
|
+
export function createZip(entries) {
|
|
9
|
+
const encoder = new TextEncoder();
|
|
10
|
+
// Calculate total size needed
|
|
11
|
+
let totalSize = 22; // End of central directory
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
const nameBytes = encoder.encode(entry.name);
|
|
14
|
+
totalSize += 30 + nameBytes.length + entry.data.length; // Local file header + data
|
|
15
|
+
totalSize += 46 + nameBytes.length; // Central directory entry
|
|
16
|
+
}
|
|
17
|
+
const buffer = new ArrayBuffer(totalSize);
|
|
18
|
+
const view = new DataView(buffer);
|
|
19
|
+
const bytes = new Uint8Array(buffer);
|
|
20
|
+
let localOffset = 0;
|
|
21
|
+
const centralDirectoryEntries = [];
|
|
22
|
+
// Write local file headers and data
|
|
23
|
+
for (const entry of entries) {
|
|
24
|
+
const nameBytes = encoder.encode(entry.name);
|
|
25
|
+
const crc = crc32(entry.data);
|
|
26
|
+
const fileOffset = localOffset;
|
|
27
|
+
// Local file header signature
|
|
28
|
+
view.setUint32(localOffset, 0x04034b50, true);
|
|
29
|
+
localOffset += 4;
|
|
30
|
+
// Version needed to extract (2.0)
|
|
31
|
+
view.setUint16(localOffset, 20, true);
|
|
32
|
+
localOffset += 2;
|
|
33
|
+
// General purpose bit flag
|
|
34
|
+
view.setUint16(localOffset, 0, true);
|
|
35
|
+
localOffset += 2;
|
|
36
|
+
// Compression method (0 = STORE)
|
|
37
|
+
view.setUint16(localOffset, 0, true);
|
|
38
|
+
localOffset += 2;
|
|
39
|
+
// Last mod file time (0)
|
|
40
|
+
view.setUint16(localOffset, 0, true);
|
|
41
|
+
localOffset += 2;
|
|
42
|
+
// Last mod file date (0)
|
|
43
|
+
view.setUint16(localOffset, 0, true);
|
|
44
|
+
localOffset += 2;
|
|
45
|
+
// CRC-32
|
|
46
|
+
view.setUint32(localOffset, crc, true);
|
|
47
|
+
localOffset += 4;
|
|
48
|
+
// Compressed size (same as uncompressed for STORE)
|
|
49
|
+
view.setUint32(localOffset, entry.data.length, true);
|
|
50
|
+
localOffset += 4;
|
|
51
|
+
// Uncompressed size
|
|
52
|
+
view.setUint32(localOffset, entry.data.length, true);
|
|
53
|
+
localOffset += 4;
|
|
54
|
+
// File name length
|
|
55
|
+
view.setUint16(localOffset, nameBytes.length, true);
|
|
56
|
+
localOffset += 2;
|
|
57
|
+
// Extra field length
|
|
58
|
+
view.setUint16(localOffset, 0, true);
|
|
59
|
+
localOffset += 2;
|
|
60
|
+
// File name
|
|
61
|
+
bytes.set(nameBytes, localOffset);
|
|
62
|
+
localOffset += nameBytes.length;
|
|
63
|
+
// File data
|
|
64
|
+
bytes.set(entry.data, localOffset);
|
|
65
|
+
localOffset += entry.data.length;
|
|
66
|
+
centralDirectoryEntries.push({
|
|
67
|
+
nameBytes,
|
|
68
|
+
crc,
|
|
69
|
+
size: entry.data.length,
|
|
70
|
+
offset: fileOffset,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const centralDirectoryOffset = localOffset;
|
|
74
|
+
// Write central directory
|
|
75
|
+
for (const entry of centralDirectoryEntries) {
|
|
76
|
+
// Central file header signature
|
|
77
|
+
view.setUint32(localOffset, 0x02014b50, true);
|
|
78
|
+
localOffset += 4;
|
|
79
|
+
// Version made by (2.0, DOS)
|
|
80
|
+
view.setUint16(localOffset, 20, true);
|
|
81
|
+
localOffset += 2;
|
|
82
|
+
// Version needed to extract (2.0)
|
|
83
|
+
view.setUint16(localOffset, 20, true);
|
|
84
|
+
localOffset += 2;
|
|
85
|
+
// General purpose bit flag
|
|
86
|
+
view.setUint16(localOffset, 0, true);
|
|
87
|
+
localOffset += 2;
|
|
88
|
+
// Compression method (0 = STORE)
|
|
89
|
+
view.setUint16(localOffset, 0, true);
|
|
90
|
+
localOffset += 2;
|
|
91
|
+
// Last mod file time
|
|
92
|
+
view.setUint16(localOffset, 0, true);
|
|
93
|
+
localOffset += 2;
|
|
94
|
+
// Last mod file date
|
|
95
|
+
view.setUint16(localOffset, 0, true);
|
|
96
|
+
localOffset += 2;
|
|
97
|
+
// CRC-32
|
|
98
|
+
view.setUint32(localOffset, entry.crc, true);
|
|
99
|
+
localOffset += 4;
|
|
100
|
+
// Compressed size
|
|
101
|
+
view.setUint32(localOffset, entry.size, true);
|
|
102
|
+
localOffset += 4;
|
|
103
|
+
// Uncompressed size
|
|
104
|
+
view.setUint32(localOffset, entry.size, true);
|
|
105
|
+
localOffset += 4;
|
|
106
|
+
// File name length
|
|
107
|
+
view.setUint16(localOffset, entry.nameBytes.length, true);
|
|
108
|
+
localOffset += 2;
|
|
109
|
+
// Extra field length
|
|
110
|
+
view.setUint16(localOffset, 0, true);
|
|
111
|
+
localOffset += 2;
|
|
112
|
+
// File comment length
|
|
113
|
+
view.setUint16(localOffset, 0, true);
|
|
114
|
+
localOffset += 2;
|
|
115
|
+
// Disk number start
|
|
116
|
+
view.setUint16(localOffset, 0, true);
|
|
117
|
+
localOffset += 2;
|
|
118
|
+
// Internal file attributes
|
|
119
|
+
view.setUint16(localOffset, 0, true);
|
|
120
|
+
localOffset += 2;
|
|
121
|
+
// External file attributes
|
|
122
|
+
view.setUint32(localOffset, 0, true);
|
|
123
|
+
localOffset += 4;
|
|
124
|
+
// Relative offset of local header
|
|
125
|
+
view.setUint32(localOffset, entry.offset, true);
|
|
126
|
+
localOffset += 4;
|
|
127
|
+
// File name
|
|
128
|
+
bytes.set(entry.nameBytes, localOffset);
|
|
129
|
+
localOffset += entry.nameBytes.length;
|
|
130
|
+
}
|
|
131
|
+
const centralDirectorySize = localOffset - centralDirectoryOffset;
|
|
132
|
+
// End of central directory record
|
|
133
|
+
// Signature
|
|
134
|
+
view.setUint32(localOffset, 0x06054b50, true);
|
|
135
|
+
localOffset += 4;
|
|
136
|
+
// Number of this disk
|
|
137
|
+
view.setUint16(localOffset, 0, true);
|
|
138
|
+
localOffset += 2;
|
|
139
|
+
// Disk where central directory starts
|
|
140
|
+
view.setUint16(localOffset, 0, true);
|
|
141
|
+
localOffset += 2;
|
|
142
|
+
// Number of central directory records on this disk
|
|
143
|
+
view.setUint16(localOffset, entries.length, true);
|
|
144
|
+
localOffset += 2;
|
|
145
|
+
// Total number of central directory records
|
|
146
|
+
view.setUint16(localOffset, entries.length, true);
|
|
147
|
+
localOffset += 2;
|
|
148
|
+
// Size of central directory
|
|
149
|
+
view.setUint32(localOffset, centralDirectorySize, true);
|
|
150
|
+
localOffset += 4;
|
|
151
|
+
// Offset of start of central directory
|
|
152
|
+
view.setUint32(localOffset, centralDirectoryOffset, true);
|
|
153
|
+
localOffset += 4;
|
|
154
|
+
// Comment length
|
|
155
|
+
view.setUint16(localOffset, 0, true);
|
|
156
|
+
return bytes;
|
|
157
|
+
}
|
|
158
|
+
// CRC-32 lookup table
|
|
159
|
+
const crc32Table = new Uint32Array(256);
|
|
160
|
+
for (let i = 0; i < 256; i++) {
|
|
161
|
+
let c = i;
|
|
162
|
+
for (let j = 0; j < 8; j++) {
|
|
163
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
164
|
+
}
|
|
165
|
+
crc32Table[i] = c;
|
|
166
|
+
}
|
|
167
|
+
function crc32(data) {
|
|
168
|
+
let crc = 0xffffffff;
|
|
169
|
+
for (let i = 0; i < data.length; i++) {
|
|
170
|
+
crc = crc32Table[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);
|
|
171
|
+
}
|
|
172
|
+
return (crc ^ 0xffffffff) >>> 0;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=zip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../lib/flashing/zip.ts"],"names":[],"mappings":"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"}
|
package/build/esm/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { AccelerometerData, AccelerometerDataEvent } from "./accelerometer.js";
|
|
|
2
2
|
import { createWebBluetoothConnection, MicrobitWebBluetoothConnection, MicrobitWebBluetoothConnectionOptions } from "./bluetooth.js";
|
|
3
3
|
import { BoardId } from "./board-id.js";
|
|
4
4
|
import { ButtonEvent, ButtonEventType, ButtonState } from "./buttons.js";
|
|
5
|
-
import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardVersion, ConnectionStatus, ConnectionStatusEvent, DeviceConnection, DeviceConnectionEventMap, DeviceError, DeviceErrorCode, FlashDataError, FlashDataSource, FlashOptions } from "./device.js";
|
|
5
|
+
import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardVersion, ConnectOptions, ConnectionStatus, ConnectionStatusEvent, DeviceConnection, DeviceConnectionEventMap, DeviceError, DeviceErrorCode, FlashDataError, FlashDataSource, FlashOptions, ProgressCallback, ProgressStage } from "./device.js";
|
|
6
6
|
import { TypedEventTarget } from "./events.js";
|
|
7
7
|
import { createUniversalHexFlashDataSource } from "./hex-flash-data-source.js";
|
|
8
8
|
import { LedMatrix } from "./led.js";
|
|
@@ -13,5 +13,5 @@ import { ServiceConnectionEventMap } from "./service-events.js";
|
|
|
13
13
|
import { UARTDataEvent } from "./uart.js";
|
|
14
14
|
import { createRadioBridgeConnection, MicrobitRadioBridgeConnection, MicrobitRadioBridgeConnectionOptions } from "./usb-radio-bridge.js";
|
|
15
15
|
import { createWebUSBConnection, DeviceSelectionMode, MicrobitWebUSBConnection, MicrobitWebUSBConnectionOptions } from "./usb.js";
|
|
16
|
-
export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
|
|
17
|
-
export type { AccelerometerData, AccelerometerDataEvent, BoardVersion, ButtonEvent, ButtonEventType, ButtonState, DeviceConnection, DeviceErrorCode, FlashDataSource, FlashOptions, LedMatrix, Logging, LoggingEvent, MagnetometerData, MagnetometerDataEvent, MicrobitRadioBridgeConnection, MicrobitRadioBridgeConnectionOptions, MicrobitWebBluetoothConnection, MicrobitWebBluetoothConnectionOptions, MicrobitWebUSBConnection, MicrobitWebUSBConnectionOptions, };
|
|
16
|
+
export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, ProgressStage, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
|
|
17
|
+
export type { AccelerometerData, AccelerometerDataEvent, BoardVersion, ButtonEvent, ButtonEventType, ButtonState, ConnectOptions, DeviceConnection, DeviceErrorCode, FlashDataSource, FlashOptions, LedMatrix, Logging, LoggingEvent, MagnetometerData, MagnetometerDataEvent, MicrobitRadioBridgeConnection, MicrobitRadioBridgeConnectionOptions, MicrobitWebBluetoothConnection, MicrobitWebBluetoothConnectionOptions, MicrobitWebUSBConnection, MicrobitWebUSBConnectionOptions, ProgressCallback, };
|
package/build/esm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createWebBluetoothConnection, } from "./bluetooth.js";
|
|
2
2
|
import { BoardId } from "./board-id.js";
|
|
3
|
-
import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, DeviceConnectionEventMap, DeviceError, FlashDataError, } from "./device.js";
|
|
3
|
+
import { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, ConnectionStatus, ConnectionStatusEvent, DeviceConnectionEventMap, DeviceError, FlashDataError, ProgressStage, } from "./device.js";
|
|
4
4
|
import { TypedEventTarget } from "./events.js";
|
|
5
5
|
import { createUniversalHexFlashDataSource } from "./hex-flash-data-source.js";
|
|
6
6
|
import { FlashEvent, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, } from "./serial-events.js";
|
|
@@ -8,5 +8,5 @@ import { ServiceConnectionEventMap } from "./service-events.js";
|
|
|
8
8
|
import { UARTDataEvent } from "./uart.js";
|
|
9
9
|
import { createRadioBridgeConnection, } from "./usb-radio-bridge.js";
|
|
10
10
|
import { createWebUSBConnection, DeviceSelectionMode, } from "./usb.js";
|
|
11
|
-
export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
|
|
11
|
+
export { AfterRequestDevice, BackgroundErrorEvent, BeforeRequestDevice, BoardId, ConnectionStatus, ConnectionStatusEvent, createRadioBridgeConnection, createUniversalHexFlashDataSource, createWebBluetoothConnection, createWebUSBConnection, DeviceConnectionEventMap, DeviceSelectionMode, DeviceError, FlashDataError, FlashEvent, ProgressStage, SerialConnectionEventMap, SerialDataEvent, SerialErrorEvent, SerialResetEvent, ServiceConnectionEventMap, TypedEventTarget, UARTDataEvent, };
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAG7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAG7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EAGnB,gBAAgB,EAChB,qBAAqB,EAErB,wBAAwB,EACxB,WAAW,EAEX,cAAc,EAId,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAI/E,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,2BAA2B,GAG5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GAGpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,iCAAiC,EACjC,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,UAAU,EACV,aAAa,EACb,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,GACd,CAAC"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Service } from "./bluetooth-device-wrapper.js";
|
|
2
2
|
import { LedMatrix } from "./led.js";
|
|
3
|
-
import { TypedServiceEvent
|
|
3
|
+
import { TypedServiceEvent } from "./service-events.js";
|
|
4
4
|
export declare class LedService implements Service {
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
constructor(matrixStateCharacteristic: BluetoothRemoteGATTCharacteristic, scrollingDelayCharacteristic: BluetoothRemoteGATTCharacteristic, textCharactertistic: BluetoothRemoteGATTCharacteristic, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>);
|
|
10
|
-
static createService(gattServer: BluetoothRemoteGATTServer, dispatcher: TypedServiceEventDispatcher, queueGattOperation: <R>(action: () => Promise<R>) => Promise<R>, listenerInit: boolean): Promise<LedService | undefined>;
|
|
5
|
+
private deviceId;
|
|
6
|
+
uuid: string;
|
|
7
|
+
constructor(deviceId: string);
|
|
8
|
+
getRelevantEvents(): TypedServiceEvent[];
|
|
11
9
|
getLedMatrix(): Promise<LedMatrix>;
|
|
12
10
|
setLedMatrix(value: LedMatrix): Promise<void>;
|
|
13
11
|
private dataViewToLedMatrix;
|
package/build/esm/led-service.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { BleClient } from "@capacitor-community/bluetooth-le";
|
|
1
2
|
import { profile } from "./bluetooth-profile.js";
|
|
2
|
-
import { BackgroundErrorEvent, DeviceError } from "./device.js";
|
|
3
3
|
const createLedMatrix = () => {
|
|
4
4
|
return [
|
|
5
5
|
[false, false, false, false, false],
|
|
@@ -10,61 +10,30 @@ const createLedMatrix = () => {
|
|
|
10
10
|
];
|
|
11
11
|
};
|
|
12
12
|
export class LedService {
|
|
13
|
-
constructor(
|
|
14
|
-
Object.defineProperty(this, "
|
|
13
|
+
constructor(deviceId) {
|
|
14
|
+
Object.defineProperty(this, "deviceId", {
|
|
15
15
|
enumerable: true,
|
|
16
16
|
configurable: true,
|
|
17
17
|
writable: true,
|
|
18
|
-
value:
|
|
18
|
+
value: deviceId
|
|
19
19
|
});
|
|
20
|
-
Object.defineProperty(this, "
|
|
20
|
+
Object.defineProperty(this, "uuid", {
|
|
21
21
|
enumerable: true,
|
|
22
22
|
configurable: true,
|
|
23
23
|
writable: true,
|
|
24
|
-
value:
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "textCharactertistic", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: textCharactertistic
|
|
31
|
-
});
|
|
32
|
-
Object.defineProperty(this, "queueGattOperation", {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
configurable: true,
|
|
35
|
-
writable: true,
|
|
36
|
-
value: queueGattOperation
|
|
24
|
+
value: profile.led.id
|
|
37
25
|
});
|
|
38
26
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
ledService = await gattServer.getPrimaryService(profile.led.id);
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
if (listenerInit) {
|
|
46
|
-
dispatcher("backgrounderror", new BackgroundErrorEvent(err));
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
throw new DeviceError({
|
|
51
|
-
code: "service-missing",
|
|
52
|
-
message: err,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const matrixStateCharacteristic = await ledService.getCharacteristic(profile.led.characteristics.matrixState.id);
|
|
57
|
-
const scrollingDelayCharacteristic = await ledService.getCharacteristic(profile.led.characteristics.scrollingDelay.id);
|
|
58
|
-
const textCharacteristic = await ledService.getCharacteristic(profile.led.characteristics.text.id);
|
|
59
|
-
return new LedService(matrixStateCharacteristic, scrollingDelayCharacteristic, textCharacteristic, queueGattOperation);
|
|
27
|
+
getRelevantEvents() {
|
|
28
|
+
return [];
|
|
60
29
|
}
|
|
61
30
|
async getLedMatrix() {
|
|
62
|
-
const dataView = await this.
|
|
31
|
+
const dataView = await BleClient.read(this.deviceId, profile.led.id, profile.led.characteristics.matrixState.id);
|
|
63
32
|
return this.dataViewToLedMatrix(dataView);
|
|
64
33
|
}
|
|
65
34
|
async setLedMatrix(value) {
|
|
66
35
|
const dataView = this.ledMatrixToDataView(value);
|
|
67
|
-
|
|
36
|
+
await BleClient.write(this.deviceId, profile.led.id, profile.led.characteristics.matrixState.id, dataView);
|
|
68
37
|
}
|
|
69
38
|
dataViewToLedMatrix(dataView) {
|
|
70
39
|
if (dataView.byteLength !== 5) {
|
|
@@ -99,15 +68,15 @@ export class LedService {
|
|
|
99
68
|
if (bytes.length > 20) {
|
|
100
69
|
throw new Error("Text must be <= 20 bytes when encoded as UTF-8");
|
|
101
70
|
}
|
|
102
|
-
|
|
71
|
+
await BleClient.write(this.deviceId, profile.led.id, profile.led.characteristics.text.id, new DataView(bytes.buffer));
|
|
103
72
|
}
|
|
104
73
|
async setScrollingDelay(value) {
|
|
105
74
|
const dataView = new DataView(new ArrayBuffer(2));
|
|
106
75
|
dataView.setUint16(0, value, true);
|
|
107
|
-
|
|
76
|
+
await BleClient.write(this.deviceId, profile.led.id, profile.led.characteristics.scrollingDelay.id, dataView);
|
|
108
77
|
}
|
|
109
78
|
async getScrollingDelay() {
|
|
110
|
-
const dataView = await this.
|
|
79
|
+
const dataView = await BleClient.read(this.deviceId, profile.led.id, profile.led.characteristics.scrollingDelay.id);
|
|
111
80
|
return dataView.getUint16(0, true);
|
|
112
81
|
}
|
|
113
82
|
async startNotifications(type) { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"led-service.js","sourceRoot":"","sources":["../../lib/led-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"led-service.js","sourceRoot":"","sources":["../../lib/led-service.ts"],"names":[],"mappings":"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"}
|
package/build/esm/logging.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface Logging {
|
|
|
14
14
|
error(message: string, e: unknown): void;
|
|
15
15
|
log(e: any): void;
|
|
16
16
|
}
|
|
17
|
-
export declare class
|
|
17
|
+
export declare class ConsoleLogging implements Logging {
|
|
18
18
|
event(_event: LoggingEvent): void;
|
|
19
19
|
error(_m: string, _e: unknown): void;
|
|
20
20
|
log(_e: any): void;
|
package/build/esm/logging.js
CHANGED
package/build/esm/logging.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../lib/logging.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../lib/logging.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,MAAoB;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,KAAK,CAAC,EAAU,EAAE,EAAW;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,EAAO;QACT,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF"}
|