UNPKG

ucsc-xena-client

Version:

UCSC Xena Client. Functional genomics visualizations.

41 lines (36 loc) 1.67 kB
'use strict'; 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; } };