UNPKG

jsonstat-euro

Version:

A library to deal with Eurostat's JSON-stat API

3 lines (2 loc) 6.25 kB
// jsonstat-euro v3.0.0 Copyright 2026 Xavier Badosa https://jsonstat.com var EuroJSONstat=function(e,t){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var a="en";function n(e){var t=e.lang||a,n=e.version||"1.0",i=e.dataset||null,l=e.filter||null,o=e.label||null,s={class:"query",lang:t,version:n,dataset:i};return l&&"object"===r(l)&&0!==Object.keys(l).length&&(Object.keys(l).forEach(function(e){var t=l[e];Array.isArray(t)||(l[e]=[t]),0===l[e].length&&delete l[e]}),s.filter=l),o&&"object"===r(o)&&0!==Object.keys(o).length&&(s.label=o),s}function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e,t,r,a){var l,o=JSON.parse(JSON.stringify(e));if("string"==typeof a&&o.filter.hasOwnProperty("geo")&&-1!==o.filter.geo.indexOf(a)||(a=null),i(o,"filter")){switch(r){case"last":l=function(e){o.filter[e]=o.filter[e].slice(-1)};break;case"middle":l=function(e){var t=Math.round(o.filter[e].length/2);o.filter[e]=o.filter[e].slice(t-1,t)};break;default:l=function(e){o.filter[e]=o.filter[e].slice(0,1)}}Object.keys(o.filter).forEach(l),!0===t&&(delete o.filter.time,o.filter.lastTimePeriod=["1"]),a&&(o.filter.geo=[a])}return i(o,"label")&&i(o.label,"category")&&(Object.keys(o.label.category).forEach(function(e){o.label.category[e]=o.label.category[e].slice(0,1)}),!0===t&&delete o.label.category.time),n(o)}function o(e){var t=JSON.parse(JSON.stringify(e));return i(t,"filter")?(delete t.filter.time,t.filter.lastTimePeriod=["1"]):t.filter={lastTimePeriod:["1"]},n(t)}function s(e,t,r){void 0===r&&(r=Object.keys(t),t=n({dataset:null,filter:t}));var a=JSON.parse(JSON.stringify(e)),l=i(t,"filter"),o=i(t,"label")&&i(t.label,"category");return r.forEach(function(e){l&&i(t.filter,e)&&(i(a,"filter")||(a.filter={}),a.filter[e]=t.filter[e]),o&&i(t.label.category,e)&&(i(a,"label")?i(a.label,"category")||(a.label.category={}):a.label={},a.label.category[e]=t.label.category[e])}),n(a)}function c(e,t){var r=JSON.parse(JSON.stringify(e)),a=i(r,"filter"),l=i(r,"label"),o=l&&i(r.label,"category"),s=l&&i(r.label,"dimension");return t.forEach(function(e){a&&delete r.filter[e],l&&(o&&delete r.label.category[e],s&&delete r.label.dimension[e])}),n(r)}function f(e){if("string"==typeof e){if(/https?:\/\//i.test(e))return e;e={dataset:e}}if("object"===r(e)&&null!==e&&!Array.isArray(e)&&e.dataset){e=n(e);var t="".concat("https://ec.europa.eu/eurostat/api/dissemination/statistics/").concat(e.version,"/data/").concat(e.dataset,"?lang=").concat(e.lang),a=[],i=e.filter||null;return i&&0!==Object.keys(i).length&&(Object.keys(i).forEach(function(e){i[e].forEach(function(t){a.push("".concat(e,"=").concat(t))})}),t+="&"+a.join("&")),t}return null}function u(e){e.role={geo:[],time:[],metric:[],classification:[]},e.id.forEach(function(t){switch(e.Dimension(t).role="time"===t||"geo"===t?t:"classification",t){case"geo":case"time":e.role[t].push(t);break;case"unit":case"s_adj":case"indic_co":case"na_item":case"indic":e.role.metric.push(t);break;default:e.role.classification.push(t)}}),e.role.geo.length||delete e.role.geo,e.role.time.length||delete e.role.time,e.role.metric.length||delete e.role.metric,e.role.classification.length||delete e.role.classification}function y(e){if(e)return t(f(e)).then(function(e){return"dataset"===e.class?(u(e),e):e},function(e){var t=e.message.slice(0,3),r=isNaN(t)?"418":t;return{class:"error",status:r,label:"418"!==r?e.message.slice(4):e.message}})}function d(e,t){"string"==typeof e&&(e={dataset:e});var r=!1!==t?o(e):e;return y(r).then(function(e){if("error"===e.class)return e;if(e.error)return{class:"error",status:e.error.status,label:e.error.label};var t={},n={},i={};return e.id.forEach(function(r){var a=e.Dimension(r);n[r]=a.label,t[r]=a.id,i[r]=a.Category().map(function(e){return e.label})}),{class:"query",dataset:r.dataset,filter:t,label:{dataset:e.label,dimension:n,category:i},lang:r.lang||a,version:r.version||"1.0"}})}return e.addParamQuery=s,e.fetchDataset=y,e.fetchEmptyDataset=function(e,r){function a(e){if(!e.ok)throw new Error(e.status+" "+e.statusText);return e.json()}if(e){if("string"==typeof e){if(/https?:\/\//i.test(e))return new Promise(function(e){e({class:"error",status:400,label:"A URL was passed to fetchEmptyDataset. Only dataset codes and queries are accepted. "})});e={dataset:e}}return e.filter={time_period:["null"]},fetch(f(e)).then(a).then(function(n){var i=t(n),l=n.id.indexOf("time"),o={};return i.id.forEach(function(e){"time"!==e&&(o[e]=[i.Dimension(e).id[0]])}),n.value=[],e.filter=o,fetch(f(e)).then(a).then(function(e){if(n.size[l]=e.size[l],n.dimension.time.category=e.dimension.time.category,r){var a=t(n);return"dataset"===a.class?(u(a),a):a}return n})},function(e){var t=e.message.slice(0,3),r=isNaN(t)?"418":t;return{class:"error",status:r,label:"418"!==r?e.message.slice(4):e.message}})}},e.fetchFullQuery=function(e,t,r,a){"string"==typeof e&&(e={dataset:e}),"boolean"!=typeof t&&(t=!1),"string"!=typeof r&&(r="first"),"string"!=typeof a&&(a=null);var n=i(e,"filter")?e.filter:null;if(n&&0!==Object.keys(n).length){var o=Object.keys(n);return d(s(e,n),!1).then(function(e){return"error"===e.class?e:d(c(l(e,t,r,a),o),!1).then(function(t){return"error"===t.class?t:s(e,t,o)})})}return d(e,!1).then(function(e){return e})},e.fetchQuery=d,e.getEmptyDataset=function(e){var r=i(e,"lang")?e.lang:a,n=i(e,"dataset")?e.dataset:null,l={lang:r.toUpperCase(),datasetId:n},o=Object.keys(e.filter),s=o.map(function(t){return e.filter[t].length}),c={};o.forEach(function(t){c[t]={label:e.label.dimension[t],category:{index:e.filter[t],label:{}}},e.filter[t].forEach(function(r,a){Object.defineProperty(c[t].category.label,r,{value:e.label.category[t][a]})})});var f={version:"2.0",class:"dataset",label:e.label.dataset,extension:l,id:o,size:s,dimension:c,value:[]},y=t(f);return u(y),y},e.getStatusLabel=function(e,t){return e.extension.status.label[t]},e.getURL=f,e.lastPeriodQuery=o,e.removeParamQuery=c,e.removeTimeQuery=function(e){return c(e,["time","lastTimePeriod","sinceTimePeriod"])},e.setRole=u,e.simpleQuery=l,e.version="3.0.0",e}({},JSONstat);