@jkcfg/std
Version:
jk standard library
72 lines (71 loc) • 2.55 kB
JavaScript
/**
* @module std/param
*/
import { flatbuffers } from './internal/flatbuffers';
import { __std } from './internal/__std_generated';
import { sendRequest } from './internal/deferred';
function getParameter(type, path, defaultValue) {
const builder = new flatbuffers.Builder(512);
const pathOffset = builder.createString(path);
const isObject = type === __std.ParamType.Object;
const defaultValueOffset = isObject
&& defaultValue !== undefined
&& builder.createString(JSON.stringify(defaultValue));
__std.ParamArgs.startParamArgs(builder);
__std.ParamArgs.addPath(builder, pathOffset);
__std.ParamArgs.addType(builder, type);
if (isObject) {
__std.ParamArgs.addDefaultValue(builder, defaultValueOffset);
}
const argsOffset = __std.ParamArgs.endParamArgs(builder);
__std.Message.startMessage(builder);
__std.Message.addArgsType(builder, __std.Args.ParamArgs);
__std.Message.addArgs(builder, argsOffset);
const messageOffset = __std.Message.endMessage(builder);
builder.finish(messageOffset);
const bytes = sendRequest(builder.asArrayBuffer());
const buf = new flatbuffers.ByteBuffer(new Uint8Array(bytes));
const resp = __std.ParamResponse.getRootAsParamResponse(buf);
switch (resp.retvalType()) {
case __std.ParamRetval.ParamValue: {
// The runtime has returned the parameter value (or null).
const ret = new __std.ParamValue();
resp.retval(ret);
const v = JSON.parse(ret.json());
if (v == null) {
return defaultValue;
}
return v;
}
case __std.ParamRetval.Error: {
// The runtime has returned an error.
const err = new __std.Error();
resp.retval(err);
throw new Error(err.message());
}
default:
throw new Error('Unexpected response to param');
}
}
export function Boolean(path, defaultValue) {
return getParameter(__std.ParamType.Boolean, path, defaultValue);
}
export function Number(path, defaultValue) {
return getParameter(__std.ParamType.Number, path, defaultValue);
}
export function String(path, defaultValue) {
return getParameter(__std.ParamType.String, path, defaultValue);
}
export function Object(path, defaultValue) {
return getParameter(__std.ParamType.Object, path, defaultValue);
}
export function all() {
return Object('');
}
export const param = {
all,
Boolean,
Number,
String,
Object,
};