UNPKG

@tanislav000/bluez

Version:

Bluez5 D-Bus bindings for easy to use bluetooth access in Node.js

211 lines 6.81 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LooselyTypedEmitter = exports.TypedEmitter = exports.unwrapDbusSignature = exports.unwrapDbusVariantAll = exports.unwrapDbusVariantArray = exports.unwrapDbusVariantObject = exports.unwrapDbusVariant = exports.wrapDbusSignature = exports.wrapDbusVariantArray = exports.wrapDbusVariantObject = exports.wrapDbusVariant = exports.detectDbusType = void 0; const DBus = __importStar(require("dbus-next")); const events_1 = require("events"); function getDbusArrayTypes(arr) { return arr .map(detectDbusType) .sort() .filter((value, index, self) => self.indexOf(value) === index); } function detectDbusType(v) { switch (typeof v) { case "bigint": return "x"; case "string": return "s"; case "boolean": return "b"; case "number": if (Number.isInteger(v)) return "i"; else return "d"; case "object": if (Buffer.isBuffer(v)) { return "ay"; } if (Array.isArray(v)) { if (v.length === 0) return "av"; const types = getDbusArrayTypes(v); if (types.length === 1) { return "a" + types[0]; } return "av"; } if (v.constructor === DBus.Variant) { return "v"; } return "a{sv}"; default: throw new Error("Could not detect signature for value of type " + typeof v); } } exports.detectDbusType = detectDbusType; /** * This will create `v` signature * @param obj */ function wrapDbusVariant(obj, type) { const detectedType = detectDbusType(obj); if (detectedType === "v") return obj; if (!type) type = detectedType; if (type[0] === "a" && type.includes("v")) { // recurse if (Array.isArray(obj)) { return new DBus.Variant(type, wrapDbusVariantArray(obj)); } return new DBus.Variant(type, wrapDbusVariantObject(obj)); } return new DBus.Variant(type, obj); } exports.wrapDbusVariant = wrapDbusVariant; /** * This will create `a{sv}` signature * @param obj */ function wrapDbusVariantObject(obj, signatures) { const res = {}; for (const key in obj) { const type = signatures === undefined ? undefined : signatures[key]; res[key] = wrapDbusVariant(obj[key], type); } return res; } exports.wrapDbusVariantObject = wrapDbusVariantObject; /** * This will create `av` signature * @param obj */ function wrapDbusVariantArray(obj, signatures) { return obj.map((v, i) => { const type = signatures === undefined ? undefined : signatures[i]; return wrapDbusVariant(v, type); }); } exports.wrapDbusVariantArray = wrapDbusVariantArray; function wrapDbusSignature(obj, type) { if (type === "v") return wrapDbusVariant(obj); if (type === "av") return wrapDbusVariantArray(obj); if (type === "a{sv}") return wrapDbusVariantObject(obj); if (type === "ay") { if (Buffer.isBuffer(obj)) { return obj.toJSON().data; } return obj; } if (type.includes("v")) { // TODO: other variant type console.warn("Unhandled Variant Type: %s. Please report this the Bluez library", type); } return obj; } exports.wrapDbusSignature = wrapDbusSignature; /** * This unwarps `v` signatures * @param obj */ function unwrapDbusVariant(obj) { if (obj.signature === "ay") { return Buffer.from(obj.value); } if (obj.signature.includes("v")) { // recurse if (Array.isArray(obj.value)) { return unwrapDbusVariantArray(obj.value); } if (obj.value.constructor === DBus.Variant) { return unwrapDbusVariant(obj.value); } return unwrapDbusVariantObject(obj.value); } return obj.value; } exports.unwrapDbusVariant = unwrapDbusVariant; /** * This unwraps `a{sv}` signatures * @param obj */ function unwrapDbusVariantObject(obj) { const res = Object.assign({}, obj); // clone object structure for (const [k, v] of Object.entries(obj)) { res[k] = unwrapDbusVariant(v); } return res; } exports.unwrapDbusVariantObject = unwrapDbusVariantObject; /** * This unwraps `av` signatures * @param obj */ function unwrapDbusVariantArray(obj) { return obj.map(unwrapDbusVariant); } exports.unwrapDbusVariantArray = unwrapDbusVariantArray; /** This unwraps anything */ function unwrapDbusVariantAll(obj) { if (typeof obj !== "object" || obj === null) return obj; if (obj.constructor === DBus.Variant) return unwrapDbusVariant(obj); if (Array.isArray(obj)) { return obj.map(unwrapDbusVariantAll); } // otherwise its an object const res = Object.assign({}, obj); // clone object structure for (const key in obj) { res[key] = unwrapDbusVariantAll(obj[key]); } return res; } exports.unwrapDbusVariantAll = unwrapDbusVariantAll; function unwrapDbusSignature(type) { if (type.includes("v")) return unwrapDbusVariantAll; if (type === "ay") { return function (obj) { return Buffer.from(obj); }; } if (type.includes("ay")) { // TODO: directly extract Buffer at index return unwrapDbusVariantAll; } return function (obj) { return obj; }; } exports.unwrapDbusSignature = unwrapDbusSignature; exports.TypedEmitter = events_1.EventEmitter; exports.LooselyTypedEmitter = events_1.EventEmitter; //# sourceMappingURL=utilts.js.map