@constructorfleet/ultimate-govee
Version:
Library for interacting with Govee devices written in Typescript.
87 lines • 3.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MqttClientFactoryProvider = exports.InjectMQTTFactory = exports.MqttClientFactoryKey = exports.areConnectionsTheSame = exports.MqttDeserializerProvider = exports.InjectMqttDeserializer = exports.MqttDeserializerKey = exports.LastMqttConnectionProvider = exports.LastMqttClientProvider = exports.LastMqttConnectionKey = exports.LastMqttClientKey = exports.MqttBrokerProvider = exports.InjectMqttBroker = exports.MqttBrokerKey = void 0;
const common_1 = require("@nestjs/common");
const mqtt_types_1 = require("./mqtt.types");
const mqtt_client_1 = require("./mqtt.client");
const core_1 = require("@nestjs/core");
let lastMqttClient;
let lastConnection;
exports.MqttBrokerKey = 'Mqtt.Broker';
exports.InjectMqttBroker = (0, common_1.Inject)(exports.MqttBrokerKey);
exports.MqttBrokerProvider = {
provide: exports.MqttBrokerKey,
inject: [mqtt_types_1.MODULE_OPTIONS_TOKEN],
useFactory: (options) => ({
brokerUrl: options._kind === 'combined'
? options.brokerUrl
: `${options.protocol}://${options.brokerHost}:${options.brokerPort}`,
}),
};
exports.LastMqttClientKey = 'Mqtt.Client.Last';
exports.LastMqttConnectionKey = 'Mqtt.Connection.Last';
exports.LastMqttClientProvider = {
scope: common_1.Scope.TRANSIENT,
provide: exports.LastMqttClientKey,
useFactory: () => lastMqttClient,
};
exports.LastMqttConnectionProvider = {
scope: common_1.Scope.TRANSIENT,
provide: exports.LastMqttConnectionKey,
useFactory: () => lastConnection,
};
exports.MqttDeserializerKey = 'Mqtt.Deserializer';
exports.InjectMqttDeserializer = (0, common_1.Inject)(exports.MqttDeserializerKey);
exports.MqttDeserializerProvider = {
provide: exports.MqttDeserializerKey,
inject: [mqtt_types_1.MODULE_OPTIONS_TOKEN],
useFactory: (options) => options.deserializeMessage,
};
const areConnectionsTheSame = (connection, otherConnection) => {
if (connection === undefined) {
if (otherConnection === undefined) {
return true;
}
if (otherConnection !== undefined) {
return false;
}
}
else if (otherConnection === undefined) {
if (connection === undefined) {
return true;
}
if (connection !== undefined) {
return false;
}
}
const keysA = Object.keys(connection ?? {}).sort();
const keysB = Object.keys(otherConnection ?? {}).sort();
if (keysA.length !== keysB.length) {
return false;
}
return keysA.every((key, i) => otherConnection !== undefined &&
key === keysB[i] &&
connection[key] === otherConnection[key]);
};
exports.areConnectionsTheSame = areConnectionsTheSame;
exports.MqttClientFactoryKey = 'Mqtt.Client.Factory';
exports.InjectMQTTFactory = (0, common_1.Inject)('Mqtt.Client.Factory');
exports.MqttClientFactoryProvider = {
provide: exports.MqttClientFactoryKey,
scope: common_1.Scope.TRANSIENT,
inject: [exports.LastMqttClientKey, exports.LastMqttConnectionKey, core_1.ModuleRef],
useFactory: (lastClient, lastConnection, moduleRef) => async (connection) => {
if ((0, exports.areConnectionsTheSame)(connection, lastConnection) &&
lastClient.state.connected$) {
lastMqttClient = lastClient;
return Promise.resolve(lastClient);
}
if (lastClient !== undefined) {
await lastClient.quit();
lastMqttClient = undefined;
}
lastMqttClient = await moduleRef.create(mqtt_client_1.MqttClient);
return lastMqttClient;
},
};
//# sourceMappingURL=mqtt.providers.js.map