UNPKG

sdmx-rest

Version:

SDMX REST API client for JavaScript

145 lines (130 loc) 4.37 kB
// Generated by CoffeeScript 2.7.0 (function() { var DataDetail, DataQuery, FlowRefType, MultipleProviderRefType, NCNameIDType, SeriesKeyType, ValidQuery, createErrorMessage, defaults, isValidDate, isValidEnum, isValidHistory, isValidNObs, isValidPattern, isValidPeriod, isValidQuery, query, toKeyString, toProviderString, hasProp = {}.hasOwnProperty; ({DataDetail} = require('./data-detail')); ({FlowRefType, SeriesKeyType, MultipleProviderRefType, NCNameIDType} = require('../utils/sdmx-patterns')); ({isValidEnum, isValidPattern, isValidPeriod, isValidDate, createErrorMessage} = require('../utils/validators')); defaults = { key: 'all', provider: 'all', detail: DataDetail.FULL, history: false }; isValidHistory = function(input, errors) { var valid; valid = typeof input === 'boolean'; if (!valid) { errors.push(`${input} is not a valid value for history. Must be true or false`); } return valid; }; isValidNObs = function(input, name, errors) { var valid; valid = typeof input === 'number' && input > 0; if (!valid) { errors.push(`${input} is not a valid value for ${name}. Must be a positive integer`); } return valid; }; ValidQuery = { flow: function(i, e) { return isValidPattern(i, FlowRefType, 'flows', e); }, key: function(i, e) { return isValidPattern(i, SeriesKeyType, 'series key', e); }, provider: function(i, e) { return isValidPattern(i, MultipleProviderRefType, 'provider', e); }, start: function(i, e) { return !i || isValidPeriod(i, 'start period', e); }, end: function(i, e) { return !i || isValidPeriod(i, 'end period', e); }, updatedAfter: function(i, e) { return !i || isValidDate(i, 'updatedAfter', e); }, firstNObs: function(i, e) { return !i || isValidNObs(i, 'firstNObs', e); }, lastNObs: function(i, e) { return !i || isValidNObs(i, 'lastNObs', e); }, obsDimension: function(i, e) { return !i || isValidPattern(i, NCNameIDType, 'obs dimension', e); }, detail: function(i, e) { return isValidEnum(i, DataDetail, 'details', e); }, history: function(i, e) { return isValidHistory(i, e); } }; isValidQuery = function(q) { var errors, isValid, k, v; errors = []; isValid = false; for (k in q) { if (!hasProp.call(q, k)) continue; v = q[k]; isValid = ValidQuery[k](v, errors); if (!isValid) { break; } } return { isValid: isValid, errors: errors }; }; toKeyString = function(dims) { var d; return ((function() { var j, len, results; results = []; for (j = 0, len = dims.length; j < len; j++) { d = dims[j]; results.push(Array.isArray(d) ? d.join('+') : d != null ? d : ''); } return results; })()).join('.'); }; toProviderString = function(p) { return p.join('+'); }; // A query for data, as defined by the SDMX RESTful API. query = DataQuery = class DataQuery { static from(opts) { var input, key, pro, ref, ref1, ref2, ref3; key = (ref = opts != null ? opts.key : void 0) != null ? ref : defaults.key; if (Array.isArray(key)) { key = toKeyString(key); } pro = (ref1 = opts != null ? opts.provider : void 0) != null ? ref1 : defaults.provider; if (Array.isArray(pro)) { pro = toProviderString(pro); } query = { flow: opts != null ? opts.flow : void 0, key: key, provider: pro, start: opts != null ? opts.start : void 0, end: opts != null ? opts.end : void 0, updatedAfter: opts != null ? opts.updatedAfter : void 0, firstNObs: opts != null ? opts.firstNObs : void 0, lastNObs: opts != null ? opts.lastNObs : void 0, obsDimension: opts != null ? opts.obsDimension : void 0, detail: (ref2 = opts != null ? opts.detail : void 0) != null ? ref2 : defaults.detail, history: (ref3 = opts != null ? opts.history : void 0) != null ? ref3 : defaults.history }; input = isValidQuery(query); if (!input.isValid) { throw Error(createErrorMessage(input.errors, 'data query')); } return query; } }; exports.DataQuery = query; }).call(this);