UNPKG

sdmx-rest

Version:

SDMX REST API client for JavaScript

236 lines (216 loc) 6.05 kB
// 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);