sdmx-rest
Version:
SDMX REST API client for JavaScript
119 lines (108 loc) • 3.1 kB
JavaScript
// Generated by CoffeeScript 2.7.0
(function() {
var ApiNumber, ApiVersion, Handler, createAvailabilityQuery, createEntryPoint, createShortAvailabilityQuery, getKeyFromVersion, handlePathParams, handleQueryParams, handler, parseContext, parseFilter, validateDataForV2;
({ApiNumber, ApiVersion, getKeyFromVersion} = require('../utils/api-version'));
({createEntryPoint, validateDataForV2, parseContext, parseFilter} = require('../utils/url-generator-common'));
handlePathParams = function(q) {
var c, p;
p = [];
c = parseContext(q.context);
if (q.component !== '*') {
p.push(q.component);
}
if (q.key !== '*' || p.length) {
p.push(q.key);
}
if (c[3] !== '*' || p.length) {
p.push(c[3]);
}
if (c[2] !== '*' || p.length) {
p.push(c[2]);
}
if (c[1] !== '*' || p.length) {
p.push(c[1]);
}
if (c[0] !== '*' || p.length) {
p.push(c[0]);
}
if (p.length) {
return '/' + p.reverse().join('/');
} else {
return '';
}
};
handleQueryParams = function(q) {
var f, filter, i, len, p, ref;
p = [];
if (q.filters) {
ref = q.filters;
for (i = 0, len = ref.length; i < len; i++) {
filter = ref[i];
f = parseFilter(filter);
p.push(`c[${f[0]}]=${f[1]}`);
}
}
if (q.updatedAfter) {
p.push(`updatedAfter=${q.updatedAfter}`);
}
if (q.mode !== 'exact') {
p.push(`mode=${q.mode}`);
}
if (q.references !== 'none') {
p.push(`references=${q.references}`);
}
if (p.length > 0) {
return '?' + p.reduceRight(function(x, y) {
return x + '&' + y;
});
} else {
return '';
}
};
createShortAvailabilityQuery = function(q, s, api_number) {
var p, u;
validateDataForV2(q, s);
u = createEntryPoint(s);
u += "availability";
p = handlePathParams(q);
u += p;
u += handleQueryParams(q);
return u;
};
createAvailabilityQuery = function(q, s, api_number) {
var f, fc, filter, i, len, ref, url;
validateDataForV2(q, s);
url = createEntryPoint(s);
fc = parseContext(q.context);
url += `availability/${fc[0]}/${fc[1]}/${fc[2]}/${fc[3]}/`;
url += `${q.key}/`;
url += `${q.component}?`;
if (q.filters) {
ref = q.filters;
for (i = 0, len = ref.length; i < len; i++) {
filter = ref[i];
f = parseFilter(filter);
url += `c[${f[0]}]=${f[1]}&`;
}
}
url += `mode=${q.mode}&references=${q.references}`;
if (q.updatedAfter) {
url += `&updatedAfter=${q.updatedAfter}`;
}
return url;
};
handler = Handler = class Handler {
handle(q, s, skip) {
var api;
api = ApiNumber[getKeyFromVersion(s.api)];
if (api < ApiNumber.v2_0_0) {
throw Error(`SDMX 3.0 queries not allowed in ${s.api}`);
} else if (skip) {
return createShortAvailabilityQuery(q, s, api);
} else {
return createAvailabilityQuery(q, s, api);
}
}
};
exports.AvailabilityQuery2Handler = handler;
}).call(this);