jsonstat-suite
Version:
A library of high level functions built on top of the JSON-stat Javascript Toolkit (JJT)
3 lines (2 loc) • 33.4 kB
JavaScript
// jsonstat-suite v3.5.0 Copyright 2023 Xavier Badosa https://jsonstat.com
function e(r,i){var l,a,o,s,u=function(e,r,i){var l,a=[];if(i&&!n(i.name)&&(i=null),"string"==typeof e&&(e=[e]),Array.isArray(e)||t(e)){if(e.length===r)return i&&-1===e.findIndex((function(e){return null==e}))?i.from(e):e;if(1===e.length){for(l=0;l<r;l++)a.push(e[0]);return a}}for(l=0;l<r;l++){var o=void 0===e[l]?null:e[l];a.push(o)}return a};if(this.length=0,this.id=[],null!=r)switch(this.class=r.class||"bundle",this.class){case"bundle":var c=[],f=0;if(this.error=null,this.length=0,null===r||"object"!=typeof r)return void(this.class=null);if(r.hasOwnProperty("error"))return void(this.error=r.error);if("dataset"===r.class||"collection"===r.class||"dimension"===r.class)return new e(r);for(a in r)f++,c.push(a);this.__tree__=r,this.length=f,this.id=c;break;case"dataset":r.hasOwnProperty("__tree__")?this.__tree__=l=r.__tree__:this.__tree__=l=r,this.label=l.label||null,this.note=l.note||null,this.link=l.link||null,this.href=l.href||null,this.updated=l.updated||null,this.source=l.source||null,this.extension=l.extension||null;var d,h=0,v=l.size||l.dimension&&l.dimension.size;if(this.size=v,this.value=l.hasOwnProperty("value")&&null!==l.value&&0!==l.value.length?l.value:{},Array.isArray(this.value)||t(this.value))h=this.value.length;else{var p=1;for(d=v.length;d--;)p*=v[d];h=p}if(this.value=u(this.value,h,i),this.status=l.hasOwnProperty("status")?u(l.status,h):null,l.hasOwnProperty("dimension")){var y=l.dimension,b=l.role||!l.version&&y.role||null,g=l.id||y.id,m=v.length,_=function(e){b.hasOwnProperty(e)||(b[e]=null)};if(!Array.isArray(g)||!Array.isArray(v)||g.length!=m)return;if(this.length=m,this.id=g,b&&(_("time"),_("geo"),_("metric"),_("classification")),b&&null===b.classification){var O=[],w=["time","geo","metric"],x=function(e,t){for(var n=t.length;n--;)if(e===t[n])return!0;return!1};for(d=0;d<3;d++){var A=b[w[d]];null!==A&&(O=O.concat(A))}for(b.classification=[],d=0;d<m;d++)x(g[d],O)||b.classification.push(g[d]);0===b.classification.length&&(b.classification=null)}this.role=b,this.n=h;for(var E=0,j=this.length;E<j;E++)if(y[g[E]].category.hasOwnProperty("index")){if(Array.isArray(y[g[E]].category.index)){var S={},D=y[g[E]].category.index;for(o=D.length,s=0;s<o;s++)S[D[s]]=s;y[g[E]].category.index=S}}else{var P=0;for(a in y[g[E]].category.index={},y[g[E]].category.label)y[g[E]].category.index[a]=P++}}else this.length=0;break;case"dimension":if(!r.hasOwnProperty("__tree__"))return new e({version:"2.0",class:"dataset",dimension:{d:r},id:["d"],size:[function(e){var t=void 0===e.index?e.label:e.index;return Array.isArray(t)?t.length:Object.keys(t).length}(r.category)],value:[null]}).Dimension(0);var k=[],z=(l=r.__tree__).category;if(!l.hasOwnProperty("category"))return;if(!z.hasOwnProperty("label"))for(a in z.label={},z.index)z.label[a]=a;for(a in z.index)k[z.index[a]]=a;this.__tree__=l,this.label=l.label||null,this.note=l.note||null,this.link=l.link||null,this.href=l.href||null,this.id=k,this.length=k.length,this.role=r.role,this.hierarchy=z.hasOwnProperty("child"),this.extension=l.extension||null;break;case"category":var C=r.child;this.id=C,this.length=null===C?0:C.length,this.index=r.index,this.label=r.label,this.note=r.note||null,this.unit=r.unit,this.coordinates=r.coord;break;case"collection":if(this.length=0,this.label=r.label||null,this.note=r.note||null,this.link=r.link||null,this.href=r.href||null,this.updated=r.updated||null,this.source=r.source||null,this.extension=r.extension||null,null!==this.link&&r.link.item){var N=r.link.item;if(this.length=Array.isArray(N)?N.length:0,this.length)for(s=0;s<this.length;s++)this.id[s]=N[s].href}}}function t(e){return"[object ArrayBuffer]"===Object.prototype.toString.call(e.buffer)}function n(e){return-1!==["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"].indexOf(e)}function r(e){if(!e.ok)throw new Error(e.status+" "+e.statusText);return e.json()}function i(t,n,i){var l="object"==typeof n?n:null;return"function"!=typeof i&&(i=null),i||"function"!=typeof n||(i=n),"object"==typeof t?new e(t,i):"version"===t?"1.4.2":fetch?fetch(t,l).then(r).then((function(t){return new e(t,i)})):void 0}function l(e,t){return null==e?null:("string"!=typeof e&&void 0!==e.length||(e=i(e)),0===e.length||"dataset"!==e.class&&"collection"!==e.class&&"bundle"!==e.class?null:"dataset"===e.class?e:e.Dataset(t))}function a(e){if(null===e||0===e.length||"dataset"!==e.class)return!1;for(var t=e.length,n=1;t--;)n*=e.Dimension(t).length;return n===e.n}function o(e,t,n){var r,i,l,a,o;return(t.label||n).capitalize()+(i=t,o="",(r=e)&&"metric"===r.role&&i.unit&&(l=i.unit.hasOwnProperty("label")?i.unit.label:"")+(a=i.unit.hasOwnProperty("symbol")?i.unit.symbol:"")!==""&&(o=" ("+(o=""===a?l:""===l?a:"start"===i.unit.position?a+l:l+" "+a)+")"),o)}function s(e,t,n){var r,i='<select name="'+t+'">',l=[];if(null!==n[1]){if(r=e.id,l=e.Dimension(),2===r.length)return(e.Dimension(n[0]).label||n[0]).capitalize()}else{var a=e.Dimension(t);if(r=a.id,l=a.Category(),1===r.length)return}return r.forEach((function(e,t){var r=e!==n[0]?"":'selected="selected" ';null!==n[1]&&e===n[1]||(i+="<option "+r+'value="'+e+'">'+o(a,l[t],e)+"</option>")})),i+="</select>"}function u(e,t,n){function r(e){void 0!==t?t.innerHTML=i[e]:window.alert(i[e])}if(void 0!==e)if(void 0!==t){void 0===n&&(n={});var i=void 0===n.i18n||void 0===n.i18n.msgs?{urierror:"tbrowser: A valid JSON-stat input must be specified.",selerror:"tbrowser: A valid selector must be specified.",jsonerror:"The request did not return a valid JSON-stat dataset.",dimerror:"Only one dimension was found in the dataset. At least two are required.",dataerror:"Selection returned no data!",source:"Source",filters:"Filters",constants:"Constants",rc:"Rows & Columns",na:"n/a"}:n.i18n.msgs,u=void 0===n.i18n||void 0===n.i18n.locale?"en-US":n.i18n.locale,c=n.dsid||0,f=n.status||!1,d=n.tblclass||"",h=n.nonconst||!1,v=l(e,c);if(a(v)){if(h)var p=function(e){var t=0,n=e.size.slice(0),r=[];return n.forEach((function(n,i){var l=i-t,a=e.Dimension(l);1===n&&(delete e.__tree__.dimension[e.id[l]],e.size.splice(l,1),e.id.splice(l,1),e.length--,t++,r.push(a.label.capitalize()+": "+a.Category(0).label.capitalize()))})),r}(v);1!==v.length?function e(t,r,l,a){"function"==typeof n.callback&&n.callback(l);var c="",d="",v="",y="",b=l.rows,g=r.Dimension(b),m=g.id,_=l.cols,O=r.Dimension(_),w=O.id,x=r.role&&r.role.metric?r.role.metric[0]:null,A=null!==x?r.Dimension(x):null,E=function(e){return e.hasOwnProperty("unit")&&e.unit&&e.unit.hasOwnProperty("decimals")?e.unit.decimals:null},j=l.filters,S=JSON.parse(JSON.stringify(j)),D=[],P="",k="",z=r.source?i.source+": "+r.source:"",C=null!==r.label?'<span class="label">'+r.label.capitalize()+"</span>":"";for(var N in h&&p.length&&(C='<span class="label">'+p.join(". ")+"</span>"),""!==z&&"."!==z.slice(-1)&&(z+="."),v+="<caption>"+C+"<form>",j){var T=r.Dimension(N),R=T.label?T.label.capitalize():N.capitalize();T.length>1?P+="<p>"+s(r,N,[j[N],null])+" <strong>"+R+"</strong></p>":D.push({label:R,value:o(T,T.Category(0)),name:N,id:T.id[0]})}""!==P&&(P='<fieldset id="filters"><legend>'+i.filters+"</legend>"+P+"</fieldset>"),D.forEach((function(e){k+="<p>"+e.value+" <strong>"+e.label+'</strong></p><input type="hidden" name="'+e.name+'" value="'+e.id+'" />'})),""!==k&&(k='<fieldset id="constants"><legend>'+i.constants+"</legend>"+k+"</fieldset>"),v+=k+P+'<fieldset id="rowscols"><legend>'+i.rc+"</legend>"+s(r,"rows",[b,_])+" <a>↔</a> "+s(r,"cols",[_,b])+"</fieldset></form></caption>",y+="<tbody>";var F=Number.toLocaleString&&"none"!==u?function(e,t){return null===t?e.toLocaleString(u):e.toLocaleString(u,{minimumFractionDigits:t,maximumFractionDigits:t})}:function(e,t){return null===t?e:e.toFixed(t)};if(m.forEach((function(e){S[b]=e;var t=r.Data(S),n=function(e,t){var n,r=_!==x?null===A?null:E(A.Category(S[x])):E(O.Category(t));null!==e.value?(n=F(e.value,r),f&&null!==e.status&&(n+=" ("+e.status+")")):n=e.status||i.na,y+="<td>"+n+"</td>"};null!==t?(y+='<tr><th scope="row">'+o(g,g.Category(e))+"</th>",Array.isArray(t)?t.forEach((function(e,t){n(e,t)})):n(t,0),y+="</tr>"):y="ERROR"})),"ERROR"===y)return i.dataerror;y+="</tbody>",c+="<thead><tr><th></th>",w.forEach((function(e){c+='<th scope="col">'+o(O,O.Category(e))+"</th>"})),c+="</tr></thead>",""!==z&&(d='<tfoot><tr><td colspan="'+(w.length+1)+'">'+z+"</td></tr></tfoot>"),t.innerHTML='<table class="'+a+'">'+v+c+y+d+"</table>",[].slice.call(t.querySelectorAll("select")).forEach((function(n){n.addEventListener("change",(function(n){var i,l;e(t,r,function(e,t,n){var r={filters:{}};return n.forEach((function(e){"rows"===e.name||"cols"===e.name?r[e.name]=e.value:r.filters[e.name]=e.value})),"rowscols"===t&&e.id.forEach((function(t,n){t!==r.rows&&t!==r.cols?void 0===r.filters[t]&&(r.filters[t]=e.Dimension(n).id[0]):delete r.filters[t]})),r}(r,n.target.parentElement.getAttribute("id"),(i=t,l=[],[].slice.call(i.querySelectorAll("select, input")).forEach((function(e){l.push({name:e.name,value:e.value})})),l)),a)}),!1)})),t.querySelector("a").addEventListener("click",(function(){l.cols=b,l.rows=_,e(t,r,l,a)}),!1)}(t,v,function(e,t){if("object"==typeof t)return{rows:t.rows,cols:t.cols,filters:t.filters};var n,r,i={},l=[],a=e.id;if(t){var o="bigger"===t?function(e,t){return e.len<t.len?1:-1}:function(e,t){return e.len>t.len?1:-1};e.Dimension().forEach((function(e,t){l.push({id:a[t],len:e.length})})),l.sort(o),n=l[0].id,r=l[1].id}else n=a[0],r=a[1];return e.Dimension(n).length<e.Dimension(r).length&&(n=r+(r=n,"")),a.forEach((function(t){t!==n&&t!==r&&(i[t]=e.Dimension(t).id[0])})),{rows:n,cols:r,filters:i}}(v,n.preset),d):r("dimerror")}else r("jsonerror")}else r("selerror");else r("urierror")}function c(e,t){if(void 0===e)return null;void 0===t&&(t={});var n="",r="",i="",o=0,s=t.na||"n/a",u=t.dsid||0,c=t.vlabel||null,f=t.slabel||null,d=t.counter||!1,h=t.tblclass||"",v=t.numclass||"",p=t.valclass||"",y=t.status||!1,b=t.locale||"en-US",g=t.source||"Source",m=l(e,u),_=m.role&&m.role.metric?m.id.indexOf(m.role.metric[0]):null,O=m.Dimension({role:"metric"}),w={},x=Number.toLocaleString&&"none"!==b?function(e,t){return null===t?e.toLocaleString(b):e.toLocaleString(b,{minimumFractionDigits:t,maximumFractionDigits:t})}:function(e,t){return null===t?e:e.toFixed(t)},A=function(e,t){var i=null;e.forEach((function(e,l){var a=S===l?' class="'+v+" "+p+'"':"",o=s;t?(_===l&&(i=w[e]),null!==e&&(o=S===l?x(e,i):e),r+="<td"+a+">"+o+"</td>"):n+="<th"+a+">"+e+"</th>"}))},E=d?function(e,t){t?r+='<tr><td class="'+v+'">'+t+"</td>":n+='<th class="'+v+'">#</th>',A(e,t),r+="</tr>"}:function(e,t){r+="<tr>",A(e,t),r+="</tr>"};if(!a(m))return null;O&&O[0].Category().forEach((function(e){var t=e.unit&&e.unit.hasOwnProperty("decimals")?e.unit.decimals:null;w[e.label]=t}));var j=m.toTable({status:y,vlabel:c,slabel:f}),S=j[0].length-1;return j.forEach((function(e,t){E(e,t)})),m.source&&(o=m.length+1,d&&o++,y&&o++,"."!==(g+=": "+m.source).slice(-1)&&(g+="."),i='<tfoot><td colspan="'+o+'">'+g+"</td></tfoot>"),'<table class="'+h+'"><caption>'+(t.caption||m.label||"")+"</caption><thead><tr>"+n+"</tr></thead><tbody>"+r+"</tbody>"+i+"</table>"}function f(e,t){var n={};return Array.isArray(e[t])?(e[t].forEach((function(e,t){null!==e&&(n[String(t)]=e)})),n):e[t]}function d(e,t){if(void 0===e)return null;void 0===t&&(t={}),"boolean"!=typeof t.ovalue&&(t.ovalue=!1),"boolean"!=typeof t.ostatus&&(t.ostatus=!1),"boolean"!=typeof t.instance&&(t.instance=!1);var n=t.vlabel||"Value",r=t.slabel||"Status",l=t.type||"array",a=t.label||"",o=t.header||null,s=[],u=[],c=[],d=[],h={},v={},p=function(e,t){for(var n=1,r=0,i=0;i<w;i++)r+=(n*=i>0?t[w-i]:1)*e[w-i-1];return r},y=function(){var t=e[x][n];c[p(A,u)]=isNaN(t)?null:t};switch(l){case"array":e=function(e){for(var t=e[0],n=e.slice(1),r=[],i=0,l=n.length;i<l;i++){for(var a=0,o=t.length,s={};a<o;a++)s[t[a]]=n[i][a];r.push(s)}return r}(e);break;case"object":e=function(e){for(var t=e.cols.map((function(e){return e.id})),n=e.rows,r=[],i=0,l=n.length;i<l;i++){for(var a=0,o=t.length,s={};a<o;a++)s[t[a]]=n[i].c[a].v;r.push(s)}return r}(e)}var b,g=e.length;for(var m in t.hasOwnProperty("drop")&&Array.isArray(t.drop)&&t.drop.length&&e.forEach((function(e){t.drop.forEach((function(t){delete e[t]}))})),e[0])if(m!==n)if(m!==r){if(s.push(m),o)b=o.dimension[m],h[m]=b.category.index;else{h[m]=[];for(var _=0;_<g;_++){var O=e[_][m];-1===h[m].indexOf(O)&&h[m].push(O)}}u.push(h[m].length),v[m]={label:o?b.label:m,category:{index:h[m]}},o&&(v[m].category.label=b.category.label,b.category.unit&&(v[m].category.unit=b.category.unit))}else y=function(){var t=e[x][n],i=e[x][r];c[p(A,u)]=isNaN(t)?null:t,d[p(A,u)]=""===i?null:i};for(var w=s.length,x=0;x<g;x++){for(var A=[],E=0;E<w;E++){var j=s[E];A.push(h[j].indexOf(e[x][j]))}y()}var S={version:"2.0",class:"dataset",value:c,dimension:v,id:s,size:u};return a&&(S.label=a),d.length&&(S.status=d),o&&(o.label&&(S.label=o.label),o.source&&(S.source=o.source),o.updated&&(S.updated=o.updated),o.href&&(S.href=o.href),o.role&&(S.role=o.role)),t.ovalue&&(S.value=f(S,"value")),t.ostatus&&S.hasOwnProperty("status")&&(S.status=f(S,"status")),t.instance?i(S):S}function h(e,t){if(void 0===e)return null;void 0===t&&(t={});var n,r,i,l=[],a=null,o=null,s=!1,u={time:[],geo:[],metric:[]},c="jsonstat"===e.substring(0,8),f=c?"value":t.vlabel,h=c?"status":t.slabel,v=c?e.substring(8,9):t.delimiter||",",p=";"===v?t.decimal||",":t.decimal||".",y=function(e,t){t=t||",";for(var n,r,i=new RegExp("(\\"+t+'|\\r?\\n|\\r|^)(?:"([^"]*(?:""[^"]*)*)"|([^"\\'+t+"\\r\\n]*))","gi"),l=[[]],a=null;a=i.exec(e);)(r=a[1]).length&&r!=t&&l.push([]),n=a[2]?a[2].replace(new RegExp('""',"g"),'"'):a[3],l[l.length-1].push(n);return l}(e.trim(),v);if(c){for(p=y[0][1],i=y[0][2],y.shift();"data"!==y[0][0];)l.push(y.shift());y.shift(),o={dimension:{}},l.forEach((function(e){var t,n,r,l,a,c,f,d;switch(e[0]){case"dimension":if(o.dimension[e[1]]={},(l=o.dimension[e[1]]).label=e[2],l.category={},(a=l.category).index=[],n={},r=2*e[3]+3,e.length>=r){for(t=4;t<r;t++)f=e[t],d=e[++t],Object.defineProperty(n,f,{value:d,writable:!0,configurable:!0,enumerable:!0}),a.label=n,a.index.push(f);"string"==typeof e[t]&&-1!==["time","geo","metric"].indexOf(e[t])&&(u[e[t]].push(e[1]),s=!0,"metric"===e[t]&&"string"==typeof e[++t]&&(a.unit={},a.index.forEach((function(n,r){var l=e[t+r].split(i);a.unit[n]={},c=a.unit[n],void 0!==l[0]&&""!==l[0]&&(c.decimals=1*l[0]),void 0!==l[1]&&""!==l[1]&&(c.label=l[1]),void 0!==l[2]&&""!==l[2]&&(c.symbol=l[2]),void 0!==l[1]&&-1!==["start","end"].indexOf(l[3])&&(c.position=l[3])}))))}break;case"label":case"source":case"updated":case"href":o[e[0]]=e[1]||null}})),s&&(u.time.length||delete u.time,u.geo.length||delete u.geo,u.metric.length||delete u.metric,o.role=u)}if(n=y.length,r=y[0].length,void 0!==f){for(;r--;)if(y[0][r]===f){a=r;break}if(null===a)return null}else a=r-1,f=y[0][a];if(","===p)for(r=1;r<n;r++)y[r][a]=Number(y[r][a].replace(",","."));else for(r=1;r<n;r++)y[r][a]=Number(y[r][a]);return d(y,{header:o,vlabel:f,slabel:h,type:"array",label:t.label||"",ovalue:t.ovalue||!1,ostatus:t.ostatus||!1,instance:t.instance||!1})}function v(e,t){if("object"!=typeof e)return null;if(e.hasOwnProperty("data")&&e.hasOwnProperty("meta")&&e.data.hasOwnProperty("dataSets")&&e.data.hasOwnProperty("structures")&&Array.isArray(e.data.structures)&&(e.dataSets=e.data.dataSets,e.structure=e.data.structures[0],e.header=e.meta),!e.hasOwnProperty("dataSets")||!Array.isArray(e.dataSets))return null;if(1!==e.dataSets.length)return null;e.dataSets[0].hasOwnProperty("observations")||function(e){var t=e.dataSets[0],n=t.series,r=e.structure,i=r.dimensions,l={};Object.keys(n).forEach((function(e){var t=n[e].observations;Object.keys(t).forEach((function(r){l[e+":"+r]=t[r].concat(n[e].attributes)}))})),t.observations=l,delete t.series,i.observation=i.series.concat(i.observation),delete i.series,r.attributes.observation=r.attributes.observation.concat(r.attributes.series),delete r.attributes.series}(e),void 0===t?t={ovalue:!1,ostatus:!1,instance:!1}:("boolean"!=typeof t.ovalue&&(t.ovalue=!1),"boolean"!=typeof t.ostatus&&(t.ostatus=!1),"boolean"!=typeof t.instance&&(t.instance=!1));var n=e.structure,r=e.dataSets[0].observations,l=n.attributes.observation,a=n.dimensions;if(!a.hasOwnProperty("observation"))return null;if(a.hasOwnProperty("series")&&Object.keys(a.series).length)return null;var o=1,s=[],u=[],c={},f=[],d={time:[],geo:[]},h=function(){},v=function(e,t){for(var n=e.size,r=n.length-t.length;r--;)t.push(0);for(var i=0,l=n.length,a=0,o=1;i<l;i++)a+=(o*=i>0?n[l-i]:1)*t[l-i-1];return a},p=function(e){if(c[e.id]={label:e.name},e.hasOwnProperty("role"))switch(e.role){case"REF_AREA":d.geo.push(e.id);break;case"TIME_PERIOD":d.time.push(e.id)}Object.defineProperty(c[e.id],"category",{value:{index:[],label:{}},writable:!0,enumerable:!0}),s.push(e.id),u.push(e.values.length),o*=e.values.length;var t=c[e.id].category;e.values.forEach((function(e){t.index.push(e.id),Object.defineProperty(t.label,e.id,{value:e.name,writable:!0,enumerable:!0})}))},y=e.header.links?e.header.links.find((function(e){return"request"===e.rel})):null,b=l.findIndex((function(e){return"OBS_STATUS"===e.id}));-1!==b&&(l[b].values.length?f=l[b].values:b=-1),a.observation.forEach(p),a.hasOwnProperty("dataSet")&&a.dataSet.forEach(p);var g={version:"2.0",class:"dataset",updated:e.header.prepared||null,source:e.header.sender.name||null,label:n.name||null,id:s,size:u,dimension:c,value:t.ovalue?{}:new Array(o).fill(null)};for(var m in y&&(g.link={alternate:[{type:"application/vnd.sdmx.data+json",href:y.href}]}),d.geo.length+d.time.length>0&&(d.time.length||delete d.time,d.geo.length||delete d.geo,g.role=d),-1!==b&&(g.status=t.ostatus?{}:new Array(o).fill(null),g.extension={status:{label:{}}},f.forEach((function(e){g.extension.status.label[e.id]=e.name})),h=t.ostatus?function(){var e=r[m][b];null!==e&&(g.status[v(g,_)]=f[e].id)}:function(){var e=r[m][b];g.status[v(g,_)]=null===e?null:f[e].id}),b++,r){var _=m.split(":");t.ovalue&&null===r[m][0]||(g.value[v(g,_)]=r[m][0]),h()}return t.instance?i(g):g}function p(e,t){if(void 0===e||!Array.isArray(e))return null;var n=JSON.parse(JSON.stringify(e)),r=n[0];if(!r.hasOwnProperty("version")||!r.hasOwnProperty("class")||"dataset"!==r.class)return null;void 0===t&&(t={});var l=void 0===t.label?null:t.label,a=void 0===t.by?null:t.by,o=[];if(null===a){for(var s=1,u=n.length;s<u;s++)o=o.concat(n[s].value);return r.value=o,null!==l&&(r.label=l),r}var c,f,h,v=function(e,t,n){if(Array.isArray(e))e=e.concat(t);else for(var r in t)e[r]=0===t[r]?n:t[r];return e};n.forEach((function(e,t){var n=i(e).toTable({status:!0}),r=e.dimension[a].category;0===t?(o=[n[0]],c=r.index,f=r.label,h=r.unit):(c=function(e,t,n){if(Array.isArray(e))e=e.concat(t);else for(var r in t)e[r]=t[r]+n;return e}(c,r.index,Object.keys(c).length),f=v(f,r.label,t),h=v(h,r.unit,t)),o=o.concat(n.slice(1))}));var p=d(o);return r.value=p.value,r.size=p.size,r.status=p.status||null,r.label=l||"",r.href=null,r.dimension[a].category.index=c||null,r.dimension[a].category.label=f||null,r.dimension[a].category.unit=h||null,r}function y(e,t){return null==e?"":-1!==e.indexOf(t)?'"'+e+'"':e}function b(e,t){if(void 0===e)return null;void 0===t&&(t={});var n={content:!1,field:!1},r=!0===t.rich,i=t.content||"label",o=t.field||"label",s=r?"value":t.vlabel||"Value",u=r?"status":t.slabel||"Status",c=!0===t.status,f=t.na||"n/a",d=t.delimiter||",",h=t.separator||"|",v=";"===d?t.decimal||",":t.decimal||".",p=!0===t.array,b=l(e,t.dsid||0),g=p?[]:"",m=p?[]:"",_=p?function(e){g.push(e)}:function(e){g+=e+"\n"},O=p?function(e){m.push(e)}:function(e){m+=e+"\n"};if(!a(b))return null;r?c=null!==b.status:("[id] label"===i&&(n.content=!0,i="id"),"[id] label"===o&&(n.field=!0,o="id"));var w=!r&&t.by&&-1!==b.id.indexOf(t.by)?t.by:null,x=w&&void 0!==t.drop&&Array.isArray(t.drop)?t.drop:null;if(w)return function(e,t){const n=[],r=t.by,i=t.idlabel,l=t.drop,a=t.na,o=t.delimiter,s=t.decimal,u=i.content?"id":t.content,c=i.field?"label":t.field,f=e.toTable({drop:l,content:u,by:r,type:"arrobj"}),d=Object.keys(f[0]),h=function(e,t,n,r,l){return e.map((e=>"label"===n?-1!==r.id.indexOf(e)?y((i.field?"["+e+"] ":"")+r.Dimension(e).label,t):y((i.field?"["+e+"] ":"")+r.Dimension(l).Category(e).label,t):y(e,t))).join(t)+"\n"}(d,o,c,e,r),v="."!==s?function(e){return null===e?y(a,o):String(e).replace(".",s)}:function(e){return null===e?y(a,o):e};return f.forEach((t=>{let r=[];d.forEach((n=>{const l=t[n],a="string"==typeof l?y(i.content?"["+l+"] "+e.Dimension(n).Category(l).label:l,o):v(l);r.push(a)})),n.push(r.join(o))})),h+n.join("\n")}(b,{drop:x,na:f,delimiter:d,decimal:v,content:i,field:o,by:w,idlabel:n});var A=b.toTable({vlabel:s,slabel:u,status:c,field:r||n.field?"id":o,content:r||n.content?"id":i,type:"array"}),E=A[0].indexOf("id"===o?"value":s),j=c?A[0].indexOf("id"===o?"status":u):-1;return A.forEach((function(e,t){e.forEach((function(r,i){var l=b.Dimension(i);t&&i===E?null===r?e[i]=y(f,d):"."!==v&&(e[i]=String(e[i]).replace(".",v)):t&&i===j&&null===r?e[i]="":(n.content&&t&&l?e[i]="["+e[i]+"] "+l.Category(e[i]).label:n.field&&0===t&&(e[i]=l?"["+e[i]+"] "+l.label:"value"===e[i]?s:u),e[i]=y(e[i],d))})),_(e.join(d))})),r&&(O("jsonstat"+d+v+d+h),["label","source","updated","href"].forEach((function(e){b[e]&&O(e+d+y(b[e],d))})),b.id.forEach((function(e,t){var n=[],r=b.Dimension(t),i=r.role,l=!1,a="";a+="dimension"+d+y(e,d)+d+y(r.label,d)+d+r.length,"metric"===i&&r.__tree__.category.unit&&(l=!0),r.id.forEach((function(e,t){var i=[],o=r.Category(t);a+=d+y(e,d)+d+y(o.label,d),l&&(i.push(o.unit.hasOwnProperty("decimals")?o.unit.decimals:""),i.push(o.unit.label||""),o.unit.symbol&&(i.push(o.unit.symbol),i.push(o.unit.position)),n.push(y(i.join(h),d)))})),null!==i&&"classification"!==i&&(a+=d+r.role,l&&(a+=d+n.join(d))),O(a)})),g=p?m.concat(["data"],g):m+"data\n"+g),g}e.prototype.Item=function(e){if(null===this||"collection"!==this.class||!this.length)return null;if("number"==typeof e)return e>this.length||e<0?null:this.link.item[e];var t,n=[];if("object"==typeof e){if(!e.class&&!e.follow)return null;e.class&&(t="dataset"===e.class&&"boolean"==typeof e.embedded?!0===e.embedded?function(e,t,r){var i=e.link.item[t];r.class===i.class&&i.id&&i.size&&i.dimension&&n.push(i)}:function(e,t,r){var i=e.link.item[t];r.class!==i.class||i.id&&i.size&&i.dimension||n.push(i)}:function(e,t,r){r.class===e.link.item[t].class&&n.push(e.link.item[t])})}else t=function(e,t){n.push(e.link.item[t])};for(var r=0;r<this.length;r++)t(this,r,e);return n},e.prototype.Dataset=function(t){if(null===this)return null;if("dataset"===this.class)return void 0!==t?this:[this];var n,r=[],i=0;if("collection"===this.class){var l=this.Item({class:"dataset",embedded:!0});if(void 0===t){for(n=l.length;i<n;i++)r.push(new e(l[i]));return r}if("number"==typeof t&&t>=0&&t<l.length)return new e(l[t]);if("string"==typeof t)for(n=l.length;i<n;i++)if(l[i].href===t)return new e(l[i]);return null}if("bundle"!==this.class)return null;if(void 0===t){for(n=this.id.length;i<n;i++)r.push(this.Dataset(this.id[i]));return r}if("number"==typeof t){var a=this.id[t];return void 0!==a?this.Dataset(a):null}var o=this.__tree__[t];return void 0===o?null:new e({class:"dataset",__tree__:o})},e.prototype.Dimension=function(t,n){n="boolean"!=typeof n||n;var r,i=[],l=this.id.length,a=function(e,t){if(null!==e)for(var n in e)for(var r=null!==e[n]?e[n].length:0;r--;)if(e[n][r]===t)return n;return null};if(null===this||"dataset"!==this.class)return null;if(void 0===t){for(r=0;r<l;r++)i.push(this.Dimension(this.id[r]));return i}if("number"==typeof t){var o=this.id[t];return void 0!==o?this.Dimension(o,n):null}var s=this.role;if("object"==typeof t){if(t.hasOwnProperty("role")){for(r=0;r<l;r++){var u=this.id[r];a(s,u)===t.role&&i.push(this.Dimension(u,n))}return void 0===i[0]?null:i}return null}var c=this.__tree__.dimension;if(void 0===c)return null;var f=c[t];return void 0===f?null:n?new e({class:"dimension",__tree__:f,role:a(s,t)}):function(e,t){var n=[];for(var r in e)n[e[r]]=t[r];return n}(f.category.index,f.category.label)},e.prototype.Category=function(t){if(null===this||"dimension"!==this.class)return null;if(void 0===t){for(var n=[],r=0,i=this.id.length;r<i;r++)n.push(this.Category(this.id[r]));return n}if("number"==typeof t){var l=this.id[t];return void 0!==l?this.Category(l):null}var a=this.__tree__.category;if(void 0===a)return null;var o=a.index[t];if(void 0===o)return null;var s=a.unit&&a.unit[t]||null,u=a.coordinates&&a.coordinates[t]||null,c=a.child&&a.child[t]||null,f=a.note&&a.note[t]||null;return new e({class:"category",index:o,label:a.label[t],note:f,child:c,unit:s,coord:u})},e.prototype.Dice=function(n,r,i){var l,a,o,s,u=function(e,t){return e.hasOwnProperty(t)&&!!e[t]};if(null===this||"dataset"!==this.class)return null;if("object"!=typeof n)return this;"object"!=typeof r?("boolean"==typeof r&&!0===r&&(l=!0),"boolean"==typeof i&&!0===i||(i=!1)):(l=u(r,"clone"),i=u(r,"drop"),a=u(r,"stringify"),o=u(r,"ovalue"),s=u(r,"ostatus"));var c,f=this.value,d=l?new e(JSON.parse(JSON.stringify(this))):this,h=d.status,v=[],p=[],y=function(e,t){var n,r,i,l=(n=e,r=t,i={},Array.isArray(n[r])?(n[r].forEach((function(e,t){null!==e&&(i[String(t)]=e)})),i):n[r]);delete e[t],e[t]=l};Array.isArray(n)&&(n=function(e){var t={};return e.forEach((function(e){t[e[0]]=e[1]})),t}(n)),null===n&&(n={});var b=Object.keys(n);return b.length>0&&(b.forEach((function(e){var t=n[e];Array.isArray(t)||(n[e]=[t]),0===n[e].length&&delete n[e]})),i&&(n=function(e){var t={};return Object.keys(e).forEach((function(n){t[n]=d.Dimension(n).id.filter((function(t){return-1===e[n].indexOf(t)}))})),t}(n)),d.toTable({type:"arrobj",content:"id",status:!0}).forEach((function(e,t){var r=[];b.forEach((function(t){var i=n[t],l=[];i.forEach((function(n){l.push(e[t]===n)})),r.push(-1!==l.indexOf(!0))})),-1===r.indexOf(!1)&&(v.push(e.value),p.push(e.status))})),b.forEach((function(e){var t=d.Dimension(e).id,r=0,i={};d.size[d.id.indexOf(e)]=n[e].length,t.forEach((function(t){-1!==n[e].indexOf(t)&&(i[t]=r,r++)})),d.__tree__.dimension[e].category.index=i})),d.n=v.length,d.value=d.__tree__.value=t(f)?function(e,t){return t.from(e)}(v,f.constructor):v,d.status=d.__tree__.status=null!==h?p:null),a?((c=d.__tree__).hasOwnProperty("id")||(c.version="2.0",c.hasOwnProperty("class")||(c.class="dataset"),c.id=c.dimension.id,c.size=c.dimension.size,delete c.dimension.id,delete c.dimension.size,c.dimension.hasOwnProperty("role")&&(c.role=c.dimension.role,delete c.dimension.role)),c.hasOwnProperty("status")&&-1!==["null","{}","[]"].indexOf(JSON.stringify(c.status))&&delete c.status,c.hasOwnProperty("role")&&(delete c.role.classification,["geo","time","metric"].forEach((function(e){null===c.role[e]&&delete c.role[e]}))),o&&y(c,"value"),s&&c.hasOwnProperty("status")&&y(c,"status"),JSON.stringify(c)):d},e.prototype.Slice=function(e){if(null===this||"dataset"!==this.class)return null;if(void 0===e)return this;if(!Array.isArray(e)){var t,n=[];for(t in e)n.push([t,e[t]]);e=n}return this.Dice(e.map((function(e){return[e[0],[e[1]]]})))},e.prototype.Data=function(e,t){var n,r,i=[],l=function(e){for(var t in e)if(e.hasOwnProperty(t))return t};if(null===this||"dataset"!==this.class)return null;if(void 0===e){for(r=this.value.length,n=0;n<r;n++)i.push(this.Data(n));return i}if("boolean"!=typeof t&&(t=!0),"number"==typeof e){var a=this.value[e];return void 0===a?null:t?{value:a,status:this.status?this.status[e]:null}:a}var o="object",s=this.__tree__,u=s.size||s.dimension&&s.dimension.size,c=u.length;if(Array.isArray(e)){if(!Array.isArray(e[0])){if(this.length!==e.length)return null;var f=1,d=0,h=[],v=[];for(n=0;n<c;n++)if(void 0!==e[n]){if("number"!=typeof e[n]||e[n]>=u[n])return null;d+=(f*=n>0?u[c-n]:1)*e[c-n-1]}else h.push(n),v.push(u[n]);if(h.length>1)return null;if(1===h.length){for(var p=0,y=v[0];p<y;p++){var b=[];for(n=0;n<c;n++)n!==h[0]?b.push(e[n]):b.push(p);i.push(this.Data(b,t))}return i}return t?{value:this.value[d],status:this.status?this.status[d]:null}:this.value[d]}o="array"}var g=function(e,t,n){var r,i=[],a={},o=e.dimension,s=e.id||o.id,u=e.size||o&&o.size;if("array"===n){for(r=t.length;r--;)a[t[r][0]]=t[r][1];t=a}for(var c=0,f=s.length;c<f;c++){var d=s[c],h=t[d];i.push("string"==typeof h?h:1===u[c]?l(o[d].category.index):null)}return i}(s,e,o),m=[],_=s.dimension,O=s.id||_.id;for(n=0,r=g.length;n<r;n++)m.push(_[O[n]].category.index[g[n]]);return this.Data(m,t)},e.prototype.toTable=function(e,t){if(null===this||"dataset"!==this.class)return null;1==arguments.length&&"function"==typeof e&&(t=e,e=null),"arrobj"!==(e=e||{field:"label",content:"label",vlabel:"Value",slabel:"Status",type:"array",status:!1,unit:!1,by:null,prefix:"",drop:[],meta:!1,comma:!1,bylabel:!1}).type&&"objarr"!==e.type||void 0!==e.field||(e.field="id");var r,i,l,a,o,s,u,c,f,d="id"===e.field,h=function(e){return(d?"value":e)||"Value"},v=function(e){return(d?"status":e)||"Status"},p=this.__tree__,y=!0===e.status;if("function"==typeof t){r=this.toTable(e);var b=[],g="array"!==e.type?0:1;for(o=(U="object"!==e.type?r.slice(g):r.rows.slice(0)).length,i=0;i<o;i++){var m=t.call(this,U[i],i);void 0!==m&&b.push(m)}return"object"===e.type?{cols:r.cols,rows:b}:("array"===e.type&&b.unshift(r[0]),b)}if("arrobj"===e.type||"objarr"===e.type){var _=[],O=p.role&&p.role.metric,w=function(){},x={},A=this,E=A.id,j=e.by&&-1!==E.indexOf(e.by)?e.by:null,S=!0===e.meta,D=void 0!==e.drop&&Array.isArray(e.drop)?e.drop:[],P=!0===e.comma,k=!0===e.bylabel,z=A.value.constructor,C=function(t){var r,i={},l=h(e.vlabel);return"objarr"===e.type&&(r=null===j&&n(z.name)?function(e){i[e]=e===l?z.from(t,(function(t){return t[e]})):t.map((function(t){return t[e]}))}:function(e){i[e]=t.map((function(t){return t[e]}))},Object.keys(t[0]).forEach(r),t=i),S?(i={},E.forEach((function(e){var t=A.Dimension(e);i[e]={label:t.label,role:t.role,categories:{id:t.id,label:A.Dimension(e,!1)}}})),{meta:{label:A.label,source:A.source,updated:A.updated,id:E,status:y,unit:e.unit,by:j,bylabel:k,drop:null!==j&&D.length>0?D:null,prefix:null!==j?B||"":null,comma:P,dimensions:i},data:t}):t};j&&(e.field="id");var N=(r=this.toTable({field:e.field,vlabel:e.vlabel,slabel:e.slabel,content:e.content,status:y})).shift();if(null===j&&e.unit&&O){if("id"!==e.content)for(var T=O.length;T--;){var R=this.Dimension(O[T]);x[O[T]]={};for(var F=R.length;F--;)x[O[T]][R.Category(F).label]=R.id[F]}w=function(t,n){if(-1!==O.indexOf(t)){var r=p.dimension[t].category;r.unit?I.unit=r.unit["id"!==e.content?x[t][n]:n]:I.unit=null}},e.unit=!0}else e.unit=!1;for(o=r.length,i=0;i<o;i++){var I={};for(l=r[i].length;l--;)I[N[l]]=r[i][l],w(N[l],r[i][l]);_.push(I)}if(P&&_.forEach((function(e){null!==e.value&&(e.value=(""+e.value).replace(".",","))})),null!==j){var J,L={},U=[],q={},B=void 0!==e.prefix?e.prefix:"";D.forEach((function(e,t){(!A.Dimension(e)||A.Dimension(e).length>1)&&(D[t]="")}));var V=E.filter((function(e){return e!==j&&-1===D.indexOf(e)})),M=A.Dimension(j);for(var H in"id"!==e.content?k?J=function(e,t,n){e[t][B+n[j]]=n.value}:(M.Category().forEach((function(e,t){q[e.label]=M.id[t]})),J=function(e,t,n){e[t][B+q[n[j]]]=n.value}):J=function(e,t,n){e[t][B+n[j]]=n.value},_.forEach((function(e){var t=function(e,t){var n=[];return t.forEach((function(t){n.push(e[t])})),n.join("\t")}(e,V);void 0===L[t]&&(L[t]=function(e,t){var n={};return t.forEach((function(t){n[t]=e[t]})),n}(e,V)),J(L,t,e,j)})),L)U.push(L[H]);return y=!1,C(U)}return C(_)}if("object"===e.type){var G="number"==typeof this.value[0]||null===this.value[0]?"number":"string";s=function(e,t){var n=d&&e||t||e;re.push({id:e,label:n,type:"string"})},u=function(e,t,n){var r=h(e),i=v(t);n&&re.push({id:"status",label:i,type:"string"}),re.push({id:"value",label:r,type:G})},c=function(e){pe.push({v:e})},f=function(e){pe.push({v:e}),ie.push({c:pe})}}else s=function(e,t){var n=d&&e||t||e;re.push(n)},u=function(e,t,n){var r=h(e),i=v(t);n&&re.push(i),re.push(r),ne.push(re)},c=function(e){pe.push(e)},f=function(e){pe.push(e),ne.push(pe)};var K=p.dimension,Q=p.id||K.id,W=p.size||K.size,X=Q.length;if(X!=W.length)return!1;var Y=[],Z=1,$=(T=1,[]),ee=[],te=[],ne=[],re=[],ie=[];for(i=0;i<X;i++){var le=Q[i];s(le,K[le].label),Z*=W[i],T*=W[i];var ae=[];for(l=0;l<W[i];l++)for(var oe in K[Q[i]].category.index)if(K[Q[i]].category.index[oe]===l){var se="id"!==e.content&&K[Q[i]].category.label?K[Q[i]].category.label[oe]:oe;ae.push(se)}Y.push(ae),$.push(T)}for(u(e.vlabel,e.slabel,y),o=Y.length,i=0;i<o;i++){for(var ue=[],ce=0,fe=Y[i].length;ce<fe;ce++)for(var de=0;de<Z/$[i];de++)ue.push(Y[i][ce]);ee.push(ue)}for(o=ee.length,i=0;i<o;i++){var he=[],ve=0;for(a=0;a<Z;a++)he.push(ee[i][ve]),++ve===ee[i].length&&(ve=0);te.push(he)}for(a=0;a<Z;a++){var pe=[];o=ee.length;for(var ye=0;ye<o;ye++)c(te[ye][a]);y&&c(this.status?this.status[a]:null),f(this.value[a])}return"object"===e.type?{cols:re,rows:ie}:ne},e.prototype.node=function(){return this.__tree__},e.prototype.toString=function(){return this.class},String.prototype.capitalize=function(){return this.charAt(0).toUpperCase()+this.slice(1)};var g="3.5.0";export{c as datalist,h as fromCSV,v as fromSDMX,d as fromTable,p as join,u as tbrowser,b as toCSV,g as version};