-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cjs
More file actions
2 lines (2 loc) · 6.16 KB
/
main.cjs
File metadata and controls
2 lines (2 loc) · 6.16 KB
1
2
// jsonstat-euro v3.0.0 Copyright 2026 Xavier Badosa https://jsonstat.com
"use strict";var e=require("jsonstat-toolkit");function t(e){return t="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},t(e)}var r="en";function a(e){var a=e.lang||r,n=e.version||"1.0",i=e.dataset||null,l=e.filter||null,o=e.label||null,s={class:"query",lang:a,version:n,dataset:i};return l&&"object"===t(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"===t(o)&&0!==Object.keys(o).length&&(s.label=o),s}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function i(e,t,r,i){var l,o=JSON.parse(JSON.stringify(e));if("string"==typeof i&&o.filter.hasOwnProperty("geo")&&-1!==o.filter.geo.indexOf(i)||(i=null),n(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"]),i&&(o.filter.geo=[i])}return n(o,"label")&&n(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 l(e){var t=JSON.parse(JSON.stringify(e));return n(t,"filter")?(delete t.filter.time,t.filter.lastTimePeriod=["1"]):t.filter={lastTimePeriod:["1"]},a(t)}function o(e,t,r){void 0===r&&(r=Object.keys(t),t=a({dataset:null,filter:t}));var i=JSON.parse(JSON.stringify(e)),l=n(t,"filter"),o=n(t,"label")&&n(t.label,"category");return r.forEach(function(e){l&&n(t.filter,e)&&(n(i,"filter")||(i.filter={}),i.filter[e]=t.filter[e]),o&&n(t.label.category,e)&&(n(i,"label")?n(i.label,"category")||(i.label.category={}):i.label={},i.label.category[e]=t.label.category[e])}),a(i)}function s(e,t){var r=JSON.parse(JSON.stringify(e)),i=n(r,"filter"),l=n(r,"label"),o=l&&n(r.label,"category"),s=l&&n(r.label,"dimension");return t.forEach(function(e){i&&delete r.filter[e],l&&(o&&delete r.label.category[e],s&&delete r.label.dimension[e])}),a(r)}function c(e){if("string"==typeof e){if(/https?:\/\//i.test(e))return e;e={dataset:e}}if("object"===t(e)&&null!==e&&!Array.isArray(e)&&e.dataset){e=a(e);var r="".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))})}),r+="&"+n.join("&")),r}return null}function f(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 u(t){if(t)return e(c(t)).then(function(e){return"dataset"===e.class?(f(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 y(e,t){"string"==typeof e&&(e={dataset:e});var a=!1!==t?l(e):e;return u(a).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:a.dataset,filter:t,label:{dataset:e.label,dimension:n,category:i},lang:a.lang||r,version:a.version||"1.0"}})}exports.addParamQuery=o,exports.fetchDataset=u,exports.fetchEmptyDataset=function(t,r){function a(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(c(t)).then(a).then(function(n){var i=e(n),l=n.id.indexOf("time"),o={};return i.id.forEach(function(e){"time"!==e&&(o[e]=[i.Dimension(e).id[0]])}),n.value=[],t.filter=o,fetch(c(t)).then(a).then(function(t){if(n.size[l]=t.size[l],n.dimension.time.category=t.dimension.time.category,r){var a=e(n);return"dataset"===a.class?(f(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}})}},exports.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 l=n(e,"filter")?e.filter:null;if(l&&0!==Object.keys(l).length){var c=Object.keys(l);return y(o(e,l),!1).then(function(e){return"error"===e.class?e:y(s(i(e,t,r,a),c),!1).then(function(t){return"error"===t.class?t:o(e,t,c)})})}return y(e,!1).then(function(e){return e})},exports.fetchQuery=y,exports.getEmptyDataset=function(t){var a=n(t,"lang")?t.lang:r,i=n(t,"dataset")?t.dataset:null,l={lang:a.toUpperCase(),datasetId:i},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,a){Object.defineProperty(c[e].category.label,r,{value:t.label.category[e][a]})})});var u={version:"2.0",class:"dataset",label:t.label.dataset,extension:l,id:o,size:s,dimension:c,value:[]},y=e(u);return f(y),y},exports.getStatusLabel=function(e,t){return e.extension.status.label[t]},exports.getURL=c,exports.lastPeriodQuery=l,exports.removeParamQuery=s,exports.removeTimeQuery=function(e){return s(e,["time","lastTimePeriod","sinceTimePeriod"])},exports.setRole=f,exports.simpleQuery=i,exports.version="3.0.0";