sdmx-rest
Version:
SDMX REST API client for JavaScript
164 lines (148 loc) • 4.91 kB
JavaScript
// Generated by CoffeeScript 2.7.0
(function() {
var AvailabilityMode, AvailabilityQuery, AvailabilityReferences, ContextRefType, FiltersType, NestedNCNameIDType, Sdmx3SeriesKeyType, ValidQuery, createErrorMessage, defaults, expected, isValidComp, isValidDate, isValidEnum, isValidFilters, isValidKey, isValidPattern, isValidQuery, query,
hasProp = {}.hasOwnProperty,
indexOf = [].indexOf;
({AvailabilityMode} = require('./availability-mode'));
({AvailabilityReferences} = require('./availability-references'));
({ContextRefType, Sdmx3SeriesKeyType, NestedNCNameIDType, FiltersType} = require('../utils/sdmx-patterns'));
({isValidEnum, isValidPattern, isValidDate, createErrorMessage} = require('../utils/validators'));
defaults = {
context: '*=*:*(*)',
key: '*',
component: '*',
filters: [],
mode: AvailabilityMode.EXACT,
references: AvailabilityReferences.NONE
};
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;
};
isValidComp = function(input, name, errors) {
var i, j, len, r, ref, valid;
valid = true;
if (input !== '*') {
if (input.indexOf(",") > -1) {
ref = input.split(",");
for (j = 0, len = ref.length; j < len; j++) {
i = ref[j];
r = isValidPattern(i, NestedNCNameIDType, name, errors);
if (!r) {
valid = false;
}
}
} else {
r = isValidPattern(input, NestedNCNameIDType, 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);
},
component: function(i, e) {
return isValidComp(i, 'component', e);
},
updatedAfter: function(i, e) {
return !i || isValidDate(i, 'updatedAfter', e);
},
filters: function(i, e) {
return isValidFilters(i, 'filters', e);
},
mode: function(i, e) {
return isValidEnum(i, AvailabilityMode, 'mode', e);
},
references: function(i, e) {
return isValidEnum(i, AvailabilityReferences, 'references', 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", "component", "updatedAfter", "filters", "mode", "references"];
query = AvailabilityQuery = class AvailabilityQuery {
static from(opts) {
var context, filters, input, k, key, 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([], 'availability 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;
filters = (ref2 = opts != null ? opts.filters : void 0) != null ? ref2 : defaults.filters;
if (!Array.isArray(filters)) {
filters = [filters];
}
query = {
context: context,
key: key,
component: (ref3 = opts != null ? opts.component : void 0) != null ? ref3 : defaults.component,
updatedAfter: opts != null ? opts.updatedAfter : void 0,
filters: filters,
mode: (ref4 = opts != null ? opts.mode : void 0) != null ? ref4 : defaults.mode,
references: (ref5 = opts != null ? opts.references : void 0) != null ? ref5 : defaults.references
};
input = isValidQuery(query);
if (!input.isValid) {
throw Error(createErrorMessage(input.errors, 'availability query'));
}
return query;
}
};
exports.AvailabilityQuery2 = query;
}).call(this);