UNPKG

sdmx-rest

Version:

SDMX REST API client for JavaScript

119 lines (108 loc) 3.1 kB
// 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);