sdmx-rest
Version:
SDMX REST API client for JavaScript
236 lines (216 loc) • 6.05 kB
JavaScript
// Generated by CoffeeScript 2.7.0
(function() {
var ApiNumber, ApiVersion, DataDetail, Handler, checkMultipleItems, createDataQuery, createEntryPoint, createShortDataQuery, createShortV1Url, createShortV2Url, createV1DataUrl, createV2DataUrl, getKeyFromVersion, handleData2PathParams, handleData2QueryParams, handleDataPathParams, handleDataQueryParams, handler, hasHistory, parseFlow, translateDetail, validateDataForV2;
({ApiNumber, ApiVersion, getKeyFromVersion} = require('../utils/api-version'));
({createEntryPoint, validateDataForV2, parseFlow, checkMultipleItems} = require('../utils/url-generator-common'));
({DataDetail} = require('../data/data-detail'));
translateDetail = function(detail) {
if (detail === DataDetail.NO_DATA) {
return "attributes=dataset,series&measures=none";
} else if (detail === DataDetail.DATA_ONLY) {
return "attributes=none&measures=all";
} else if (detail === DataDetail.SERIES_KEYS_ONLY) {
return "attributes=none&measures=none";
} else {
return "attributes=dsd&measures=all";
}
};
createV1DataUrl = function(q, s, a) {
var url;
url = createEntryPoint(s);
url += `data/${q.flow}/${q.key}/${q.provider}?`;
if (q.obsDimension) {
url += `dimensionAtObservation=${q.obsDimension}&`;
}
url += `detail=${q.detail}`;
if (a >= ApiNumber.v1_1_0) {
url += `&includeHistory=${q.history}`;
}
if (q.start) {
url += `&startPeriod=${q.start}`;
}
if (q.end) {
url += `&endPeriod=${q.end}`;
}
if (q.updatedAfter) {
url += `&updatedAfter=${q.updatedAfter}`;
}
if (q.firstNObs) {
url += `&firstNObservations=${q.firstNObs}`;
}
if (q.lastNObs) {
url += `&lastNObservations=${q.lastNObs}`;
}
return url;
};
createV2DataUrl = function(q, s) {
var fc, url;
validateDataForV2(q, s);
url = createEntryPoint(s);
fc = parseFlow(q.flow);
url += `data/dataflow/${fc[0]}/${fc[1]}/${fc[2]}/`;
url += q.key === "all" ? "*?" : `${q.key}?`;
if (q.obsDimension) {
url += `dimensionAtObservation=${q.obsDimension}&`;
}
url += translateDetail(q.detail);
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;
};
createDataQuery = function(q, s, a) {
if (a < ApiNumber.v2_0_0) {
return createV1DataUrl(q, s, a);
} else {
return createV2DataUrl(q, s);
}
};
handleDataPathParams = function(q) {
var path;
path = [];
if (q.provider !== 'all') {
path.push(q.provider);
}
if (q.key !== 'all' || path.length) {
path.push(q.key);
}
if (path.length) {
return '/' + path.reverse().join('/');
} else {
return '';
}
};
handleData2PathParams = function(q) {
var path;
path = [];
if (q.key !== 'all' || path.length) {
path.push(q.key);
}
if (path.length) {
return '/' + path.reverse().join('/');
} else {
return '';
}
};
hasHistory = function(q, s, a) {
if (a >= ApiNumber.v1_1_0 && q.history) {
return true;
} else {
return false;
}
};
handleDataQueryParams = function(q, s, a) {
var p;
p = [];
if (q.obsDimension) {
p.push(`dimensionAtObservation=${q.obsDimension}`);
}
if (q.detail !== 'full') {
p.push(`detail=${q.detail}`);
}
if (hasHistory(q, s, a)) {
p.push(`includeHistory=${q.history}`);
}
if (q.start) {
p.push(`startPeriod=${q.start}`);
}
if (q.end) {
p.push(`endPeriod=${q.end}`);
}
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 '';
}
};
handleData2QueryParams = function(q, s, a) {
var p;
p = [];
if (q.obsDimension) {
p.push(`dimensionAtObservation=${q.obsDimension}`);
}
if (q.detail !== 'full') {
p.push(`${translateDetail(q.detail)}`);
}
if (hasHistory(q, s, a)) {
p.push(`includeHistory=${q.history}`);
}
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 '';
}
};
createShortV1Url = function(q, s, a) {
var u;
u = createEntryPoint(s);
u += `data/${q.flow}`;
u += handleDataPathParams(q);
u += handleDataQueryParams(q, s, a);
return u;
};
createShortV2Url = function(q, s, a) {
var fc, pp, u;
validateDataForV2(q, s);
u = createEntryPoint(s);
fc = parseFlow(q.flow);
u += `data/dataflow/${fc[0]}/${fc[1]}`;
pp = handleData2PathParams(q);
if (fc[2] !== "*" || pp !== '') {
u += `/${fc[2]}`;
}
u += pp;
u += handleData2QueryParams(q, s, a);
return u;
};
createShortDataQuery = function(q, s, a) {
if (a < ApiNumber.v2_0_0) {
return createShortV1Url(q, s, a);
} else {
return createShortV2Url(q, s, a);
}
};
handler = Handler = class Handler {
handle(q, s, skip) {
var api;
api = ApiNumber[getKeyFromVersion(s.api)];
checkMultipleItems(q.provider, s, 'providers', api);
if (skip) {
return createShortDataQuery(q, s, api);
} else {
return createDataQuery(q, s, api);
}
}
};
exports.DataQueryHandler = handler;
}).call(this);