UNPKG

@manekinekko/angular-web-bluetooth

Version:
91 lines 9.5 kB
/* * Fake Web Bluetooth implementation * Replace real browser Bluetooth objects by a much simpler objects that implement some required functionalities */ export class FakeBluetoothDevice { constructor(id, name) { this.id = id; this.name = name; this.gatt = null; this.listeners = { gattserverdisconnected: [] }; } addEventListener(type, listener) { this.listeners[type] = [ ...this.listeners[type], listener ]; } disconnect() { const mockedEvent = { target: this }; this.listeners['gattserverdisconnected'].forEach(listener => listener(mockedEvent)); } clear() { this.id = ""; this.name = ""; this.listeners = { gattserverdisconnected: [] }; } } export class FakeBluetoothRemoteGATTServer { constructor(device, services) { this.device = device; this.services = services; this.connected = false; device.gatt = this; } connect() { this.connected = true; return Promise.resolve(this); } getPrimaryService(service) { return Promise.resolve(this.services[service].service); } disconnect() { this.device.disconnect(); this.connected = false; } } export class FakeBluetoothRemoteGATTService { constructor(device, characteristics) { this.device = device; this.characteristics = characteristics; this.characteristics.service = this; } getCharacteristic(characteristic) { return Promise.resolve(this.characteristics[characteristic]); } } export class FakeBluetoothRemoteGATTCharacteristic { constructor(properties, initialValue) { this.listeners = { characteristicvaluechanged: [] }; this.properties = properties; this.value = initialValue; this.initialValue = initialValue; } readValue() { return Promise.resolve(this.value); } addEventListener(type, listener) { this.listeners[type] = [ ...this.listeners[type], listener ]; } changeValue(value) { this.value = value; const mockedEvent = { target: this }; this.listeners['characteristicvaluechanged'].forEach(listener => listener(mockedEvent)); } clear() { this.value = this.initialValue; this.listeners = { characteristicvaluechanged: [] }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hbmVraW5la2tvL2FuZ3VsYXItd2ViLWJsdWV0b290aC9zcmMvbGliL3Rlc3QudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQVE5QixZQUFtQixFQUFVLEVBQVMsSUFBWTtRQUEvQixPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQVBsRCxTQUFJLEdBQXFDLElBQUksQ0FBQztRQUN0QyxjQUFTLEdBRWI7WUFDRixzQkFBc0IsRUFBRSxFQUFFO1NBQzNCLENBQUM7SUFHRixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLFFBQXVCO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDckIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN2QixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxXQUFXLEdBQUcsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFZLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFvQixDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2Ysc0JBQXNCLEVBQUUsRUFBRTtTQUMzQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLDZCQUE2QjtJQUd4QyxZQUFtQixNQUFXLEVBQVMsUUFBK0Q7UUFBbkYsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQUFTLGFBQVEsR0FBUixRQUFRLENBQXVEO1FBRnRHLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHaEIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQTZCO1FBQzdDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sOEJBQThCO0lBQ3pDLFlBQW1CLE1BQVcsRUFBUyxlQUFvQjtRQUF4QyxXQUFNLEdBQU4sTUFBTSxDQUFLO1FBQVMsb0JBQWUsR0FBZixlQUFlLENBQUs7UUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUEyQztRQUMzRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxxQ0FBcUM7SUFVaEQsWUFBWSxVQUE2QyxFQUFFLFlBQXVCO1FBTjFFLGNBQVMsR0FFYjtZQUNGLDBCQUEwQixFQUFFLEVBQUU7U0FDL0IsQ0FBQztRQUdBLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLFFBQXVCO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDckIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN2QixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBZTtRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLFdBQVcsR0FBRyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQVksQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZiwwQkFBMEIsRUFBRSxFQUFFO1NBQy9CLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogRmFrZSBXZWIgQmx1ZXRvb3RoIGltcGxlbWVudGF0aW9uXG4gKiBSZXBsYWNlIHJlYWwgYnJvd3NlciBCbHVldG9vdGggb2JqZWN0cyBieSBhIG11Y2ggc2ltcGxlciBvYmplY3RzIHRoYXQgaW1wbGVtZW50IHNvbWUgcmVxdWlyZWQgZnVuY3Rpb25hbGl0aWVzXG4gKi9cblxuZXhwb3J0IGNsYXNzIEZha2VCbHVldG9vdGhEZXZpY2Uge1xuICBnYXR0OiBCbHVldG9vdGhSZW1vdGVHQVRUU2VydmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogRXZlbnRMaXN0ZW5lcltdXG4gIH0gPSB7XG4gICAgZ2F0dHNlcnZlcmRpc2Nvbm5lY3RlZDogW11cbiAgfTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IHN0cmluZywgcHVibGljIG5hbWU6IHN0cmluZykge1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyKSB7XG4gICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0gPSBbXG4gICAgICAuLi50aGlzLmxpc3RlbmVyc1t0eXBlXSxcbiAgICAgIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKSB7XG4gICAgY29uc3QgbW9ja2VkRXZlbnQgPSB7dGFyZ2V0OiB0aGlzfSBhcyB1bmtub3duO1xuICAgIHRoaXMubGlzdGVuZXJzWydnYXR0c2VydmVyZGlzY29ubmVjdGVkJ10uZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcihtb2NrZWRFdmVudCBhcyBFdmVudCkpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5pZCA9IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICB0aGlzLmxpc3RlbmVycyA9IHtcbiAgICAgIGdhdHRzZXJ2ZXJkaXNjb25uZWN0ZWQ6IFtdXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmFrZUJsdWV0b290aFJlbW90ZUdBVFRTZXJ2ZXIge1xuICBjb25uZWN0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGV2aWNlOiBhbnksIHB1YmxpYyBzZXJ2aWNlczogeyBba2V5OiBzdHJpbmddOiB7IHNlcnZpY2U6IGFueSwgcHJpbWFyeTogYm9vbGVhbiB9IH0pIHtcbiAgICBkZXZpY2UuZ2F0dCA9IHRoaXM7XG4gIH1cblxuICBjb25uZWN0KCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuICB9XG5cbiAgZ2V0UHJpbWFyeVNlcnZpY2Uoc2VydmljZTogQmx1ZXRvb3RoU2VydmljZVVVSUQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc2VydmljZXNbc2VydmljZV0uc2VydmljZSk7XG4gIH1cblxuICBkaXNjb25uZWN0KCkge1xuICAgIHRoaXMuZGV2aWNlLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGYWtlQmx1ZXRvb3RoUmVtb3RlR0FUVFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGV2aWNlOiBhbnksIHB1YmxpYyBjaGFyYWN0ZXJpc3RpY3M6IGFueSkge1xuICAgIHRoaXMuY2hhcmFjdGVyaXN0aWNzLnNlcnZpY2UgPSB0aGlzO1xuICB9XG5cbiAgZ2V0Q2hhcmFjdGVyaXN0aWMoY2hhcmFjdGVyaXN0aWM6IEJsdWV0b290aENoYXJhY3RlcmlzdGljVVVJRCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jaGFyYWN0ZXJpc3RpY3NbY2hhcmFjdGVyaXN0aWNdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmFrZUJsdWV0b290aFJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYyB7XG4gIHZhbHVlOiBEYXRhVmlldyB8IHVuZGVmaW5lZDtcbiAgcHJvcGVydGllczogQmx1ZXRvb3RoQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzO1xuICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxWYWx1ZTogRGF0YVZpZXcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogRXZlbnRMaXN0ZW5lcltdXG4gIH0gPSB7XG4gICAgY2hhcmFjdGVyaXN0aWN2YWx1ZWNoYW5nZWQ6IFtdXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogQmx1ZXRvb3RoQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzLCBpbml0aWFsVmFsdWU/OiBEYXRhVmlldykge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgfVxuXG4gIHJlYWRWYWx1ZSgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyKSB7XG4gICAgdGhpcy5saXN0ZW5lcnNbdHlwZV0gPSBbXG4gICAgICAuLi50aGlzLmxpc3RlbmVyc1t0eXBlXSxcbiAgICAgIGxpc3RlbmVyXG4gICAgXTtcbiAgfVxuXG4gIGNoYW5nZVZhbHVlKHZhbHVlOiBEYXRhVmlldykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICBjb25zdCBtb2NrZWRFdmVudCA9IHt0YXJnZXQ6IHRoaXN9IGFzIHVua25vd247XG4gICAgdGhpcy5saXN0ZW5lcnNbJ2NoYXJhY3RlcmlzdGljdmFsdWVjaGFuZ2VkJ10uZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcihtb2NrZWRFdmVudCBhcyBFdmVudCkpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMubGlzdGVuZXJzID0ge1xuICAgICAgY2hhcmFjdGVyaXN0aWN2YWx1ZWNoYW5nZWQ6IFtdXG4gICAgfTtcbiAgfVxufVxuIl19