@firebolt-js/sdk
Version:
The Firebolt JS SDK
87 lines (81 loc) • 2.3 kB
JavaScript
/*
* Copyright 2021 Comcast Cable Communications Management, LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
*/
const settings = {}
const subscribers = {}
export const initSettings = (appSettings, platformSettings) => {
settings['app'] = appSettings
settings['platform'] = {
logLevel: 'WARN',
...platformSettings,
}
settings['user'] = {}
}
const publish = (key, value) => {
subscribers[key] &&
subscribers[key].forEach((subscriber) => subscriber(value))
}
const dotGrab = (obj = {}, key) => {
const keys = key.split('.')
for (let i = 0; i < keys.length; i++) {
obj = obj[keys[i]] = obj[keys[i]] !== undefined ? obj[keys[i]] : {}
}
return typeof obj === 'object'
? Object.keys(obj).length
? obj
: undefined
: obj
}
export default {
get(type, key, fallback = undefined) {
const val = dotGrab(settings[type], key)
return val !== undefined ? val : fallback
},
has(type, key) {
return !!this.get(type, key)
},
set(key, value) {
settings['user'][key] = value
publish(key, value)
},
subscribe(key, callback) {
subscribers[key] = subscribers[key] || []
subscribers[key].push(callback)
},
unsubscribe(key, callback) {
if (callback) {
const index =
subscribers[key] && subscribers[key].findIndex((cb) => cb === callback)
index > -1 && subscribers[key].splice(index, 1)
} else {
if (key in subscribers) {
subscribers[key] = []
}
}
},
clearSubscribers() {
for (const key of Object.getOwnPropertyNames(subscribers)) {
delete subscribers[key]
}
},
setLogLevel(logLevel) {
settings.platform.logLevel = logLevel
},
getLogLevel() {
return settings.platform.logLevel
},
}