sdmx-rest
Version:
SDMX REST API client for JavaScript
138 lines (127 loc) • 3.57 kB
JavaScript
// Generated by CoffeeScript 2.7.0
(function() {
var ApiNumber, ApiVersion, Handler, createDataQuery, createEntryPoint, createShortDataQuery, getKeyFromVersion, handleDataPathParams, handleDataQueryParams, handler, parseContext, parseFilter, validateDataForV2;
({ApiNumber, ApiVersion, getKeyFromVersion} = require('../utils/api-version'));
({createEntryPoint, validateDataForV2, parseContext, parseFilter} = require('../utils/url-generator-common'));
createDataQuery = function(q, s) {
var f, fc, filter, i, len, ref, url;
validateDataForV2(q, s);
url = createEntryPoint(s);
fc = parseContext(q.context);
url += `data/${fc[0]}/${fc[1]}/${fc[2]}/${fc[3]}/`;
url += `${q.key}?`;
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]}&`;
}
}
if (q.obsDimension) {
url += `dimensionAtObservation=${q.obsDimension}&`;
}
url += `attributes=${q.attributes}`;
url += `&measures=${q.measures}`;
url += `&includeHistory=${q.history}`;
if (q.updatedAfter) {
url += `&updatedAfter=${q.updatedAfter}`;
}
if (q.firstNObs) {
url += `&firstNObservations=${q.firstNObs}`;
}
if (q.lastNObs) {
url += `&lastNObservations=${q.lastNObs}`;
}
return url;
};
handleDataPathParams = function(q) {
var c, p;
p = [];
c = parseContext(q.context);
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 '';
}
};
handleDataQueryParams = 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.obsDimension) {
p.push(`dimensionAtObservation=${q.obsDimension}`);
}
if (q.history) {
p.push(`includeHistory=${q.history}`);
}
if (q.attributes !== 'dsd') {
p.push(`attributes=${q.attributes}`);
}
if (q.measures !== 'all') {
p.push(`measures=${q.measures}`);
}
if (q.updatedAfter) {
p.push(`updatedAfter=${q.updatedAfter}`);
}
if (q.firstNObs) {
p.push(`firstNObservations=${q.firstNObs}`);
}
if (q.lastNObs) {
p.push(`lastNObservations=${q.lastNObs}`);
}
if (p.length > 0) {
return '?' + p.reduceRight(function(x, y) {
return x + '&' + y;
});
} else {
return '';
}
};
createShortDataQuery = function(q, s) {
var p, u;
validateDataForV2(q, s);
u = createEntryPoint(s);
u += 'data';
p = handleDataPathParams(q);
u += p;
u += handleDataQueryParams(q);
return u;
};
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 createShortDataQuery(q, s);
} else {
return createDataQuery(q, s);
}
}
};
exports.DataQuery2Handler = handler;
}).call(this);