-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodule.mjs
More file actions
2 lines (2 loc) · 6.11 KB
/
module.mjs
File metadata and controls
2 lines (2 loc) · 6.11 KB
1
2
// jsonstat-euro v3.0.0 Copyright 2026 Xavier Badosa https://jsonstat.com
import e from"jsonstat-toolkit";var t="3.0.0";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 n="en";function a(e){var t=e.lang||n,a=e.version||"1.0",i=e.dataset||null,l=e.filter||null,o=e.label||null,s={class:"query",lang:t,version:a,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,n){var l,o=JSON.parse(JSON.stringify(e));if("string"==typeof n&&o.filter.hasOwnProperty("geo")&&-1!==o.filter.geo.indexOf(n)||(n=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"]),n&&(o.filter.geo=[n])}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),a(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"]},a(t)}function s(e,t,r){void 0===r&&(r=Object.keys(t),t=a({dataset:null,filter:t}));var n=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(n,"filter")||(n.filter={}),n.filter[e]=t.filter[e]),o&&i(t.label.category,e)&&(i(n,"label")?i(n.label,"category")||(n.label.category={}):n.label={},n.label.category[e]=t.label.category[e])}),a(n)}function c(e,t){var r=JSON.parse(JSON.stringify(e)),n=i(r,"filter"),l=i(r,"label"),o=l&&i(r.label,"category"),s=l&&i(r.label,"dimension");return t.forEach(function(e){n&&delete r.filter[e],l&&(o&&delete r.label.category[e],s&&delete r.label.dimension[e])}),a(r)}function f(e){return c(e,["time","lastTimePeriod","sinceTimePeriod"])}function u(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=a(e);var t="".concat("https://ec.europa.eu/eurostat/api/dissemination/statistics/").concat(e.version,"/data/").concat(e.dataset,"?lang=").concat(e.lang),n=[],i=e.filter||null;return i&&0!==Object.keys(i).length&&(Object.keys(i).forEach(function(e){i[e].forEach(function(t){n.push("".concat(e,"=").concat(t))})}),t+="&"+n.join("&")),t}return null}function d(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(t){if(t)return e(u(t)).then(function(e){return"dataset"===e.class?(d(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 b(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={},a={},i={};return e.id.forEach(function(r){var n=e.Dimension(r);a[r]=n.label,t[r]=n.id,i[r]=n.Category().map(function(e){return e.label})}),{class:"query",dataset:r.dataset,filter:t,label:{dataset:e.label,dimension:a,category:i},lang:r.lang||n,version:r.version||"1.0"}})}function g(e,t,r,n){"string"==typeof e&&(e={dataset:e}),"boolean"!=typeof t&&(t=!1),"string"!=typeof r&&(r="first"),"string"!=typeof n&&(n=null);var a=i(e,"filter")?e.filter:null;if(a&&0!==Object.keys(a).length){var o=Object.keys(a);return b(s(e,a),!1).then(function(e){return"error"===e.class?e:b(c(l(e,t,r,n),o),!1).then(function(t){return"error"===t.class?t:s(e,t,o)})})}return b(e,!1).then(function(e){return e})}function m(t,r){function n(e){if(!e.ok)throw new Error(e.status+" "+e.statusText);return e.json()}if(t){if("string"==typeof t){if(/https?:\/\//i.test(t))return new Promise(function(e){e({class:"error",status:400,label:"A URL was passed to fetchEmptyDataset. Only dataset codes and queries are accepted. "})});t={dataset:t}}return t.filter={time_period:["null"]},fetch(u(t)).then(n).then(function(a){var i=e(a),l=a.id.indexOf("time"),o={};return i.id.forEach(function(e){"time"!==e&&(o[e]=[i.Dimension(e).id[0]])}),a.value=[],t.filter=o,fetch(u(t)).then(n).then(function(t){if(a.size[l]=t.size[l],a.dimension.time.category=t.dimension.time.category,r){var n=e(a);return"dataset"===n.class?(d(n),n):n}return a})},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 h(e,t){return e.extension.status.label[t]}function p(t){var r=i(t,"lang")?t.lang:n,a=i(t,"dataset")?t.dataset:null,l={lang:r.toUpperCase(),datasetId:a},o=Object.keys(t.filter),s=o.map(function(e){return t.filter[e].length}),c={};o.forEach(function(e){c[e]={label:t.label.dimension[e],category:{index:t.filter[e],label:{}}},t.filter[e].forEach(function(r,n){Object.defineProperty(c[e].category.label,r,{value:t.label.category[e][n]})})});var f={version:"2.0",class:"dataset",label:t.label.dataset,extension:l,id:o,size:s,dimension:c,value:[]},u=e(f);return d(u),u}export{s as addParamQuery,y as fetchDataset,m as fetchEmptyDataset,g as fetchFullQuery,b as fetchQuery,p as getEmptyDataset,h as getStatusLabel,u as getURL,o as lastPeriodQuery,c as removeParamQuery,f as removeTimeQuery,d as setRole,l as simpleQuery,t as version};