ucsc-xena-client
Version:
UCSC Xena Client. Functional genomics visualizations.
41 lines (36 loc) • 1.67 kB
JavaScript
var _require = require('./underscore_ext'),
isString = _require.isString,
isArray = _require.isArray,
isObject = _require.isObject,
isBoolean = _require.isBoolean,
isNumber = _require.isNumber,
Let = _require.Let;
var optBoolean = function optBoolean(v) {
return v === undefined || isBoolean(v);
};
var optObject = function optObject(o) {
return o === undefined || isObject(o);
};
// Some ad hoc checks of schema state, to avoid simple errors. Might want to
// make this more formal, perhaps with a port of clojure spec, or perhaps our
// json spec lib, in docs/schema. For now, mostly trying to avoid loading state
// that is old, or corrupt.
var schemaCheck = function schemaCheck(state) {
return isObject(state) && isNumber(state.version) && isString(state.page) && optObject(state.wizard) && Let(function () {
var spreadsheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : state.spreadsheet;
return spreadsheet === undefined || isObject(spreadsheet) && isArray(spreadsheet.columnOrder) && isObject(spreadsheet.columns) && isString(spreadsheet.mode) && isObject(spreadsheet.notifications) && isObject(spreadsheet.servers) && optBoolean(spreadsheet.showWelcome) && optBoolean(spreadsheet.wizardMode) && Let(function () {
var zoom = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : spreadsheet.zoom;
return isObject(zoom) && isNumber(zoom.height);
});
}) && state;
};
module.exports = {
schemaCheck: schemaCheck,
schemaCheckThrow: function schemaCheckThrow(state) {
if (!schemaCheck(state)) {
throw new Error('invalid state schema');
}
return state;
}
};
;