sdmx-rest
Version:
SDMX REST API client for JavaScript
191 lines (175 loc) • 5.66 kB
JavaScript
// Generated by CoffeeScript 2.7.0
(function() {
var ContextRefType, DataQuery, FiltersType, NCNameIDType, Sdmx3SeriesKeyType, ValidQuery, createErrorMessage, defaults, expected, isValidComp, isValidDate, isValidFilters, isValidHistory, isValidKey, isValidNObs, isValidPattern, isValidQuery, query,
hasProp = {}.hasOwnProperty,
indexOf = [].indexOf;
({ContextRefType, Sdmx3SeriesKeyType, NCNameIDType, FiltersType} = require('../utils/sdmx-patterns'));
({isValidPattern, isValidDate, createErrorMessage} = require('../utils/validators'));
defaults = {
context: '*=*:*(*)',
key: '*',
history: false,
attributes: 'dsd',
measures: 'all',
filters: []
};
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;
};
isValidComp = function(input, name, errors) {
var i, j, len, r, ref, valid;
valid = true;
if (input.indexOf(",") > -1) {
ref = input.split(",");
for (j = 0, len = ref.length; j < len; j++) {
i = ref[j];
r = isValidPattern(i, NCNameIDType, name, errors);
if (!r) {
valid = false;
}
}
} else {
r = isValidPattern(input, NCNameIDType, name, errors);
if (!r) {
valid = false;
}
}
return valid;
};
isValidKey = function(input, name, errors) {
var i, j, len, r, ref, valid;
valid = true;
if (input.indexOf(",") > -1) {
ref = input.split(",");
for (j = 0, len = ref.length; j < len; j++) {
i = ref[j];
r = isValidPattern(i, Sdmx3SeriesKeyType, name, errors);
if (!r) {
valid = false;
}
}
} else {
r = isValidPattern(input, Sdmx3SeriesKeyType, name, errors);
if (!r) {
valid = false;
}
}
return valid;
};
isValidFilters = function(input, name, errors) {
var filter, j, len, r, valid;
valid = true;
for (j = 0, len = input.length; j < len; j++) {
filter = input[j];
r = isValidPattern(filter, FiltersType, name, errors);
if (!r) {
valid = false;
}
}
return valid;
};
ValidQuery = {
context: function(i, e) {
return isValidPattern(i, ContextRefType, 'context', e);
},
key: function(i, e) {
return isValidKey(i, 'series key', 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);
},
history: function(i, e) {
return isValidHistory(i, e);
},
attributes: function(i, e) {
return isValidComp(i, 'attributes', e);
},
measures: function(i, e) {
return isValidComp(i, 'measures', e);
},
filters: function(i, e) {
return isValidFilters(i, 'filters', 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
};
};
expected = ["context", "key", "updatedAfter", "firstNObs", "lastNObs", "obsDimension", "history", "attributes", "measures", "filters"];
// A query for data, as defined by the SDMX RESTful API.
query = DataQuery = class DataQuery {
static from(opts) {
var attrs, context, filters, input, k, key, measures, ref, ref1, ref2, ref3, ref4, ref5, v;
if (opts) {
for (k in opts) {
if (!hasProp.call(opts, k)) continue;
v = opts[k];
if (indexOf.call(expected, k) < 0) {
throw Error(createErrorMessage([], 'data query'));
}
}
}
context = (ref = opts != null ? opts.context : void 0) != null ? ref : defaults.context;
key = (ref1 = opts != null ? opts.key : void 0) != null ? ref1 : defaults.key;
attrs = (ref2 = opts != null ? opts.attributes : void 0) != null ? ref2 : defaults.attributes;
measures = (ref3 = opts != null ? opts.measures : void 0) != null ? ref3 : defaults.measures;
filters = (ref4 = opts != null ? opts.filters : void 0) != null ? ref4 : defaults.filters;
if (!Array.isArray(filters)) {
filters = [filters];
}
query = {
context: context,
key: key,
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,
history: (ref5 = opts != null ? opts.history : void 0) != null ? ref5 : defaults.history,
attributes: attrs,
measures: measures,
filters: filters
};
input = isValidQuery(query);
if (!input.isValid) {
throw Error(createErrorMessage(input.errors, 'data query'));
}
return query;
}
};
exports.DataQuery2 = query;
}).call(this);