UNPKG

sdmx-rest

Version:

SDMX REST API client for JavaScript

138 lines (127 loc) 3.57 kB
// 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);