sdmx-rest
Version:
SDMX REST API client for JavaScript
186 lines (169 loc) • 4.91 kB
JavaScript
// Generated by CoffeeScript 2.7.0
(function() {
var ApiNumber, ApiVersion, Handler, createAvailabilityQuery, createEntryPoint, createShortAvailabilityQuery, createShortV1AvailUrl, createShortV2AvailUrl, createV1AvailUrl, createV2AvailUrl, getKeyFromVersion, handleAvailabilityPathParams, handleAvailabilityQueryParams, handleAvailabilityV2PathParams, handleAvailabilityV2QueryParams, handler, parseFlow, validateDataForV2;
({ApiNumber, ApiVersion, getKeyFromVersion} = require('../utils/api-version'));
({createEntryPoint, validateDataForV2, parseFlow} = require('../utils/url-generator-common'));
handleAvailabilityPathParams = function(q) {
var path;
path = [];
if (q.component !== 'all') {
path.push(q.component);
}
if (q.provider !== 'all' || path.length) {
path.push(q.provider);
}
if (q.key !== 'all' || path.length) {
path.push(q.key);
}
if (path.length) {
return '/' + path.reverse().join('/');
} else {
return '';
}
};
handleAvailabilityQueryParams = function(q) {
var p;
p = [];
if (q.updatedAfter) {
p.push(`updatedAfter=${q.updatedAfter}`);
}
if (q.end) {
p.push(`endPeriod=${q.end}`);
}
if (q.start) {
p.push(`startPeriod=${q.start}`);
}
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 '';
}
};
handleAvailabilityV2PathParams = function(q) {
var k, path;
path = [];
if (q.component !== 'all') {
path.push(q.component);
}
k = q.key === 'all' ? '*' : q.key;
if (k !== '*' || path.length) {
path.push(k);
}
if (path.length) {
return '/' + path.reverse().join('/');
} else {
return '';
}
};
handleAvailabilityV2QueryParams = function(q) {
var p;
p = [];
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 '';
}
};
createShortV1AvailUrl = function(q, s) {
var u;
u = createEntryPoint(s);
u += `availableconstraint/${q.flow}`;
u += handleAvailabilityPathParams(q);
u += handleAvailabilityQueryParams(q);
return u;
};
createShortV2AvailUrl = function(q, s) {
var fc, pp, u;
validateDataForV2(q, s);
u = createEntryPoint(s);
u += "availability/dataflow/";
fc = parseFlow(q.flow);
u += `${fc[0]}/${fc[1]}`;
pp = handleAvailabilityV2PathParams(q);
if (fc[2] !== "*" || pp !== "") {
u += `/${fc[2]}`;
}
u += pp;
u += handleAvailabilityV2QueryParams(q);
return u;
};
createV1AvailUrl = function(q, s) {
var url;
url = createEntryPoint(s);
url += 'availableconstraint';
url += `/${q.flow}/${q.key}/${q.provider}/${q.component}`;
url += `?mode=${q.mode}&references=${q.references}`;
if (q.start) {
url += `&startPeriod=${q.start}`;
}
if (q.end) {
url += `&endPeriod=${q.end}`;
}
if (q.updatedAfter) {
url += `&updatedAfter=${q.updatedAfter}`;
}
return url;
};
createV2AvailUrl = function(q, s) {
var fc, url;
validateDataForV2(q, s);
url = createEntryPoint(s);
url += 'availability';
fc = parseFlow(q.flow);
url += `/dataflow/${fc[0]}/${fc[1]}/${fc[2]}/`;
url += q.key === "all" ? "*/" : `${q.key}/`;
url += q.component === "all" ? "*" : `${q.component}`;
url += `?mode=${q.mode}&references=${q.references}`;
if (q.updatedAfter) {
url += `&updatedAfter=${q.updatedAfter}`;
}
return url;
};
createShortAvailabilityQuery = function(q, s, api_number) {
if (api_number < ApiNumber.v2_0_0) {
return createShortV1AvailUrl(q, s);
} else {
return createShortV2AvailUrl(q, s);
}
};
createAvailabilityQuery = function(q, s, api_number) {
if (api_number < ApiNumber.v2_0_0) {
return createV1AvailUrl(q, s);
} else {
return createV2AvailUrl(q, s);
}
};
handler = Handler = class Handler {
handle(q, s, skip) {
var api_number;
api_number = ApiNumber[getKeyFromVersion(s.api)];
if (api_number < ApiNumber.v1_3_0) {
throw Error(`Availability query not supported in ${s.api}`);
} else if (skip) {
return createShortAvailabilityQuery(q, s, api_number);
} else {
return createAvailabilityQuery(q, s, api_number);
}
}
};
exports.AvailabilityQueryHandler = handler;
}).call(this);