@firebolt-js/sdk
Version:
The Firebolt JS SDK
60 lines (56 loc) • 1.45 kB
JavaScript
import Transport from '../Transport/index.mjs'
import Events from '../Events/index.mjs'
import router from './Router.mjs'
function prop(
moduleName,
key,
params,
callbackOrValue = undefined,
immutable,
readonly,
contextParameterCount,
) {
const numArgs = Object.values(params).length
const type = router(params, callbackOrValue, contextParameterCount)
if (type === 'getter') {
return Transport.send(moduleName, key, params)
} else if (type === 'subscriber') {
// subscriber
if (immutable) {
throw new Error('Cannot subscribe to an immutable property')
}
return Events.listen(
moduleName,
key + 'Changed',
...Object.values(params),
callbackOrValue,
)
} else if (type === 'setter') {
// setter
if (immutable) {
throw new Error('Cannot set a value to an immutable property')
}
if (readonly) {
throw new Error('Cannot set a value to a readonly property')
}
return Transport.send(
moduleName,
'set' + key[0].toUpperCase() + key.substring(1),
Object.assign(
{
value: callbackOrValue,
},
params,
),
)
} else if (numArgs < contextParameterCount) {
throw new Error(
'Cannot get a value without all required context parameters.',
)
} else {
throw new Error('Property accessed with unexpected number of parameters.')
}
}
export default {
prop: prop,
}