sdmx-rest
Version:
SDMX REST API client for JavaScript
145 lines (130 loc) • 4.37 kB
JavaScript
// 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);