@epam/statgpt-sdmx-toolkit 0.2.0-rc.42 → 0.2.0-rc.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=e=>{if(e!=null){const t=e.split("=");return t.length===1?e:t[1]}},D=e=>{if(e==null)return{};const t=y(e),n={agency:"",id:"",version:""};return t&&(t.includes(":")&&(n.agency=t.split(":")[0],n.id=t.split(":")[1].split("(")[0]),t.includes("(")&&t.includes(")")&&(n.version=t.split("(")[1]?.split(")")[0])),n},Ae=e=>{const[t,n]=e.split(")."),{agency:s,id:r,version:o}=D(t+")");return{childId:n,agency:s,id:r,version:o}},yt=(e,t,n)=>{const s=t===""?"":`(${t})`;return`${n}:${e}${s}`};var P=(e=>(e.DESCENDANTS="descendants",e.NONE="none",e.ALL="all",e))(P||{}),J=(e=>(e.EXACT="exact",e.AVAILABLE="available",e))(J||{});const St=(e="",t="",n="")=>`sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;class Tt{constructor(t){this.client=t}async getConstraints(t,n){const{agency:s,id:r,version:o}=D(t),i={filters:n||[],mode:J.AVAILABLE,references:P.NONE},c=St(s,r,o);return await this.client.postRequest(c,{body:i})}}var A=(e=>(e.CSV="csv",e.JSON="json",e.XML="xml",e))(A||{}),ye=(e=>(e.ID="id",e.NAME="name",e.ID_NAME="both",e))(ye||{}),Se=(e=>(e.FULL_DATASET="full",e.DATA_IN_TABLE="query",e))(Se||{});const Te=(e,t)=>{switch(e){case A.CSV:return T("application/vnd.sdmx.data+csv;version=2.0.0",t);case A.XML:return T("application/vnd.sdmx.data+xml;version=3.0.0",t);case A.JSON:return T(`application/${e}`,t);default:return T("application/vnd.sdmx.data+csv;version=2.0.0",t)}},T=(e,t)=>`${e}; labels=${t}`;var X=(e=>(e.REFERENCE_PARTIAL="referencepartial",e.FULL="full",e))(X||{});const Rt="all",Re="sdmx/3.0/data/dataflow",ve="&",ce=":",vt="=",we="+",wt=",",Ie="*",G=(e,t,n)=>{const{filterKey:s,timeFilter:r}=n,{agency:o,id:i,version:c}=D(e),a=[r||"",t].filter(d=>!!d).join(ve);return`${`${Re}/${o}/${i}/${c}`}/${s||Ie}?${a}`},It=(e="",t="",n="",s=P.DESCENDANTS)=>`sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${X.REFERENCE_PARTIAL}`;class Pt{constructor(t){this.client=t}async getDataSet(t,n){const{agency:s,id:r,version:o}=D(t);return await this.client.getRequest(It(s,r,o,n))}async getDatasetData(t,n){const s=new URLSearchParams({includeHistory:"false",limit:"1000",attributes:Rt,dimensionAtObservation:"TIME_PERIOD"}).toString(),r=G(t,s,n);return await this.client.getRequest(r)}async downloadDataSet(t,n,s,r,o,i,c=!1){const a=new URLSearchParams({format:n,compress:"false",attributes:c?"all":"none",limit:"1000"}).toString(),u=G(t,a,o);return this.client.streamRequest(u,{method:"GET",headers:{Accept:Te(n,r),"Accept-language":s}},i)}}const Nt=(e,t)=>e.error||e.message||`${t.status} ${t.statusText}`,_t="application/json",$t="Content-Type",V="Api-Key",bt="X-CONVERSATION-ID",v="Ocp-Apim-Subscription-Key";class ue extends Error{constructor(t){super(t.message),this.isHttpError=!0,this.name="HttpError",this.code=t.code,this.status=t.status,this.details=t.details}}const R=e=>isNaN(Date.parse(e))?null:new Date(e),K=(e,t,n)=>{const s={[$t]:t?.contentType||_t};return t?.jwt&&(s.Authorization=`Bearer ${t.jwt}`),t?.chatReference&&(s[bt]=t.chatReference),{...s,...n}},Ot=e=>{const t={...e};return t[V]&&(t[V]=t[V].substring(0,8)+"...[REDACTED]"),t.Authorization&&(t.Authorization="Bearer [REDACTED]"),t[v]&&(t[v]=t[v].substring(0,8)+"...[REDACTED]"),t},de=async(e,t,n)=>await fetch(e,{method:n.method||"GET",headers:t,body:n.body?JSON.stringify(n.body):void 0}),Ct=async(e,t,n)=>await fetch(e,{method:n.method,headers:t,body:n?.isFormData&&typeof n?.body=="string"?n.body:JSON.stringify(n.body),signal:n?.signal});class Lt{constructor(){this.decoder=new TextDecoder}async streamChat(t,n,s={},r){const{onMessage:o,onError:i,onComplete:c,signal:a}=s;try{const u=await this.initializeStreamRequest(t,n,a,r);await this.processStreamData(u,o),c?.()}catch(u){this.handleStreamError(u,i)}}async initializeStreamRequest(t,n,s,r){const o=K(void 0,{jwt:r}),i=await Ct(t,{Accept:"text/event-stream",...o},{method:"POST",body:n,signal:s});if(!i.ok){const c=await i.text();let a={};try{a=JSON.parse(c)}catch{a.error="Failed to parse error body"}throw new ue({status:i.status,message:a.error??"No response body"})}if(!i.body)throw new ue({message:"No response body",status:i.status});return i.body.getReader()}async processStreamData(t,n){let s="";try{for(;;){const{done:r,value:o}=await t.read();if(r){s.trim()&&this.parseSSEDataLine(s,n);break}const i=this.decoder.decode(o,{stream:!0});s+=i;const c=s.split(`
2
- `);s=c.pop()||"";for(const a of c)this.parseSSEDataLine(a,n)}}finally{t.releaseLock()}}handleStreamError(t,n){const s=t instanceof Error?t:new Error(String(t));throw n?.(s),s}parseSSEDataLine(t,n){const s=t.trim();if(!(!s||s.startsWith(":"))&&s.startsWith("data: ")){const r=s.slice(6);if(r==="[DONE]"){console.info("SSE: Stream completed");return}let o;try{o=JSON.parse(r)}catch(i){console.error(`Failed to parse SSE data: ${r} ${i}`)}n?.(o)}}}new Lt;class Mt{constructor(t){this.config=t,console.info("SdmxApiClient initialized",{apiUrl:t.apiUrl||"NOT SET"})}async getRequest(t,n){return this.request(t,{...n,method:"GET"})}async postRequest(t,n){return this.request(t,{...n,method:"POST"})}async streamRequest(t,n,s){const r=`${this.config.apiUrl}/${t}`,o={...K(void 0,{jwt:this.config.jwt}),...n.headers};this.config.apiKey!=null&&(o[v]=this.config.apiKey);const i=new ReadableStream({async start(a){try{const u=await de(r,o,n);if(!u.ok){const g=await u.text();throw console.error(`Fetch failed! Status: ${u.status}, Body: ${g}`),new Error(`Fetch failed with status ${u.status}`)}const d=u.body?.getReader();if(!d)throw new Error("Failed to create stream reader");const l=new Uint8Array([239,187,191]);a.enqueue(l);const m=async()=>{const{done:g,value:h}=await d.read();g?a.close():(a.enqueue(h),await m())};m()}catch(u){a.error(u)}}}),c=new Headers({"Content-Disposition":`attachment; filename=${encodeURIComponent(s)}`});return new Response(i,{headers:c})}async request(t,n){const s=Date.now(),r=t.includes("availability")&&this.config.constrainsApiUrl?`${this.config.constrainsApiUrl}/${t}`:`${this.config.apiUrl}/${t}`,o={...K(void 0,{jwt:this.config.jwt}),...n.headers};this.config.apiKey!=null&&(o["Ocp-Apim-Subscription-Key"]=this.config.apiKey),this.addInfoRequestLog("API Request",r,n,o);try{const i=await de(r,o,n),c=Date.now()-s;let a;const u=await i.text();try{a=u?JSON.parse(u):{}}catch{if(this.addErrorRequestParsing(r,n,i,c,u),!i.ok)throw new Error(`API request failed: ${i.status} ${i.statusText} - ${u.substring(0,100)}`);a={data:u}}if(!i.ok){this.addErrorRequestLog(r,n,i,c,a);const d=Nt(a,i);throw new Error(`API request failed: ${d}`)}return a}catch(i){const c=Date.now()-s;throw console.error("API Request Exception",{method:n.method,url:r,duration:`${c}ms`,error:i instanceof Error?i.message:String(i)}),i}}addInfoRequestLog(t,n,s,r){const o={method:s.method||"GET",url:n,headers:Ot(r)};s.body&&(o.body=s.body),console.info(t,o)}addErrorRequestLog(t,n,s,r,o){console.error("API Request Failed",{method:n.method,url:t,status:s.status,statusText:s.statusText,duration:`${r}ms`,response:o})}addErrorRequestParsing(t,n,s,r,o){console.error("API Response Parse Error",{method:n.method,url:t,status:s.status,statusText:s.statusText,duration:`${r}ms`,responseText:o.substring(0,200),error:"Response is not valid JSON"})}}const Ut=["FREQ","FREQUENCY"];var Pe=(e=>(e.CONDITIONAL="Conditional",e.MANDATORY="Mandatory",e))(Pe||{}),N=(e=>(e.DIMENSION="Dimension",e.MEASURE_DIMENSION="MeasureDimension",e.TIME_DIMENSION="TimeDimension",e))(N||{}),Ne=(e=>(e.UNBOUNDED="unbounded",e))(Ne||{});const _e=(e,t)=>{const n=e?.data?.dataSets?.[0],r=e?.data?.structures?.[0]?.attributes?.dimensionGroup||[],o=n?.dimensionGroupAttributes,i={};for(const c of r){const a=c.relationship.dimensions,{codedSeriesKey:u,decodedSeriesKey:d}=Z(e,t,a);i[c.id]={values:o?.[u]||[],decodedSeriesKey:d,codedSeriesKey:u}}return i},Z=(e,t,n)=>{const s=e?.data?.structures?.[0],r=[...s?.dimensions.series||[],...s?.dimensions.observation||[]],o=new Array(r?.length),i=new Array(r?.length);return n?.forEach(c=>{const a=r?.findIndex(l=>l.id===c)||0,u=t[a],d=r[a].values.findIndex(l=>l.id===u||l.value===u)||0;o[a]=d>=0?d:u,i[a]=u}),{codedSeriesKey:o.join(":"),decodedSeriesKey:i.join(":")}},Wt=(e,t,n)=>{const s=e?.data?.dataSets?.[0],r=e?.data?.structures?.[0],o=(r?.attributes?.dimensionGroup||[]).filter(l=>l.relationship.dimensions?.length===1&&l.relationship.dimensions.includes(t||"")),i=s?.dimensionGroupAttributes,c=[...r?.dimensions.series||[],...r?.dimensions.observation||[]],a=c?.findIndex(l=>l.id===t),u=new Array(c?.length);u[a]=n||"";const d={};for(const l of o){const m=l.relationship.dimensions,{codedSeriesKey:g,decodedSeriesKey:h}=Z(e,u,m);d[l.id]={values:i?.[g]||[],decodedSeriesKey:h,codedSeriesKey:g}}return d},$e=(e,t)=>{if(t==null)return;const n=e.values?.[t];return n??(t instanceof Array?{values:t}:{value:t.toString()})},be="Observation",xt=e=>{const t=e?.data?.dataSets,n=e?.data?.structures?.[0];if(!t||!n)return[];const s=n.attributes,r=n.dimensions,o=s?.dimensionGroup||[],i=t[0].series||t[0].observations,c=r.series?.length?r.series:r.observation,a=[];for(const u in i){const d=[],{name:l,parsedTimeSeriesValue:m}=Oe(u,c),g=i[u],h=g.attributes||[];if(Object.keys(g).length===0){a.push({name:l,parsedTimeSeriesValue:m,values:d,attributes:[],dataSetAttrs:[]});continue}d.push(...Qt(g,n));const k=w(s?.series||[],p=>h[p]),F=kt(n.attributes?.dataSet||[],t[0].attributes?.filter(p=>p!=null)||[]),q=_e(e,m),B=o.map((p,Dt)=>{const ae=q[p.id],At=$e(p,ae.values[Dt]);return{attribute:p,dimensionGroupValue:At,dimensionGroupData:ae}});a.push({name:l,parsedTimeSeriesValue:m,values:d,attributes:k,dataSetAttrs:F,dimensionGroupAttributes:B})}return a},Oe=(e,t)=>{const n=e.split(new RegExp("(?<!\\|):(?!\\||$)")),s=[];for(let r=0;r<n.length;r++){const o=t?.[r],i=Number(n[r]);if(i<0||o==null)continue;const c=o.values[i];if(c==null){s.push(n[r].replace("|:",":"));continue}s.push(c?.id||c?.value||"")}return{name:Ce(s),parsedTimeSeriesValue:s}},w=(e,t)=>{const n=[];for(let s=0;s<e.length;s++){const r=e[s],o=t(s),i=o!=null&&r.values!=null?Yt(o,r):void 0;n.push({name:r.id,value:i})}return n},Yt=(e,t)=>{const n=t.values[e];return n==null?typeof e=="object"?e:e.toString():n?.id||n?.value||n?.ids||n?.values},Ce=e=>e.map(t=>t?Le(t):"").join("."),Le=e=>e.replace(/\./g,"|.").replace(/:/g,"|:"),Qt=(e,t)=>{const n=t.measures?.observation?.length;if(e.observations==null)return[{values:le(e,t.measures),obsAttributes:w(t.attributes?.observation||[],i=>e[i+n]),dimensionAtObservation:be}];const s=e.observations,r=t.dimensions.observation?.[0],o=[];for(const i in s){const c=r?.values[i];o.push({dimensionAtObservation:c?.value||c?.id,values:le(s[i],t.measures),obsAttributes:w(t.attributes?.observation||[],a=>s[i][a+n])})}return o},le=(e,t)=>t?.observation?.map((n,s)=>({name:n.id,value:e[s]}))||[],kt=(e,t)=>e.reduce((n,s,r)=>{const o=t[r];return Ft(n,s,o,""),n},[]),Ft=(e,t,n,s)=>{const r=n!=null?t?.values?.length>0?t.values[n]?.id||t.values[n]?.value:String(n):s;e.push({name:t.id,value:r||""})},Me=/^[0-9][0-9][0-9][0-9]-Q[1-4]$/,Ue=/^[0-9][0-9][0-9][0-9]-W[0-9][0-9]?$/,We=/^[0-9][0-9][0-9][0-9]-S[1-2]$/,xe=/^[0-9][0-9][0-9][0-9]$/,Ye=/^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/,Qe=/^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/,_=e=>xe.exec(e),$=e=>!!_(e),ke=e=>We.exec(e),b=e=>!!ke(e),O=e=>Qe.exec(e),C=e=>!!O(e),L=e=>Me.exec(e),M=e=>!!L(e),Fe=e=>Ye.exec(e),qe=e=>!!Fe(e),Be=e=>Ue.exec(e),U=e=>!!Be(e),ee=1440*60*1e3,te=7*ee;function ne(e){const t=`${e}-01-01`,n=new Date(t);if(n.getDay()!==4){const r=1+(4-n.getDay()+7)%7;n.setMonth(0,r)}return n}function qt(e){const t=new Date(e),s=-((t.getDay()+6)%7)+3;return t.setDate(t.getDate()+s),new Date(t.valueOf())}function j(e,t="W"){const n=`${e}-12-31`,s=S(new Date(n),t);if(s.weekYear===e)return s.weekNumber;const r=`${e}-12-24`;return S(new Date(r),t).weekNumber}function se(e,t,n="W"){return`${e}-${n}${t<10?"0"+t:t}`}function S(e,t="W"){const n=qt(e),s=n.getFullYear(),r=ne(s),o=1+Math.ceil((n.getTime()-r.getTime())/te);return{code:se(s,o,t),weekNumber:o,weekYear:s}}function Ve(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te-3*ee;return new Date(r)}function Ge(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te+3*ee;return new Date(r)}function re(e){return $(e)?Bt(e):b(e)?Gt(e):M(e)?jt(e):C(e)?zt(e):U(e)?Ve(e):Xt(e)}function oe(e){return $(e)?Vt(e):b(e)?Kt(e):M(e)?Ht(e):C(e)?Jt(e):U(e)?Ge(e):Zt(e)}function Bt(e){const t=_(e);if(t)return new Date(Number(t[0]),0,1)}function Vt(e){const t=_(e);if(t)return new Date(Number(t[0])+1,0,1)}function Gt(e){const[t,n]=e.split("-S");switch(+n){case 1:return new Date(+t,0,1);case 2:return new Date(+t,6,1)}}function Kt(e){const[t,n]=e.split("-S");switch(+n){case 1:return new Date(+t,6,1);case 2:return new Date(+t+1,0,1)}}function jt(e){const t=L(e);if(!t)return;const[n,s]=t[0].split("-Q");switch(+s){case 1:return new Date(+n,0,1);case 2:return new Date(+n,3,1);case 3:return new Date(+n,6,1);case 4:return new Date(+n,9,1)}}function Ht(e){const t=L(e);if(!t)return;const[n,s]=t[0].split("-Q");switch(+s){case 1:return new Date(+n,3,1);case 2:return new Date(+n,6,1);case 3:return new Date(+n,9,1);case 4:return new Date(+n+1,0,1)}}function zt(e){const t=O(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s-1,1)}function Jt(e){const t=O(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s,1)}const Xt=e=>new Date(`${e}T00:00:00`),Zt=e=>{const t=new Date(`${e}T23:59:00`);return t.setMinutes(t.getMinutes()+1),t},en=1,Ke=(e,t,n,s=!0,r="Q")=>{const o=[],i=t&&t>3?an(t,s):1,c=n?Math.floor((n-1)/3):4;for(let a=i;a<=c;a++)o.push(`${e}-${r}${a}`);return o},je=(e,t,n,s="S")=>{const r=[];return(t||1)<7&&(n||12)>6&&r.push(`${e}-${s}1`),n==null&&r.push(`${e}-${s}2`),r},tn=e=>Math.ceil(e/3),He=(e,t,n="M")=>`${e}-${n}${t.toString().padStart(2,"0")}`,nn=(e,t,n="M")=>{const s=[];for(let r=t;r<=12;r++)s.push(He(e,r,n));return s},sn=(e,t,n,s="M")=>{const r=[];for(let o=t;o<n;o++)r.push(He(e,o,s));return r},ze=(e,t,n,s="M")=>{const r=t||1,o=n==null,i=n||12;return o?nn(e,r,s):sn(e,r,i,s)},rn=(e,t,n="M")=>{switch(t){case 0:return[`${e}-${n}01`,`${e}-${n}02`,`${e}-${n}03`];case 1:return[`${e}-${n}04`,`${e}-${n}05`,`${e}-${n}06`];case 2:return[`${e}-${n}07`,`${e}-${n}08`,`${e}-${n}09`];case 3:return[`${e}-${n}10`,`${e}-${n}11`,`${e}-${n}12`];default:return[]}},Je=(e,t)=>{const n=f(t,!0),s=f(e),r=n.getFullYear(),o=s.getFullYear(),i=n.getTime()<=s.getTime()?o+en-r:0;return Array.from({length:i},(a,u)=>r+u)},f=(e,t=!1)=>{const n=on(e,t);return n?(n.getTimezoneOffset()>0&&n.setMinutes(n.getMinutes()+n.getTimezoneOffset()),n):new Date},on=(e,t=!1)=>{const n=Number(e);return e.toString().length!==13?t?re(e):oe(e):isNaN(n)?new Date(`${e}T00:00:00.000Z`):new Date(n)},an=(e,t)=>t?Math.floor((e+1)/3):Math.ceil((e+1)/3),cn=(e,t)=>{const n=ge(e)-ge(t);if(n===0&&e!==t){const s=me(e),r=me(t);return s-r}return n},me=e=>$(e)?6:b(e)?5:M(e)?4:C(e)?3:U(e)?2:qe(e)?1:0,ge=(e,t=!1)=>(t?re(e):oe(e))?.getTime()||0;var W=(e=>(e.LAST_UPDATE_AT="lastUpdatedAt",e.SERIES_COUNT="series_count",e))(W||{}),Xe=(e=>(e.C="c",e))(Xe||{}),E=(e=>(e.EQUALS="eq",e.NOT_EQUALS="ne",e.LESS="lt",e.LESS_OR_EQUAL="le",e.GREATER="gt",e.GREATER_OR_EQUAL="ge",e.CONTAINS="co",e.NOT_CONTAINS="nc",e.STARTS="sw",e.ENDS="ew",e))(E||{}),Ze=(e=>(e.BOOLEAN="Boolean",e.DATE_TIME="DateTime",e.DECIMAL="Decimal",e.INTEGER="Integer",e.OBSERVATION_TIME_PERIOD="ObservationalTimePeriod",e.STRING="String",e.TIME="Time",e.TIME_RANGE="TimeRange",e.URI="URI",e))(Ze||{}),et=(e=>(e.ANNUAL="A",e.QUARTERLY="Q",e.MONTHLY="M",e))(et||{});function un(e){return e?.annotations?.find(t=>{if(t.id===W.LAST_UPDATE_AT)return t})?.value}const x=(e,t)=>e?.names&&e?.names[t]||e?.name,tt=(e,t,n)=>{if(!(!e||t?.has(e?.id))&&(t?.set(e?.id,e),e?.parent)){const s=n?.get(e?.parent);tt(s,t,n)}},nt=(e,t)=>{const n=new Map,s=new Map(e?.map(r=>[r.id,r]));return t?.forEach(r=>{tt(r,n,s)}),Array.from(n?.values())},st="time_period_end",rt="time_period_start",ot="TIME_PERIOD",dn=e=>{const t=e?.find(o=>o.id===rt),n=e?.find(o=>o.id===st),s=n?.title?new Date(n?.title):null;return{startPeriod:t?.title?new Date(t?.title):null,endPeriod:s}},ln=(e,t)=>e.id.localeCompare(t.id),mn=(e,t)=>e.memberValue.localeCompare(t.memberValue),gn=(e,t)=>{const n=new Array(e.length),s=e.map((i,c)=>[i,c]);s.sort((i,c)=>ln(i[0],c[0]));const r=[...t];r.sort(mn);let o=0;for(const i of s){const c=i[0];for(;o<r.length&&r[o].memberValue.localeCompare(c.id)<0;)o+=1;o<r.length&&r[o].memberValue===c.id&&(n[i[1]]=i[0])}return n.filter(i=>i!=null)},fn=e=>!!e?.some(t=>t.parent),En=(e,t,n,s,r=[])=>{let o=e||[];if(hn(n||[],t||"")){const i=(n||[])[0].cubeRegions?.find(({isIncluded:c})=>c);if(i){const c=i.memberSelection?.find(({componentId:a})=>a===t);c?o=o.length===0?(c.selectionValues||[]).map(({memberValue:a})=>({id:a,name:a})):gn(o,c.selectionValues):o=[]}}else r.length!==0&&(o=o.filter(({id:i})=>r.includes(i)));return fn(e)&&(o=nt(e,o)),o?.map(i=>({...i,name:s?x(i,s):i?.name}))},hn=(e,t)=>e!=null&&e.length>0&&t!=null,pn=e=>{const t=[];return e?.filters?.forEach(n=>{n.componentCode!==ot&&t.push({componentCode:n.componentCode,operator:E.EQUALS,value:n.values.join(",")})}),t},Dn=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,fe=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");const t=e.match(Dn);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},Ee=e=>e==="*"||e==="x"||e==="X",he=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},An=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],yn=(e,t)=>{if(Ee(e)||Ee(t))return 0;const[n,s]=An(he(e),he(t));return n>s?1:n<s?-1:0},pe=(e,t)=>{for(let n=0;n<Math.max(e.length,t.length);n++){const s=yn(e[n]||"0",t[n]||"0");if(s!==0)return s}return 0},Sn=(e,t)=>{const n=fe(e),s=fe(t),r=n.pop(),o=s.pop(),i=pe(n,s);return i!==0?i:r&&o?pe(r.split("."),o.split(".")):r||o?r?-1:1:0},Tn=(e,t,n)=>{Rn(n);const s=Sn(e,t);return it[n].includes(s)},it={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},De=Object.keys(it),Rn=e=>{if(De.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${De.join("|")}`)},I="+",Y=(e,t)=>{const{agency:n,id:s,version:r}=D(e),o=t.filter(a=>a.agencyID===n&&a.id===s&&!a?.version?.includes(I));if(o.length===1)return o[0];if(!r?.includes(I))return o.find(a=>a.version===r);const i=o.map(a=>a.version),c=at(r,i);return o.find(a=>a.version===c[0])},at=(e,t)=>{const n=vn(e,t);return n.length>0?[n[0]]:[]},vn=(e,t)=>{const n=[];return t.forEach(s=>{ut(e,s)&&n.push(s)}),n},ct=e=>{const t=e.trim().replace(/\d+\+/,"*"),[n]=t.split("*");return new RegExp(`^${n}`)},ut=(e,t)=>{const n=e.trim().replace(/\+/,"");return ct(e).test(t)&&Tn(t,n,">=")},Q=(e,t)=>{const{concept:n}=dt(e,t);return n},dt=(e,t)=>{if(e==null)return{concept:void 0,scheme:void 0};const{childId:n,agency:s,id:r,version:o}=Ae(e);if(o?.includes(I)){const i=Y(e,t);return{concept:H(i?.concepts||[],n),scheme:i}}for(const i of t)if(wn(i,r,s,o))return{concept:H(i?.concepts||[],n),scheme:i};return{concept:void 0,scheme:void 0}},H=(e,t)=>e?.find(n=>n.id===t),wn=(e,t,n,s)=>e.id===t&&e.agencyID===n&&e.version===s,In=(e=[],t=[],n)=>{const s=n?.conceptIdentity||"",r=Q(s,t),o=y(n?.localRepresentation?.enumeration),i=y(r?.coreRepresentation?.enumeration),c=o||i;if(c!=null)return Y(c,e)},Pn=(e,t,n,s)=>{const r=t?.find(o=>o?.id===e?.id)?.values;return n?.filter(o=>r?.some(i=>i.id===o.id))?.map(o=>({...o,name:s?x(o,s):o?.name}))||[]},lt=(e,t)=>{const n=t?.dataStructureComponents?.attributeList,s=e?.metadataStructureComponents?.metadataAttributeList;return n?.metadataAttributeUsages?.map(r=>{const o=s?.metadataAttributes?.find(i=>i?.id===r?.metadataAttributeReference);return{...o,attributeRelationship:r.attributeRelationship,isMandatory:Number(o?.minOccurs)>0}})},Nn=(e=[],t,n)=>{const s=y(t?.conceptIdentity)||"",r=Q(s,e);return n?x(r,n):r?.name??r?.id??t?.id};function z(e){return e?.dataStructures?.[0]?.dataStructureComponents?.dimensionList}function _n(e){return e?.data?.structures?.[0]?.dimensions?.series||[]}function $n(e){return e?.data?.structures?.[0]?.dimensions?.observation?.[0].values.map(t=>t.value).filter(t=>t!=null)||[]}function bn(e){return e.find(t=>t.type===N.TIME_DIMENSION)}const On=e=>{const t=new Map,n=e?.dataStructures?.[0],s=e?.metadataStructures?.[0],r=e?.conceptSchemes||[],o=e?.codelists||[];return e&&[...z(e)?.dimensions||[],...z(e)?.timeDimensions||[],...lt(s,n),...n?.dataStructureComponents?.attributeList?.attributes||[]].forEach(c=>{const a=Q(c?.conceptIdentity,r),u=c?.localRepresentation?.enumeration||a?.coreRepresentation?.enumeration,d=Y(u,o);c?.id&&(u?t.set(c?.id,{...d,name:a?.name,names:a?.names}):t.set(c?.id,{id:c?.id,name:a?.name,names:a?.names}))}),t},Cn=e=>e?.find(t=>t.id===W.SERIES_COUNT)?.title||"",Ln="/api/download",Mn=(e,t,n,s,r,o,i)=>{const c=new URLSearchParams({urn:e,format:t,compress:"false",filename:o,filters:JSON.stringify(r),attribute:s,language:n,isMetadata:i?"true":"none"}).toString(),a=`${Ln}?${c}`;window.open(a,"_blank")},Un=(e,t)=>{const n=[];for(const s of e){if(s.type!==N.DIMENSION)continue;const r=t.find(o=>o.componentCode===s.id);r!=null&&r.values?.length>0?n.push(r.values?.join(we)):n.push("*")}return n.join(".")},mt=(e,t)=>{if(!e||!e.startPeriod&&!e.endPeriod)return null;const n=[],{startPeriod:s,endPeriod:r}=e;if(s&&n.push(`${E.GREATER_OR_EQUAL}${ce}${s.toISOString().split("T")[0]}`),r&&n.push(`${E.LESS_OR_EQUAL}${ce}${r.toISOString().split("T")[0]}`),n.length===0)return null;const o=t;return n.map(i=>`${encodeURIComponent(`c[${o}]`)}${vt}${encodeURIComponent(i)}`).join(ve)},Wn=(e,t)=>{const n=gt(e,t)||null;return n?mt(n,t?.id):null},gt=(e,t)=>{const n=t.id,s=e?.filters?.find(a=>a.componentCode===n);if(!s||!s.values)return null;const r=s.values?.filter(a=>!!a);if(!r.length)return null;const o=s.operator;if(o===E.LESS_OR_EQUAL||o===E.LESS)return{startPeriod:null,endPeriod:R(r[0])};if(o===E.GREATER_OR_EQUAL||o===E.GREATER)return{startPeriod:R(r[0]),endPeriod:null};const i=R(r[0]),c=R(r[1]);return{startPeriod:i,endPeriod:c}},ie=(e,t,n)=>{const s=f(t,!0),r=f(n),o=f(e,!0),i=f(e),c=s.getTime()>o.getTime()?s:o,a=r.getTime()<i.getTime()?r:i;return{start:c,end:a}},ft=(e,t,n,s="W")=>{const r=+e,{start:o,end:i}=ie(e,t,n);if(o.getTime()>i.getTime())return[];const c=S(o,s),a=c.weekYear===r?c.weekNumber:c.weekYear<r?1:j(r,s),u=S(i,s),d=u.weekYear===r?u.weekNumber:u.weekYear>r?j(r,s):1,l=[];if(a<d)for(let m=a;m<=d;m++)l.push(se(r,m,s));return l},xn=e=>{const t=new Date(e);return t.setMinutes(t.getMinutes()-t.getTimezoneOffset()),t.toISOString().slice(0,10)},Et=(e,t,n)=>{const{start:s,end:r}=ie(e,t,n);if(s.getTime()>r.getTime())return[];const o=[],i=new Date(s.getFullYear(),s.getMonth(),s.getDate()),c=new Date(r.getFullYear(),r.getMonth(),r.getDate());for(;i.getTime()<c.getTime();){const a=xn(i);o.push(a),i.setDate(i.getDate()+1)}return o},ht=e=>({isDailyExist:!!e?.some(({memberValue:t})=>t==="D"),isWeeklyExist:!!e?.some(({memberValue:t})=>t==="W"),isMonthlyExist:!!e?.some(({memberValue:t})=>t==="M"),isQuarterlyExist:!!e?.some(({memberValue:t})=>t==="Q"),isSemiAnnualExist:!!e?.some(({memberValue:t})=>t==="S"),isYearlyExist:!!e?.some(({memberValue:t})=>t==="A"||t==="Y")}),Yn=(e,t,n,s)=>{const r=s===0?f(t.toString(),!0)?.getMonth()+1:void 0,o=s===e.length-1?f(n.toString())?.getMonth()+1||1:void 0;return{startMonth:r,endMonth:o}},pt=["FREQUENCY","FREQ"],Qn=(e,t)=>{const n=e?.[0]?.cubeRegions?.[0]?.memberSelection?.find(a=>pt.includes(a.componentId))?.selectionValues,s=ht(n||[]),r=t?.startPeriod?.getTime()||1,o=t?.endPeriod?.getTime()||1,i=Je(o,r),c=[];return i.forEach((a,u)=>{const d=[],{startMonth:l,endMonth:m}=Yn(i,new Date(r),new Date(o),u),{isDailyExist:g,isWeeklyExist:h,isMonthlyExist:k,isQuarterlyExist:F,isSemiAnnualExist:q,isYearlyExist:B}=s;B&&d.push(a.toString()),q&&d.push(...je(a,l,m)),F&&d.push(...Ke(a,l,m,!1)),k&&d.push(...ze(a,l,m)),h&&d.push(...ft(a,r.toString(),o.toString())),g&&d.push(...Et(a,r.toString(),o.toString())),c.push(...d)}),c};exports.Annotations=W;exports.AssignmentStatus=Pe;exports.AvailabilityApi=Tt;exports.DATASET_DATA_URL=Re;exports.DatasetApi=Pt;exports.DimensionType=N;exports.DownloadType=Se;exports.FREQUENCY_DIMENSION_ID=Ut;exports.FREQUENCY_DIM_ID=pt;exports.FileColumnsAttribute=ye;exports.GET_v3_FILTER_ALL=Ie;exports.GET_v3_FILTER_AND=wt;exports.GET_v3_FILTER_OR=we;exports.OBSERVATION_KEY=be;exports.OccurrenceType=Ne;exports.Periods=et;exports.RepresentationTextType=Ze;exports.SDMX_DATA_QUERY_PARAMS=Xe;exports.SINGLE_WILDCARD_SYMBOL=I;exports.SdmxApiClient=Mt;exports.SdmxAvailabilityMode=J;exports.SdmxDataFormat=A;exports.SdmxDetails=X;exports.SdmxReferences=P;exports.SeriesFilterOperator=E;exports.TIME_PERIOD=ot;exports.TIME_PERIOD_END=st;exports.TIME_PERIOD_START=rt;exports.dailyPattern=Ye;exports.decodeDimensionId=Le;exports.findCodelistByDimension=In;exports.generateDatasetDataRequest=G;exports.generateShortUrn=yt;exports.getAdditionalColumns=Qn;exports.getAnnotationPeriod=dn;exports.getArtifactByUrnWithWildCard=Y;exports.getAttachedDimensionsSeriesByDimension=Wt;exports.getAttachedDimensionsSeriesByTsId=_e;exports.getAttachedDimensionsSeriesKey=Z;exports.getAttributeValueFromDataQueryResponse=$e;exports.getAvailableCodes=Pn;exports.getAvailableCodesFromConstrains=En;exports.getChildParsedUrn=Ae;exports.getConcept=Q;exports.getConceptByUrn=H;exports.getConceptWithScheme=dt;exports.getConvertedMetaAttributes=lt;exports.getDailyRegExp=Fe;exports.getDaysColumns=Et;exports.getDimensionTitle=Nn;exports.getDimensions=z;exports.getFilteredItemsWithParents=nt;exports.getFiltersDtoFromDataQuery=pn;exports.getISOWeek=S;exports.getKeyFromUrn=y;exports.getLastUpdatedTime=un;exports.getLastWeekNumberOfYear=j;exports.getLocalizedName=x;exports.getMonthlyData=ze;exports.getMonthlyDataByQuarter=rn;exports.getMonthlyRegExp=O;exports.getParsedEndPeriodDate=oe;exports.getParsedResponse=xt;exports.getParsedStartPeriodDate=re;exports.getPeriodDate=f;exports.getPeriods=ht;exports.getQuarterByMonth=tn;exports.getQuarterlyRegExp=L;exports.getQuartersData=Ke;exports.getQueryTimePeriodFilters=mt;exports.getRequestAcceptHeader=Te;exports.getResolvedVersionBySingleWildcard=at;exports.getSemiAnnualData=je;exports.getSemiAnnuallyRegExp=ke;exports.getSeriesAttributes=w;exports.getSeriesName=Oe;exports.getStructureComponentsMap=On;exports.getStructureDimensions=_n;exports.getTimeDimension=bn;exports.getTimePeriods=$n;exports.getTimeQueryFilter=Wn;exports.getTimeRangeFromAttachment=gt;exports.getTimeSeriesCount=Cn;exports.getTimeSeriesFilterKey=Un;exports.getTimeSeriesId=Ce;exports.getWeekCode=se;exports.getWeeklyPeriodEndDate=Ge;exports.getWeeklyPeriodStartDate=Ve;exports.getWeeklyRegExp=Be;exports.getWeeksColumns=ft;exports.getWildCardRegexp=ct;exports.getYearPeriod=ie;exports.getYearlyRegExp=_;exports.getYears=Je;exports.isDaily=qe;exports.isMonthly=C;exports.isQuarterly=M;exports.isSemiAnnually=b;exports.isWeekly=U;exports.isWildCardVersionCorrect=ut;exports.isYearly=$;exports.monthlyPattern=Qe;exports.openDownloadWindow=Mn;exports.quarterPattern=Me;exports.semiAnnuallyPattern=We;exports.sortPeriods=cn;exports.splitUrn=D;exports.weeklyPattern=Ue;exports.yearlyPattern=xe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=e=>{if(e!=null){const t=e.split("=");return t.length===1?e:t[1]}},D=e=>{if(e==null)return{};const t=y(e),n={agency:"",id:"",version:""};return t&&(t.includes(":")&&(n.agency=t.split(":")[0],n.id=t.split(":")[1].split("(")[0]),t.includes("(")&&t.includes(")")&&(n.version=t.split("(")[1]?.split(")")[0])),n},Ae=e=>{const[t,n]=e.split(")."),{agency:s,id:r,version:o}=D(t+")");return{childId:n,agency:s,id:r,version:o}},ye=(e,t,n)=>{const s=t===""?"":`(${t})`;return`${n}:${e}${s}`};var P=(e=>(e.DESCENDANTS="descendants",e.NONE="none",e.ALL="all",e))(P||{}),J=(e=>(e.EXACT="exact",e.AVAILABLE="available",e))(J||{});const St=(e="",t="",n="")=>`sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;class Tt{constructor(t){this.client=t}async getConstraints(t,n){const{agency:s,id:r,version:o}=D(t),i={filters:n||[],mode:J.AVAILABLE,references:P.NONE},c=St(s,r,o);return await this.client.postRequest(c,{body:i})}}var A=(e=>(e.CSV="csv",e.JSON="json",e.XML="xml",e))(A||{}),Se=(e=>(e.ID="id",e.NAME="name",e.ID_NAME="both",e))(Se||{}),Te=(e=>(e.FULL_DATASET="full",e.DATA_IN_TABLE="query",e))(Te||{});const Re=(e,t)=>{switch(e){case A.CSV:return T("application/vnd.sdmx.data+csv;version=2.0.0",t);case A.XML:return T("application/vnd.sdmx.data+xml;version=3.0.0",t);case A.JSON:return T(`application/${e}`,t);default:return T("application/vnd.sdmx.data+csv;version=2.0.0",t)}},T=(e,t)=>`${e}; labels=${t}`;var X=(e=>(e.REFERENCE_PARTIAL="referencepartial",e.FULL="full",e))(X||{});const Rt="all",ve="sdmx/3.0/data/dataflow",Ie="&",ce=":",vt="=",we="+",It=",",Pe="*",G=(e,t,n)=>{const{filterKey:s,timeFilter:r}=n,{agency:o,id:i,version:c}=D(e),a=[r||"",t].filter(d=>!!d).join(Ie);return`${`${ve}/${o}/${i}/${c}`}/${s||Pe}?${a}`},wt=(e="",t="",n="",s=P.DESCENDANTS)=>`sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${X.REFERENCE_PARTIAL}`;class Pt{constructor(t){this.client=t}async getDataSet(t,n){const{agency:s,id:r,version:o}=D(t);return await this.client.getRequest(wt(s,r,o,n))}async getDatasetData(t,n){const s=new URLSearchParams({includeHistory:"false",limit:"1000",attributes:Rt,dimensionAtObservation:"TIME_PERIOD"}).toString(),r=G(t,s,n);return await this.client.getRequest(r)}async downloadDataSet(t,n,s,r,o,i,c=!1){const a=new URLSearchParams({format:n,compress:"false",attributes:c?"all":"none",limit:"1000"}).toString(),u=G(t,a,o);return this.client.streamRequest(u,{method:"GET",headers:{Accept:Re(n,r),"Accept-language":s}},i)}}const Nt=(e,t)=>e.error||e.message||`${t.status} ${t.statusText}`,_t="application/json",$t="Content-Type",V="Api-Key",bt="X-CONVERSATION-ID",v="Ocp-Apim-Subscription-Key";class ue extends Error{constructor(t){super(t.message),this.isHttpError=!0,this.name="HttpError",this.code=t.code,this.status=t.status,this.details=t.details}}const R=e=>isNaN(Date.parse(e))?null:new Date(e),K=(e,t,n)=>{const s={[$t]:t?.contentType||_t};return t?.jwt&&(s.Authorization=`Bearer ${t.jwt}`),t?.chatReference&&(s[bt]=t.chatReference),{...s,...n}},Ot=e=>{const t={...e};return t[V]&&(t[V]=t[V].substring(0,8)+"...[REDACTED]"),t.Authorization&&(t.Authorization="Bearer [REDACTED]"),t[v]&&(t[v]=t[v].substring(0,8)+"...[REDACTED]"),t},de=async(e,t,n)=>await fetch(e,{method:n.method||"GET",headers:t,body:n.body?JSON.stringify(n.body):void 0}),Mt=async(e,t,n)=>await fetch(e,{method:n.method,headers:t,body:n?.isFormData&&typeof n?.body=="string"?n.body:JSON.stringify(n.body),signal:n?.signal});class Ct{constructor(){this.decoder=new TextDecoder}async streamChat(t,n,s={},r){const{onMessage:o,onError:i,onComplete:c,signal:a}=s;try{const u=await this.initializeStreamRequest(t,n,a,r);await this.processStreamData(u,o),c?.()}catch(u){this.handleStreamError(u,i)}}async initializeStreamRequest(t,n,s,r){const o=K(void 0,{jwt:r}),i=await Mt(t,{Accept:"text/event-stream",...o},{method:"POST",body:n,signal:s});if(!i.ok){const c=await i.text();let a={};try{a=JSON.parse(c)}catch{a.error="Failed to parse error body"}throw new ue({status:i.status,message:a.error??"No response body"})}if(!i.body)throw new ue({message:"No response body",status:i.status});return i.body.getReader()}async processStreamData(t,n){let s="";try{for(;;){const{done:r,value:o}=await t.read();if(r){s.trim()&&this.parseSSEDataLine(s,n);break}const i=this.decoder.decode(o,{stream:!0});s+=i;const c=s.split(`
2
+ `);s=c.pop()||"";for(const a of c)this.parseSSEDataLine(a,n)}}finally{t.releaseLock()}}handleStreamError(t,n){const s=t instanceof Error?t:new Error(String(t));throw n?.(s),s}parseSSEDataLine(t,n){const s=t.trim();if(!(!s||s.startsWith(":"))&&s.startsWith("data: ")){const r=s.slice(6);if(r==="[DONE]"){console.info("SSE: Stream completed");return}let o;try{o=JSON.parse(r)}catch(i){console.error(`Failed to parse SSE data: ${r} ${i}`)}n?.(o)}}}new Ct;class Lt{constructor(t){this.config=t,console.info("SdmxApiClient initialized",{apiUrl:t.apiUrl||"NOT SET"})}async getRequest(t,n){return this.request(t,{...n,method:"GET"})}async postRequest(t,n){return this.request(t,{...n,method:"POST"})}async streamRequest(t,n,s){const r=`${this.config.apiUrl}/${t}`,o={...K(void 0,{jwt:this.config.jwt}),...n.headers};this.config.apiKey!=null&&(o[v]=this.config.apiKey);const i=new ReadableStream({async start(a){try{const u=await de(r,o,n);if(!u.ok){const g=await u.text();throw console.error(`Fetch failed! Status: ${u.status}, Body: ${g}`),new Error(`Fetch failed with status ${u.status}`)}const d=u.body?.getReader();if(!d)throw new Error("Failed to create stream reader");const l=new Uint8Array([239,187,191]);a.enqueue(l);const m=async()=>{const{done:g,value:p}=await d.read();g?a.close():(a.enqueue(p),await m())};m()}catch(u){a.error(u)}}}),c=new Headers({"Content-Disposition":`attachment; filename=${encodeURIComponent(s)}`});return new Response(i,{headers:c})}async request(t,n){const s=Date.now(),r=t.includes("availability")&&this.config.constrainsApiUrl?`${this.config.constrainsApiUrl}/${t}`:`${this.config.apiUrl}/${t}`,o={...K(void 0,{jwt:this.config.jwt}),...n.headers};this.config.apiKey!=null&&(o["Ocp-Apim-Subscription-Key"]=this.config.apiKey),this.addInfoRequestLog("API Request",r,n,o);try{const i=await de(r,o,n),c=Date.now()-s;let a;const u=await i.text();try{a=u?JSON.parse(u):{}}catch{if(this.addErrorRequestParsing(r,n,i,c,u),!i.ok)throw new Error(`API request failed: ${i.status} ${i.statusText} - ${u.substring(0,100)}`);a={data:u}}if(!i.ok){this.addErrorRequestLog(r,n,i,c,a);const d=Nt(a,i);throw new Error(`API request failed: ${d}`)}return a}catch(i){const c=Date.now()-s;throw console.error("API Request Exception",{method:n.method,url:r,duration:`${c}ms`,error:i instanceof Error?i.message:String(i)}),i}}addInfoRequestLog(t,n,s,r){const o={method:s.method||"GET",url:n,headers:Ot(r)};s.body&&(o.body=s.body),console.info(t,o)}addErrorRequestLog(t,n,s,r,o){console.error("API Request Failed",{method:n.method,url:t,status:s.status,statusText:s.statusText,duration:`${r}ms`,response:o})}addErrorRequestParsing(t,n,s,r,o){console.error("API Response Parse Error",{method:n.method,url:t,status:s.status,statusText:s.statusText,duration:`${r}ms`,responseText:o.substring(0,200),error:"Response is not valid JSON"})}}const Ut=["FREQ","FREQUENCY"];var Ne=(e=>(e.CONDITIONAL="Conditional",e.MANDATORY="Mandatory",e))(Ne||{}),N=(e=>(e.DIMENSION="Dimension",e.MEASURE_DIMENSION="MeasureDimension",e.TIME_DIMENSION="TimeDimension",e))(N||{}),_e=(e=>(e.UNBOUNDED="unbounded",e))(_e||{});const $e=(e,t)=>{const n=e?.data?.dataSets?.[0],r=e?.data?.structures?.[0]?.attributes?.dimensionGroup||[],o=n?.dimensionGroupAttributes,i={};for(const c of r){const a=c.relationship.dimensions,{codedSeriesKey:u,decodedSeriesKey:d}=Z(e,t,a);i[c.id]={values:o?.[u]||[],decodedSeriesKey:d,codedSeriesKey:u}}return i},Z=(e,t,n)=>{const s=e?.data?.structures?.[0],r=[...s?.dimensions.series||[],...s?.dimensions.observation||[]],o=new Array(r?.length),i=new Array(r?.length);return n?.forEach(c=>{const a=r?.findIndex(l=>l.id===c)||0,u=t[a],d=r[a].values.findIndex(l=>l.id===u||l.value===u)||0;o[a]=d>=0?d:u,i[a]=u}),{codedSeriesKey:o.join(":"),decodedSeriesKey:i.join(":")}},Wt=(e,t,n)=>{const s=e?.data?.dataSets?.[0],r=e?.data?.structures?.[0],o=(r?.attributes?.dimensionGroup||[]).filter(l=>l.relationship.dimensions?.length===1&&l.relationship.dimensions.includes(t||"")),i=s?.dimensionGroupAttributes,c=[...r?.dimensions.series||[],...r?.dimensions.observation||[]],a=c?.findIndex(l=>l.id===t),u=new Array(c?.length);u[a]=n||"";const d={};for(const l of o){const m=l.relationship.dimensions,{codedSeriesKey:g,decodedSeriesKey:p}=Z(e,u,m);d[l.id]={values:i?.[g]||[],decodedSeriesKey:p,codedSeriesKey:g}}return d},be=(e,t)=>{if(t==null)return;const n=e.values?.[t];return n??(t instanceof Array?{values:t}:{value:t.toString()})},Oe="Observation",xt=e=>{const t=e?.data?.dataSets,n=e?.data?.structures?.[0];if(!t||!n)return[];const s=n.attributes,r=n.dimensions,o=s?.dimensionGroup||[],i=t[0].series||t[0].observations,c=r.series?.length?r.series:r.observation,a=[];for(const u in i){const d=[],{name:l,parsedTimeSeriesValue:m}=Me(u,c),g=i[u],p=g.attributes||[];if(Object.keys(g).length===0){a.push({name:l,parsedTimeSeriesValue:m,values:d,attributes:[],dataSetAttrs:[]});continue}d.push(...Qt(g,n));const k=I(s?.series||[],h=>p[h]),F=kt(n.attributes?.dataSet||[],t[0].attributes?.filter(h=>h!=null)||[]),q=$e(e,m),B=o.map((h,At)=>{const ae=q[h.id],yt=be(h,ae.values[At]);return{attribute:h,dimensionGroupValue:yt,dimensionGroupData:ae}});a.push({name:l,parsedTimeSeriesValue:m,values:d,attributes:k,dataSetAttrs:F,dimensionGroupAttributes:B})}return a},Me=(e,t)=>{const n=e.split(new RegExp("(?<!\\|):(?!\\||$)")),s=[];for(let r=0;r<n.length;r++){const o=t?.[r],i=Number(n[r]);if(i<0||o==null)continue;const c=o.values[i];if(c==null){s.push(n[r].replace("|:",":"));continue}s.push(c?.id||c?.value||"")}return{name:Ce(s),parsedTimeSeriesValue:s}},I=(e,t)=>{const n=[];for(let s=0;s<e.length;s++){const r=e[s],o=t(s),i=o!=null&&r.values!=null?Yt(o,r):void 0;n.push({name:r.id,value:i})}return n},Yt=(e,t)=>{const n=t.values[e];return n==null?typeof e=="object"?e:e.toString():n?.id||n?.value||n?.ids||n?.values},Ce=e=>e.map(t=>t?Le(t):"").join("."),Le=e=>e.replace(/\./g,"|.").replace(/:/g,"|:"),Qt=(e,t)=>{const n=t.measures?.observation?.length;if(e.observations==null)return[{values:le(e,t.measures),obsAttributes:I(t.attributes?.observation||[],i=>e[i+n]),dimensionAtObservation:Oe}];const s=e.observations,r=t.dimensions.observation?.[0],o=[];for(const i in s){const c=r?.values[i];o.push({dimensionAtObservation:c?.value||c?.id,values:le(s[i],t.measures),obsAttributes:I(t.attributes?.observation||[],a=>s[i][a+n])})}return o},le=(e,t)=>t?.observation?.map((n,s)=>({name:n.id,value:e[s]}))||[],kt=(e,t)=>e.reduce((n,s,r)=>{const o=t[r];return Ft(n,s,o,""),n},[]),Ft=(e,t,n,s)=>{const r=n!=null?t?.values?.length>0?t.values[n]?.id||t.values[n]?.value:String(n):s;e.push({name:t.id,value:r||""})},Ue=/^[0-9][0-9][0-9][0-9]-Q[1-4]$/,We=/^[0-9][0-9][0-9][0-9]-W[0-9][0-9]?$/,xe=/^[0-9][0-9][0-9][0-9]-S[1-2]$/,Ye=/^[0-9][0-9][0-9][0-9]$/,Qe=/^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/,ke=/^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/,_=e=>Ye.exec(e),$=e=>!!_(e),Fe=e=>xe.exec(e),b=e=>!!Fe(e),O=e=>ke.exec(e),M=e=>!!O(e),C=e=>Ue.exec(e),L=e=>!!C(e),qe=e=>Qe.exec(e),Be=e=>!!qe(e),Ve=e=>We.exec(e),U=e=>!!Ve(e),ee=1440*60*1e3,te=7*ee;function ne(e){const t=`${e}-01-01`,n=new Date(t);if(n.getDay()!==4){const r=1+(4-n.getDay()+7)%7;n.setMonth(0,r)}return n}function qt(e){const t=new Date(e),s=-((t.getDay()+6)%7)+3;return t.setDate(t.getDate()+s),new Date(t.valueOf())}function j(e,t="W"){const n=`${e}-12-31`,s=S(new Date(n),t);if(s.weekYear===e)return s.weekNumber;const r=`${e}-12-24`;return S(new Date(r),t).weekNumber}function se(e,t,n="W"){return`${e}-${n}${t<10?"0"+t:t}`}function S(e,t="W"){const n=qt(e),s=n.getFullYear(),r=ne(s),o=1+Math.ceil((n.getTime()-r.getTime())/te);return{code:se(s,o,t),weekNumber:o,weekYear:s}}function Ge(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te-3*ee;return new Date(r)}function Ke(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te+3*ee;return new Date(r)}function re(e){return $(e)?Bt(e):b(e)?Gt(e):L(e)?jt(e):M(e)?zt(e):U(e)?Ge(e):Xt(e)}function oe(e){return $(e)?Vt(e):b(e)?Kt(e):L(e)?Ht(e):M(e)?Jt(e):U(e)?Ke(e):Zt(e)}function Bt(e){const t=_(e);if(t)return new Date(Number(t[0]),0,1)}function Vt(e){const t=_(e);if(t)return new Date(Number(t[0])+1,0,1)}function Gt(e){const[t,n]=e.split("-S");switch(+n){case 1:return new Date(+t,0,1);case 2:return new Date(+t,6,1)}}function Kt(e){const[t,n]=e.split("-S");switch(+n){case 1:return new Date(+t,6,1);case 2:return new Date(+t+1,0,1)}}function jt(e){const t=C(e);if(!t)return;const[n,s]=t[0].split("-Q");switch(+s){case 1:return new Date(+n,0,1);case 2:return new Date(+n,3,1);case 3:return new Date(+n,6,1);case 4:return new Date(+n,9,1)}}function Ht(e){const t=C(e);if(!t)return;const[n,s]=t[0].split("-Q");switch(+s){case 1:return new Date(+n,3,1);case 2:return new Date(+n,6,1);case 3:return new Date(+n,9,1);case 4:return new Date(+n+1,0,1)}}function zt(e){const t=O(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s-1,1)}function Jt(e){const t=O(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s,1)}const Xt=e=>new Date(`${e}T00:00:00`),Zt=e=>{const t=new Date(`${e}T23:59:00`);return t.setMinutes(t.getMinutes()+1),t},en=1,je=(e,t,n,s=!0,r="Q")=>{const o=[],i=t&&t>3?an(t,s):1,c=n?Math.floor((n-1)/3):4;for(let a=i;a<=c;a++)o.push(`${e}-${r}${a}`);return o},He=(e,t,n,s="S")=>{const r=[];return(t||1)<7&&(n||12)>6&&r.push(`${e}-${s}1`),n==null&&r.push(`${e}-${s}2`),r},tn=e=>Math.ceil(e/3),ze=(e,t,n="M")=>`${e}-${n}${t.toString().padStart(2,"0")}`,nn=(e,t,n="M")=>{const s=[];for(let r=t;r<=12;r++)s.push(ze(e,r,n));return s},sn=(e,t,n,s="M")=>{const r=[];for(let o=t;o<n;o++)r.push(ze(e,o,s));return r},Je=(e,t,n,s="M")=>{const r=t||1,o=n==null,i=n||12;return o?nn(e,r,s):sn(e,r,i,s)},rn=(e,t,n="M")=>{switch(t){case 0:return[`${e}-${n}01`,`${e}-${n}02`,`${e}-${n}03`];case 1:return[`${e}-${n}04`,`${e}-${n}05`,`${e}-${n}06`];case 2:return[`${e}-${n}07`,`${e}-${n}08`,`${e}-${n}09`];case 3:return[`${e}-${n}10`,`${e}-${n}11`,`${e}-${n}12`];default:return[]}},Xe=(e,t)=>{const n=f(t,!0),s=f(e),r=n.getFullYear(),o=s.getFullYear(),i=n.getTime()<=s.getTime()?o+en-r:0;return Array.from({length:i},(a,u)=>r+u)},f=(e,t=!1)=>{const n=on(e,t);return n?(n.getTimezoneOffset()>0&&n.setMinutes(n.getMinutes()+n.getTimezoneOffset()),n):new Date},on=(e,t=!1)=>{const n=Number(e);return e.toString().length!==13?t?re(e):oe(e):isNaN(n)?new Date(`${e}T00:00:00.000Z`):new Date(n)},an=(e,t)=>t?Math.floor((e+1)/3):Math.ceil((e+1)/3),cn=(e,t)=>{const n=ge(e)-ge(t);if(n===0&&e!==t){const s=me(e),r=me(t);return s-r}return n},me=e=>$(e)?6:b(e)?5:L(e)?4:M(e)?3:U(e)?2:Be(e)?1:0,ge=(e,t=!1)=>(t?re(e):oe(e))?.getTime()||0;var W=(e=>(e.LAST_UPDATE_AT="lastUpdatedAt",e.SERIES_COUNT="series_count",e))(W||{}),Ze=(e=>(e.C="c",e))(Ze||{}),E=(e=>(e.EQUALS="eq",e.NOT_EQUALS="ne",e.LESS="lt",e.LESS_OR_EQUAL="le",e.GREATER="gt",e.GREATER_OR_EQUAL="ge",e.CONTAINS="co",e.NOT_CONTAINS="nc",e.STARTS="sw",e.ENDS="ew",e))(E||{}),et=(e=>(e.BOOLEAN="Boolean",e.DATE_TIME="DateTime",e.DECIMAL="Decimal",e.INTEGER="Integer",e.OBSERVATION_TIME_PERIOD="ObservationalTimePeriod",e.STRING="String",e.TIME="Time",e.TIME_RANGE="TimeRange",e.URI="URI",e))(et||{}),tt=(e=>(e.ANNUAL="A",e.QUARTERLY="Q",e.MONTHLY="M",e))(tt||{});function un(e){return e?.annotations?.find(t=>{if(t.id===W.LAST_UPDATE_AT)return t})?.value}const x=(e,t)=>e?.names&&e?.names[t]||e?.name,nt=(e,t,n)=>{if(!(!e||t?.has(e?.id))&&(t?.set(e?.id,e),e?.parent)){const s=n?.get(e?.parent);nt(s,t,n)}},st=(e,t)=>{const n=new Map,s=new Map(e?.map(r=>[r.id,r]));return t?.forEach(r=>{nt(r,n,s)}),Array.from(n?.values())},rt="time_period_end",ot="time_period_start",it="TIME_PERIOD",dn=e=>{const t=e?.find(o=>o.id===ot),n=e?.find(o=>o.id===rt),s=n?.title?new Date(n?.title):null;return{startPeriod:t?.title?new Date(t?.title):null,endPeriod:s}},ln=(e,t)=>e.id.localeCompare(t.id),mn=(e,t)=>e.memberValue.localeCompare(t.memberValue),gn=(e,t)=>{const n=new Array(e.length),s=e.map((i,c)=>[i,c]);s.sort((i,c)=>ln(i[0],c[0]));const r=[...t];r.sort(mn);let o=0;for(const i of s){const c=i[0];for(;o<r.length&&r[o].memberValue.localeCompare(c.id)<0;)o+=1;o<r.length&&r[o].memberValue===c.id&&(n[i[1]]=i[0])}return n.filter(i=>i!=null)},fn=e=>!!e?.some(t=>t.parent),En=(e,t,n,s,r=[])=>{let o=e||[];if(pn(n||[],t||"")){const i=(n||[])[0].cubeRegions?.find(({isIncluded:c})=>c);if(i){const c=i.memberSelection?.find(({componentId:a})=>a===t);c?o=o.length===0?(c.selectionValues||[]).map(({memberValue:a})=>({id:a,name:a})):gn(o,c.selectionValues):o=[]}}else r.length!==0&&(o=o.filter(({id:i})=>r.includes(i)));return fn(e)&&(o=st(e,o)),o?.map(i=>({...i,name:s?x(i,s):i?.name}))},pn=(e,t)=>e!=null&&e.length>0&&t!=null,hn=e=>{const t=[];return e?.filters?.forEach(n=>{n.componentCode!==it&&t.push({componentCode:n.componentCode,operator:E.EQUALS,value:n.values.join(",")})}),t},Dn=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,fe=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");const t=e.match(Dn);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},Ee=e=>e==="*"||e==="x"||e==="X",pe=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},An=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],yn=(e,t)=>{if(Ee(e)||Ee(t))return 0;const[n,s]=An(pe(e),pe(t));return n>s?1:n<s?-1:0},he=(e,t)=>{for(let n=0;n<Math.max(e.length,t.length);n++){const s=yn(e[n]||"0",t[n]||"0");if(s!==0)return s}return 0},Sn=(e,t)=>{const n=fe(e),s=fe(t),r=n.pop(),o=s.pop(),i=he(n,s);return i!==0?i:r&&o?he(r.split("."),o.split(".")):r||o?r?-1:1:0},Tn=(e,t,n)=>{Rn(n);const s=Sn(e,t);return at[n].includes(s)},at={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},De=Object.keys(at),Rn=e=>{if(De.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${De.join("|")}`)},w="+",Y=(e,t)=>{const{agency:n,id:s,version:r}=D(e),o=t.filter(a=>a.agencyID===n&&a.id===s&&!a?.version?.includes(w));if(o.length===1)return o[0];if(!r?.includes(w))return o.find(a=>a.version===r);const i=o.map(a=>a.version),c=ct(r,i);return o.find(a=>a.version===c[0])},ct=(e,t)=>{const n=vn(e,t);return n.length>0?[n[0]]:[]},vn=(e,t)=>{const n=[];return t.forEach(s=>{dt(e,s)&&n.push(s)}),n},ut=e=>{const t=e.trim().replace(/\d+\+/,"*"),[n]=t.split("*");return new RegExp(`^${n}`)},dt=(e,t)=>{const n=e.trim().replace(/\+/,"");return ut(e).test(t)&&Tn(t,n,">=")},Q=(e,t)=>{const{concept:n}=lt(e,t);return n},lt=(e,t)=>{if(e==null)return{concept:void 0,scheme:void 0};const{childId:n,agency:s,id:r,version:o}=Ae(e);if(o?.includes(w)){const i=Y(e,t);return{concept:H(i?.concepts||[],n),scheme:i}}for(const i of t)if(In(i,r,s,o))return{concept:H(i?.concepts||[],n),scheme:i};return{concept:void 0,scheme:void 0}},H=(e,t)=>e?.find(n=>n.id===t),In=(e,t,n,s)=>e.id===t&&e.agencyID===n&&e.version===s,wn=(e=[],t=[],n)=>{const s=n?.conceptIdentity||"",r=Q(s,t),o=y(n?.localRepresentation?.enumeration),i=y(r?.coreRepresentation?.enumeration),c=o||i;if(c!=null)return Y(c,e)},Pn=(e,t,n,s)=>{const r=t?.find(o=>o?.id===e?.id)?.values;return n?.filter(o=>r?.some(i=>i.id===o.id))?.map(o=>({...o,name:s?x(o,s):o?.name}))||[]},mt=(e,t)=>{const n=t?.dataStructureComponents?.attributeList,s=e?.metadataStructureComponents?.metadataAttributeList;return n?.metadataAttributeUsages?.map(r=>{const o=s?.metadataAttributes?.find(i=>i?.id===r?.metadataAttributeReference);return{...o,attributeRelationship:r.attributeRelationship,isMandatory:Number(o?.minOccurs)>0}})},Nn=(e=[],t,n)=>{const s=y(t?.conceptIdentity)||"",r=Q(s,e);return n?x(r,n):r?.name??r?.id??t?.id};function z(e){return e?.dataStructures?.[0]?.dataStructureComponents?.dimensionList}function _n(e){return e?.data?.structures?.[0]?.dimensions?.series||[]}function $n(e){return e?.data?.structures?.[0]?.dimensions?.observation?.[0].values.map(t=>t.value).filter(t=>t!=null)||[]}function bn(e){return e.find(t=>t.type===N.TIME_DIMENSION)}const On=e=>{const t=new Map,n=e?.dataStructures?.[0],s=e?.metadataStructures?.[0],r=e?.conceptSchemes||[],o=e?.codelists||[];return e&&[...z(e)?.dimensions||[],...z(e)?.timeDimensions||[],...mt(s,n),...n?.dataStructureComponents?.attributeList?.attributes||[]].forEach(c=>{const a=Q(c?.conceptIdentity,r),u=c?.localRepresentation?.enumeration||a?.coreRepresentation?.enumeration,d=Y(u,o);c?.id&&(u?t.set(c?.id,{...d,name:a?.name,names:a?.names}):t.set(c?.id,{id:c?.id,name:a?.name,names:a?.names}))}),t},Mn=e=>e?.find(t=>t.id===W.SERIES_COUNT)?.title||"",Cn="/api/download",Ln=(e,t,n,s,r,o,i)=>{const c=new URLSearchParams({urn:e,format:t,compress:"false",filename:o,filters:JSON.stringify(r),attribute:s,language:n,isMetadata:i?"true":"none"}).toString(),a=`${Cn}?${c}`;window.open(a,"_blank")},Un=(e,t)=>{const n=[];for(const s of e){if(s.type!==N.DIMENSION)continue;const r=t.find(o=>o.componentCode===s.id);r!=null&&r.values?.length>0?n.push(r.values?.join(we)):n.push("*")}return n.join(".")},gt=(e,t)=>{if(!e||!e.startPeriod&&!e.endPeriod)return null;const n=[],{startPeriod:s,endPeriod:r}=e;if(s&&n.push(`${E.GREATER_OR_EQUAL}${ce}${s.toISOString().split("T")[0]}`),r&&n.push(`${E.LESS_OR_EQUAL}${ce}${r.toISOString().split("T")[0]}`),n.length===0)return null;const o=t;return n.map(i=>`${encodeURIComponent(`c[${o}]`)}${vt}${encodeURIComponent(i)}`).join(Ie)},Wn=(e,t)=>{const n=ft(e,t)||null;return n?gt(n,t?.id):null},ft=(e,t)=>{const n=t.id,s=e?.filters?.find(a=>a.componentCode===n);if(!s||!s.values)return null;const r=s.values?.filter(a=>!!a);if(!r.length)return null;const o=s.operator;if(o===E.LESS_OR_EQUAL||o===E.LESS)return{startPeriod:null,endPeriod:R(r[0])};if(o===E.GREATER_OR_EQUAL||o===E.GREATER)return{startPeriod:R(r[0]),endPeriod:null};const i=R(r[0]),c=R(r[1]);return{startPeriod:i,endPeriod:c}},ie=(e,t,n)=>{const s=f(t,!0),r=f(n),o=f(e,!0),i=f(e),c=s.getTime()>o.getTime()?s:o,a=r.getTime()<i.getTime()?r:i;return{start:c,end:a}},Et=(e,t,n,s="W")=>{const r=+e,{start:o,end:i}=ie(e,t,n);if(o.getTime()>i.getTime())return[];const c=S(o,s),a=c.weekYear===r?c.weekNumber:c.weekYear<r?1:j(r,s),u=S(i,s),d=u.weekYear===r?u.weekNumber:u.weekYear>r?j(r,s):1,l=[];if(a<d)for(let m=a;m<=d;m++)l.push(se(r,m,s));return l},xn=e=>{const t=new Date(e);return t.setMinutes(t.getMinutes()-t.getTimezoneOffset()),t.toISOString().slice(0,10)},pt=(e,t,n)=>{const{start:s,end:r}=ie(e,t,n);if(s.getTime()>r.getTime())return[];const o=[],i=new Date(s.getFullYear(),s.getMonth(),s.getDate()),c=new Date(r.getFullYear(),r.getMonth(),r.getDate());for(;i.getTime()<c.getTime();){const a=xn(i);o.push(a),i.setDate(i.getDate()+1)}return o},ht=e=>({isDailyExist:!!e?.some(({memberValue:t})=>t==="D"),isWeeklyExist:!!e?.some(({memberValue:t})=>t==="W"),isMonthlyExist:!!e?.some(({memberValue:t})=>t==="M"),isQuarterlyExist:!!e?.some(({memberValue:t})=>t==="Q"),isSemiAnnualExist:!!e?.some(({memberValue:t})=>t==="S"),isYearlyExist:!!e?.some(({memberValue:t})=>t==="A"||t==="Y")}),Yn=(e,t,n,s)=>{const r=s===0?f(t.toString(),!0)?.getMonth()+1:void 0,o=s===e.length-1?f(n.toString())?.getMonth()+1||1:void 0;return{startMonth:r,endMonth:o}},Dt=["FREQUENCY","FREQ"],Qn=(e,t)=>{const n=e?.[0]?.cubeRegions?.[0]?.memberSelection?.find(a=>Dt.includes(a.componentId))?.selectionValues,s=ht(n||[]),r=t?.startPeriod?.getTime()||1,o=t?.endPeriod?.getTime()||1,i=Xe(o,r),c=[];return i.forEach((a,u)=>{const d=[],{startMonth:l,endMonth:m}=Yn(i,new Date(r),new Date(o),u),{isDailyExist:g,isWeeklyExist:p,isMonthlyExist:k,isQuarterlyExist:F,isSemiAnnualExist:q,isYearlyExist:B}=s;B&&d.push(a.toString()),q&&d.push(...He(a,l,m)),F&&d.push(...je(a,l,m,!1)),k&&d.push(...Je(a,l,m)),p&&d.push(...Et(a,r.toString(),o.toString())),g&&d.push(...pt(a,r.toString(),o.toString())),c.push(...d)}),c};function kn(e){const{urn:t}=e.details;return ye(t.resourceId,t.version,t.agencyId)}function Fn(e){const t={};for(const n of e.datasets){const s=n.dataset,r=kn(s);t[r]=s.details.dimensions}return t}exports.Annotations=W;exports.AssignmentStatus=Ne;exports.AvailabilityApi=Tt;exports.DATASET_DATA_URL=ve;exports.DatasetApi=Pt;exports.DimensionType=N;exports.DownloadType=Te;exports.FREQUENCY_DIMENSION_ID=Ut;exports.FREQUENCY_DIM_ID=Dt;exports.FileColumnsAttribute=Se;exports.GET_v3_FILTER_ALL=Pe;exports.GET_v3_FILTER_AND=It;exports.GET_v3_FILTER_OR=we;exports.OBSERVATION_KEY=Oe;exports.OccurrenceType=_e;exports.Periods=tt;exports.RepresentationTextType=et;exports.SDMX_DATA_QUERY_PARAMS=Ze;exports.SINGLE_WILDCARD_SYMBOL=w;exports.SdmxApiClient=Lt;exports.SdmxAvailabilityMode=J;exports.SdmxDataFormat=A;exports.SdmxDetails=X;exports.SdmxReferences=P;exports.SeriesFilterOperator=E;exports.TIME_PERIOD=it;exports.TIME_PERIOD_END=rt;exports.TIME_PERIOD_START=ot;exports.buildDatasetDimensionsMetadataMap=Fn;exports.dailyPattern=Qe;exports.decodeDimensionId=Le;exports.findCodelistByDimension=wn;exports.generateDatasetDataRequest=G;exports.generateShortUrn=ye;exports.getAdditionalColumns=Qn;exports.getAnnotationPeriod=dn;exports.getArtifactByUrnWithWildCard=Y;exports.getAttachedDimensionsSeriesByDimension=Wt;exports.getAttachedDimensionsSeriesByTsId=$e;exports.getAttachedDimensionsSeriesKey=Z;exports.getAttributeValueFromDataQueryResponse=be;exports.getAvailableCodes=Pn;exports.getAvailableCodesFromConstrains=En;exports.getChildParsedUrn=Ae;exports.getConcept=Q;exports.getConceptByUrn=H;exports.getConceptWithScheme=lt;exports.getConvertedMetaAttributes=mt;exports.getDailyRegExp=qe;exports.getDaysColumns=pt;exports.getDimensionTitle=Nn;exports.getDimensions=z;exports.getFilteredItemsWithParents=st;exports.getFiltersDtoFromDataQuery=hn;exports.getISOWeek=S;exports.getKeyFromUrn=y;exports.getLastUpdatedTime=un;exports.getLastWeekNumberOfYear=j;exports.getLocalizedName=x;exports.getMonthlyData=Je;exports.getMonthlyDataByQuarter=rn;exports.getMonthlyRegExp=O;exports.getParsedEndPeriodDate=oe;exports.getParsedResponse=xt;exports.getParsedStartPeriodDate=re;exports.getPeriodDate=f;exports.getPeriods=ht;exports.getQuarterByMonth=tn;exports.getQuarterlyRegExp=C;exports.getQuartersData=je;exports.getQueryTimePeriodFilters=gt;exports.getRequestAcceptHeader=Re;exports.getResolvedVersionBySingleWildcard=ct;exports.getSemiAnnualData=He;exports.getSemiAnnuallyRegExp=Fe;exports.getSeriesAttributes=I;exports.getSeriesName=Me;exports.getStructureComponentsMap=On;exports.getStructureDimensions=_n;exports.getTimeDimension=bn;exports.getTimePeriods=$n;exports.getTimeQueryFilter=Wn;exports.getTimeRangeFromAttachment=ft;exports.getTimeSeriesCount=Mn;exports.getTimeSeriesFilterKey=Un;exports.getTimeSeriesId=Ce;exports.getWeekCode=se;exports.getWeeklyPeriodEndDate=Ke;exports.getWeeklyPeriodStartDate=Ge;exports.getWeeklyRegExp=Ve;exports.getWeeksColumns=Et;exports.getWildCardRegexp=ut;exports.getYearPeriod=ie;exports.getYearlyRegExp=_;exports.getYears=Xe;exports.isDaily=Be;exports.isMonthly=M;exports.isQuarterly=L;exports.isSemiAnnually=b;exports.isWeekly=U;exports.isWildCardVersionCorrect=dt;exports.isYearly=$;exports.monthlyPattern=ke;exports.openDownloadWindow=Ln;exports.quarterPattern=Ue;exports.semiAnnuallyPattern=xe;exports.sortPeriods=cn;exports.splitUrn=D;exports.weeklyPattern=We;exports.yearlyPattern=Ye;
package/index.mjs CHANGED
@@ -15,13 +15,13 @@ const v = (e) => {
15
15
  }, we = (e) => {
16
16
  const [t, n] = e.split(")."), { agency: s, id: r, version: o } = D(t + ")");
17
17
  return { childId: n, agency: s, id: r, version: o };
18
- }, gn = (e, t, n) => {
18
+ }, Ie = (e, t, n) => {
19
19
  const s = t === "" ? "" : `(${t})`;
20
20
  return `${n}:${e}${s}`;
21
21
  };
22
22
  var L = /* @__PURE__ */ ((e) => (e.DESCENDANTS = "descendants", e.NONE = "none", e.ALL = "all", e))(L || {}), me = /* @__PURE__ */ ((e) => (e.EXACT = "exact", e.AVAILABLE = "available", e))(me || {});
23
- const Ie = (e = "", t = "", n = "") => `sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;
24
- class hn {
23
+ const Ne = (e = "", t = "", n = "") => `sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;
24
+ class En {
25
25
  constructor(t) {
26
26
  this.client = t;
27
27
  }
@@ -30,12 +30,12 @@ class hn {
30
30
  filters: n || [],
31
31
  mode: me.AVAILABLE,
32
32
  references: L.NONE
33
- }, c = Ie(s, r, o);
33
+ }, c = Ne(s, r, o);
34
34
  return await this.client.postRequest(c, { body: i });
35
35
  }
36
36
  }
37
- var S = /* @__PURE__ */ ((e) => (e.CSV = "csv", e.JSON = "json", e.XML = "xml", e))(S || {}), Ne = /* @__PURE__ */ ((e) => (e.ID = "id", e.NAME = "name", e.ID_NAME = "both", e))(Ne || {}), $e = /* @__PURE__ */ ((e) => (e.FULL_DATASET = "full", e.DATA_IN_TABLE = "query", e))($e || {});
38
- const Pe = (e, t) => {
37
+ var S = /* @__PURE__ */ ((e) => (e.CSV = "csv", e.JSON = "json", e.XML = "xml", e))(S || {}), $e = /* @__PURE__ */ ((e) => (e.ID = "id", e.NAME = "name", e.ID_NAME = "both", e))($e || {}), Pe = /* @__PURE__ */ ((e) => (e.FULL_DATASET = "full", e.DATA_IN_TABLE = "query", e))(Pe || {});
38
+ const be = (e, t) => {
39
39
  switch (e) {
40
40
  case S.CSV:
41
41
  return A(
@@ -57,25 +57,25 @@ const Pe = (e, t) => {
57
57
  }
58
58
  }, A = (e, t) => `${e}; labels=${t}`;
59
59
  var fe = /* @__PURE__ */ ((e) => (e.REFERENCE_PARTIAL = "referencepartial", e.FULL = "full", e))(fe || {});
60
- const be = "all", _e = "sdmx/3.0/data/dataflow", ge = "&", J = ":", Oe = "=", Le = "+", En = ",", Me = "*", X = (e, t, n) => {
60
+ const _e = "all", Oe = "sdmx/3.0/data/dataflow", ge = "&", J = ":", Le = "=", Me = "+", pn = ",", Ce = "*", X = (e, t, n) => {
61
61
  const { filterKey: s, timeFilter: r } = n, { agency: o, id: i, version: c } = D(e), a = [r || "", t].filter((d) => !!d).join(ge);
62
- return `${`${_e}/${o}/${i}/${c}`}/${s || Me}?${a}`;
63
- }, Ce = (e = "", t = "", n = "", s = L.DESCENDANTS) => `sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${fe.REFERENCE_PARTIAL}`;
64
- class pn {
62
+ return `${`${Oe}/${o}/${i}/${c}`}/${s || Ce}?${a}`;
63
+ }, Ue = (e = "", t = "", n = "", s = L.DESCENDANTS) => `sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${fe.REFERENCE_PARTIAL}`;
64
+ class Dn {
65
65
  constructor(t) {
66
66
  this.client = t;
67
67
  }
68
68
  async getDataSet(t, n) {
69
69
  const { agency: s, id: r, version: o } = D(t);
70
70
  return await this.client.getRequest(
71
- Ce(s, r, o, n)
71
+ Ue(s, r, o, n)
72
72
  );
73
73
  }
74
74
  async getDatasetData(t, n) {
75
75
  const s = new URLSearchParams({
76
76
  includeHistory: "false",
77
77
  limit: "1000",
78
- attributes: be,
78
+ attributes: _e,
79
79
  dimensionAtObservation: "TIME_PERIOD"
80
80
  // TODO: use time dimensions
81
81
  }).toString(), r = X(t, s, n);
@@ -93,7 +93,7 @@ class pn {
93
93
  {
94
94
  method: "GET",
95
95
  headers: {
96
- Accept: Pe(n, r),
96
+ Accept: be(n, r),
97
97
  "Accept-language": s
98
98
  }
99
99
  },
@@ -101,7 +101,7 @@ class pn {
101
101
  );
102
102
  }
103
103
  }
104
- const Ue = (e, t) => e.error || e.message || `${t.status} ${t.statusText}`, xe = "application/json", Ye = "Content-Type", P = "Api-Key", We = "X-CONVERSATION-ID", T = "Ocp-Apim-Subscription-Key";
104
+ const xe = (e, t) => e.error || e.message || `${t.status} ${t.statusText}`, Ye = "application/json", We = "Content-Type", P = "Api-Key", ke = "X-CONVERSATION-ID", T = "Ocp-Apim-Subscription-Key";
105
105
  class Z extends Error {
106
106
  constructor(t) {
107
107
  super(t.message), this.isHttpError = !0, this.name = "HttpError", this.code = t.code, this.status = t.status, this.details = t.details;
@@ -109,23 +109,23 @@ class Z extends Error {
109
109
  }
110
110
  const y = (e) => isNaN(Date.parse(e)) ? null : new Date(e), b = (e, t, n) => {
111
111
  const s = {
112
- [Ye]: t?.contentType || xe
112
+ [We]: t?.contentType || Ye
113
113
  };
114
- return t?.jwt && (s.Authorization = `Bearer ${t.jwt}`), t?.chatReference && (s[We] = t.chatReference), { ...s, ...n };
115
- }, ke = (e) => {
114
+ return t?.jwt && (s.Authorization = `Bearer ${t.jwt}`), t?.chatReference && (s[ke] = t.chatReference), { ...s, ...n };
115
+ }, qe = (e) => {
116
116
  const t = { ...e };
117
117
  return t[P] && (t[P] = t[P].substring(0, 8) + "...[REDACTED]"), t.Authorization && (t.Authorization = "Bearer [REDACTED]"), t[T] && (t[T] = t[T].substring(0, 8) + "...[REDACTED]"), t;
118
118
  }, ee = async (e, t, n) => await fetch(e, {
119
119
  method: n.method || "GET",
120
120
  headers: t,
121
121
  body: n.body ? JSON.stringify(n.body) : void 0
122
- }), qe = async (e, t, n) => await fetch(e, {
122
+ }), Qe = async (e, t, n) => await fetch(e, {
123
123
  method: n.method,
124
124
  headers: t,
125
125
  body: n?.isFormData && typeof n?.body == "string" ? n.body : JSON.stringify(n.body),
126
126
  signal: n?.signal
127
127
  });
128
- class Qe {
128
+ class Ve {
129
129
  constructor() {
130
130
  this.decoder = new TextDecoder();
131
131
  }
@@ -146,7 +146,7 @@ class Qe {
146
146
  async initializeStreamRequest(t, n, s, r) {
147
147
  const o = b(void 0, {
148
148
  jwt: r
149
- }), i = await qe(
149
+ }), i = await Qe(
150
150
  t,
151
151
  {
152
152
  Accept: "text/event-stream",
@@ -221,8 +221,8 @@ class Qe {
221
221
  }
222
222
  }
223
223
  }
224
- new Qe();
225
- class Dn {
224
+ new Ve();
225
+ class An {
226
226
  constructor(t) {
227
227
  this.config = t, console.info("SdmxApiClient initialized", {
228
228
  apiUrl: t.apiUrl || "NOT SET"
@@ -299,7 +299,7 @@ class Dn {
299
299
  }
300
300
  if (!i.ok) {
301
301
  this.addErrorRequestLog(r, n, i, c, a);
302
- const d = Ue(a, i);
302
+ const d = xe(a, i);
303
303
  throw new Error(`API request failed: ${d}`);
304
304
  }
305
305
  return a;
@@ -317,7 +317,7 @@ class Dn {
317
317
  const o = {
318
318
  method: s.method || "GET",
319
319
  url: n,
320
- headers: ke(r)
320
+ headers: qe(r)
321
321
  };
322
322
  s.body && (o.body = s.body), console.info(t, o);
323
323
  }
@@ -343,9 +343,9 @@ class Dn {
343
343
  });
344
344
  }
345
345
  }
346
- const An = ["FREQ", "FREQUENCY"];
347
- var Ve = /* @__PURE__ */ ((e) => (e.CONDITIONAL = "Conditional", e.MANDATORY = "Mandatory", e))(Ve || {}), M = /* @__PURE__ */ ((e) => (e.DIMENSION = "Dimension", e.MEASURE_DIMENSION = "MeasureDimension", e.TIME_DIMENSION = "TimeDimension", e))(M || {}), Be = /* @__PURE__ */ ((e) => (e.UNBOUNDED = "unbounded", e))(Be || {});
348
- const Fe = (e, t) => {
346
+ const yn = ["FREQ", "FREQUENCY"];
347
+ var Be = /* @__PURE__ */ ((e) => (e.CONDITIONAL = "Conditional", e.MANDATORY = "Mandatory", e))(Be || {}), M = /* @__PURE__ */ ((e) => (e.DIMENSION = "Dimension", e.MEASURE_DIMENSION = "MeasureDimension", e.TIME_DIMENSION = "TimeDimension", e))(M || {}), Fe = /* @__PURE__ */ ((e) => (e.UNBOUNDED = "unbounded", e))(Fe || {});
348
+ const Ge = (e, t) => {
349
349
  const n = e?.data?.dataSets?.[0], r = e?.data?.structures?.[0]?.attributes?.dimensionGroup || [], o = n?.dimensionGroupAttributes, i = {};
350
350
  for (const c of r) {
351
351
  const a = c.relationship.dimensions, { codedSeriesKey: u, decodedSeriesKey: d } = he(
@@ -374,7 +374,7 @@ const Fe = (e, t) => {
374
374
  codedSeriesKey: o.join(":"),
375
375
  decodedSeriesKey: i.join(":")
376
376
  };
377
- }, yn = (e, t, n) => {
377
+ }, Sn = (e, t, n) => {
378
378
  const s = e?.data?.dataSets?.[0], r = e?.data?.structures?.[0], o = (r?.attributes?.dimensionGroup || []).filter(
379
379
  (l) => l.relationship.dimensions?.length === 1 && l.relationship.dimensions.includes(t || "")
380
380
  ), i = s?.dimensionGroupAttributes, c = [
@@ -396,18 +396,18 @@ const Fe = (e, t) => {
396
396
  };
397
397
  }
398
398
  return d;
399
- }, Ge = (e, t) => {
399
+ }, Ke = (e, t) => {
400
400
  if (t == null)
401
401
  return;
402
402
  const n = e.values?.[t];
403
403
  return n ?? (t instanceof Array ? { values: t } : { value: t.toString() });
404
- }, Ke = "Observation", Sn = (e) => {
404
+ }, je = "Observation", Tn = (e) => {
405
405
  const t = e?.data?.dataSets, n = e?.data?.structures?.[0];
406
406
  if (!t || !n)
407
407
  return [];
408
408
  const s = n.attributes, r = n.dimensions, o = s?.dimensionGroup || [], i = t[0].series || t[0].observations, c = r.series?.length ? r.series : r.observation, a = [];
409
409
  for (const u in i) {
410
- const d = [], { name: l, parsedTimeSeriesValue: m } = je(
410
+ const d = [], { name: l, parsedTimeSeriesValue: m } = He(
411
411
  u,
412
412
  c
413
413
  ), f = i[u], E = f.attributes || [];
@@ -422,19 +422,19 @@ const Fe = (e, t) => {
422
422
  continue;
423
423
  }
424
424
  d.push(
425
- ...Xe(f, n)
425
+ ...Ze(f, n)
426
426
  );
427
427
  const w = _(
428
428
  s?.series || [],
429
429
  (p) => E[p]
430
- ), I = Ze(
430
+ ), I = et(
431
431
  n.attributes?.dataSet || [],
432
432
  t[0].attributes?.filter((p) => p != null) || []
433
- ), N = Fe(
433
+ ), N = Ge(
434
434
  e,
435
435
  m
436
436
  ), $ = o.map((p, ve) => {
437
- const z = N[p.id], Re = Ge(
437
+ const z = N[p.id], Re = Ke(
438
438
  p,
439
439
  z.values[ve]
440
440
  );
@@ -454,7 +454,7 @@ const Fe = (e, t) => {
454
454
  });
455
455
  }
456
456
  return a;
457
- }, je = (e, t) => {
457
+ }, He = (e, t) => {
458
458
  const n = e.split(new RegExp("(?<!\\|):(?!\\||$)")), s = [];
459
459
  for (let r = 0; r < n.length; r++) {
460
460
  const o = t?.[r], i = Number(n[r]);
@@ -468,23 +468,23 @@ const Fe = (e, t) => {
468
468
  s.push(c?.id || c?.value || "");
469
469
  }
470
470
  return {
471
- name: ze(s),
471
+ name: Je(s),
472
472
  parsedTimeSeriesValue: s
473
473
  };
474
474
  }, _ = (e, t) => {
475
475
  const n = [];
476
476
  for (let s = 0; s < e.length; s++) {
477
- const r = e[s], o = t(s), i = o != null && r.values != null ? He(o, r) : void 0;
477
+ const r = e[s], o = t(s), i = o != null && r.values != null ? ze(o, r) : void 0;
478
478
  n.push({
479
479
  name: r.id,
480
480
  value: i
481
481
  });
482
482
  }
483
483
  return n;
484
- }, He = (e, t) => {
484
+ }, ze = (e, t) => {
485
485
  const n = t.values[e];
486
486
  return n == null ? typeof e == "object" ? e : e.toString() : n?.id || n?.value || n?.ids || n?.values;
487
- }, ze = (e) => e.map((t) => t ? Je(t) : "").join("."), Je = (e) => e.replace(/\./g, "|.").replace(/:/g, "|:"), Xe = (e, t) => {
487
+ }, Je = (e) => e.map((t) => t ? Xe(t) : "").join("."), Xe = (e) => e.replace(/\./g, "|.").replace(/:/g, "|:"), Ze = (e, t) => {
488
488
  const n = t.measures?.observation?.length;
489
489
  if (e.observations == null)
490
490
  return [
@@ -494,7 +494,7 @@ const Fe = (e, t) => {
494
494
  t.attributes?.observation || [],
495
495
  (i) => e[i + n]
496
496
  ),
497
- dimensionAtObservation: Ke
497
+ dimensionAtObservation: je
498
498
  }
499
499
  ];
500
500
  const s = e.observations, r = t.dimensions.observation?.[0], o = [];
@@ -513,19 +513,19 @@ const Fe = (e, t) => {
513
513
  });
514
514
  }
515
515
  return o;
516
- }, te = (e, t) => t?.observation?.map((n, s) => ({ name: n.id, value: e[s] })) || [], Ze = (e, t) => e.reduce(
516
+ }, te = (e, t) => t?.observation?.map((n, s) => ({ name: n.id, value: e[s] })) || [], et = (e, t) => e.reduce(
517
517
  (n, s, r) => {
518
518
  const o = t[r];
519
- return et(n, s, o, ""), n;
519
+ return tt(n, s, o, ""), n;
520
520
  },
521
521
  []
522
- ), et = (e, t, n, s) => {
522
+ ), tt = (e, t, n, s) => {
523
523
  const r = n != null ? t?.values?.length > 0 ? t.values[n]?.id || t.values[n]?.value : String(n) : s;
524
524
  e.push({
525
525
  name: t.id,
526
526
  value: r || ""
527
527
  });
528
- }, tt = /^[0-9][0-9][0-9][0-9]-Q[1-4]$/, nt = /^[0-9][0-9][0-9][0-9]-W[0-9][0-9]?$/, st = /^[0-9][0-9][0-9][0-9]-S[1-2]$/, rt = /^[0-9][0-9][0-9][0-9]$/, ot = /^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/, it = /^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/, C = (e) => rt.exec(e), U = (e) => !!C(e), at = (e) => st.exec(e), x = (e) => !!at(e), Y = (e) => it.exec(e), W = (e) => !!Y(e), k = (e) => tt.exec(e), q = (e) => !!k(e), ct = (e) => ot.exec(e), ut = (e) => !!ct(e), dt = (e) => nt.exec(e), Q = (e) => !!dt(e), V = 1440 * 60 * 1e3, B = 7 * V;
528
+ }, nt = /^[0-9][0-9][0-9][0-9]-Q[1-4]$/, st = /^[0-9][0-9][0-9][0-9]-W[0-9][0-9]?$/, rt = /^[0-9][0-9][0-9][0-9]-S[1-2]$/, ot = /^[0-9][0-9][0-9][0-9]$/, it = /^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/, at = /^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/, C = (e) => ot.exec(e), U = (e) => !!C(e), ct = (e) => rt.exec(e), x = (e) => !!ct(e), Y = (e) => at.exec(e), W = (e) => !!Y(e), k = (e) => nt.exec(e), q = (e) => !!k(e), ut = (e) => it.exec(e), dt = (e) => !!ut(e), lt = (e) => st.exec(e), Q = (e) => !!lt(e), V = 1440 * 60 * 1e3, B = 7 * V;
529
529
  function F(e) {
530
530
  const t = `${e}-01-01`, n = new Date(t);
531
531
  if (n.getDay() !== 4) {
@@ -534,7 +534,7 @@ function F(e) {
534
534
  }
535
535
  return n;
536
536
  }
537
- function lt(e) {
537
+ function mt(e) {
538
538
  const t = new Date(e), s = -((t.getDay() + 6) % 7) + 3;
539
539
  return t.setDate(t.getDate() + s), new Date(t.valueOf());
540
540
  }
@@ -549,7 +549,7 @@ function Ee(e, t, n = "W") {
549
549
  return `${e}-${n}${t < 10 ? "0" + t : t}`;
550
550
  }
551
551
  function R(e, t = "W") {
552
- const n = lt(e), s = n.getFullYear(), r = F(s), o = 1 + Math.ceil(
552
+ const n = mt(e), s = n.getFullYear(), r = F(s), o = 1 + Math.ceil(
553
553
  (n.getTime() - r.getTime()) / B
554
554
  );
555
555
  return {
@@ -558,31 +558,31 @@ function R(e, t = "W") {
558
558
  weekYear: s
559
559
  };
560
560
  }
561
- function mt(e) {
561
+ function ft(e) {
562
562
  const [t, n] = e.split("-W"), r = F(+t).getTime() + (+n - 1) * B - 3 * V;
563
563
  return new Date(r);
564
564
  }
565
- function ft(e) {
565
+ function gt(e) {
566
566
  const [t, n] = e.split("-W"), r = F(+t).getTime() + (+n - 1) * B + 3 * V;
567
567
  return new Date(r);
568
568
  }
569
569
  function pe(e) {
570
- return U(e) ? gt(e) : x(e) ? Et(e) : q(e) ? Dt(e) : W(e) ? yt(e) : Q(e) ? mt(e) : Tt(e);
570
+ return U(e) ? ht(e) : x(e) ? pt(e) : q(e) ? At(e) : W(e) ? St(e) : Q(e) ? ft(e) : vt(e);
571
571
  }
572
572
  function De(e) {
573
- return U(e) ? ht(e) : x(e) ? pt(e) : q(e) ? At(e) : W(e) ? St(e) : Q(e) ? ft(e) : vt(e);
573
+ return U(e) ? Et(e) : x(e) ? Dt(e) : q(e) ? yt(e) : W(e) ? Tt(e) : Q(e) ? gt(e) : Rt(e);
574
574
  }
575
- function gt(e) {
575
+ function ht(e) {
576
576
  const t = C(e);
577
577
  if (t)
578
578
  return new Date(Number(t[0]), 0, 1);
579
579
  }
580
- function ht(e) {
580
+ function Et(e) {
581
581
  const t = C(e);
582
582
  if (t)
583
583
  return new Date(Number(t[0]) + 1, 0, 1);
584
584
  }
585
- function Et(e) {
585
+ function pt(e) {
586
586
  const [t, n] = e.split("-S");
587
587
  switch (+n) {
588
588
  case 1:
@@ -591,7 +591,7 @@ function Et(e) {
591
591
  return new Date(+t, 6, 1);
592
592
  }
593
593
  }
594
- function pt(e) {
594
+ function Dt(e) {
595
595
  const [t, n] = e.split("-S");
596
596
  switch (+n) {
597
597
  case 1:
@@ -600,7 +600,7 @@ function pt(e) {
600
600
  return new Date(+t + 1, 0, 1);
601
601
  }
602
602
  }
603
- function Dt(e) {
603
+ function At(e) {
604
604
  const t = k(e);
605
605
  if (!t)
606
606
  return;
@@ -616,7 +616,7 @@ function Dt(e) {
616
616
  return new Date(+n, 9, 1);
617
617
  }
618
618
  }
619
- function At(e) {
619
+ function yt(e) {
620
620
  const t = k(e);
621
621
  if (!t)
622
622
  return;
@@ -632,45 +632,45 @@ function At(e) {
632
632
  return new Date(+n + 1, 0, 1);
633
633
  }
634
634
  }
635
- function yt(e) {
635
+ function St(e) {
636
636
  const t = Y(e);
637
637
  if (!t)
638
638
  return;
639
639
  const [n, s] = t[0].split("-M");
640
640
  return new Date(+n, +s - 1, 1);
641
641
  }
642
- function St(e) {
642
+ function Tt(e) {
643
643
  const t = Y(e);
644
644
  if (!t)
645
645
  return;
646
646
  const [n, s] = t[0].split("-M");
647
647
  return new Date(+n, +s, 1);
648
648
  }
649
- const Tt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), vt = (e) => {
649
+ const vt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Rt = (e) => {
650
650
  const t = /* @__PURE__ */ new Date(`${e}T23:59:00`);
651
651
  return t.setMinutes(t.getMinutes() + 1), t;
652
- }, Rt = 1, wt = (e, t, n, s = !0, r = "Q") => {
653
- const o = [], i = t && t > 3 ? Ot(t, s) : 1, c = n ? Math.floor((n - 1) / 3) : 4;
652
+ }, wt = 1, It = (e, t, n, s = !0, r = "Q") => {
653
+ const o = [], i = t && t > 3 ? Lt(t, s) : 1, c = n ? Math.floor((n - 1) / 3) : 4;
654
654
  for (let a = i; a <= c; a++)
655
655
  o.push(`${e}-${r}${a}`);
656
656
  return o;
657
- }, It = (e, t, n, s = "S") => {
657
+ }, Nt = (e, t, n, s = "S") => {
658
658
  const r = [];
659
659
  return (t || 1) < 7 && (n || 12) > 6 && r.push(`${e}-${s}1`), n == null && r.push(`${e}-${s}2`), r;
660
- }, Tn = (e) => Math.ceil(e / 3), Ae = (e, t, n = "M") => `${e}-${n}${t.toString().padStart(2, "0")}`, Nt = (e, t, n = "M") => {
660
+ }, vn = (e) => Math.ceil(e / 3), Ae = (e, t, n = "M") => `${e}-${n}${t.toString().padStart(2, "0")}`, $t = (e, t, n = "M") => {
661
661
  const s = [];
662
662
  for (let r = t; r <= 12; r++)
663
663
  s.push(Ae(e, r, n));
664
664
  return s;
665
- }, $t = (e, t, n, s = "M") => {
665
+ }, Pt = (e, t, n, s = "M") => {
666
666
  const r = [];
667
667
  for (let o = t; o < n; o++)
668
668
  r.push(Ae(e, o, s));
669
669
  return r;
670
- }, Pt = (e, t, n, s = "M") => {
670
+ }, bt = (e, t, n, s = "M") => {
671
671
  const r = t || 1, o = n == null, i = n || 12;
672
- return o ? Nt(e, r, s) : $t(e, r, i, s);
673
- }, vn = (e, t, n = "M") => {
672
+ return o ? $t(e, r, s) : Pt(e, r, i, s);
673
+ }, Rn = (e, t, n = "M") => {
674
674
  switch (t) {
675
675
  case 0:
676
676
  return [
@@ -699,25 +699,25 @@ const Tt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), vt = (e) => {
699
699
  default:
700
700
  return [];
701
701
  }
702
- }, bt = (e, t) => {
703
- const n = g(t, !0), s = g(e), r = n.getFullYear(), o = s.getFullYear(), i = n.getTime() <= s.getTime() ? o + Rt - r : 0;
702
+ }, _t = (e, t) => {
703
+ const n = g(t, !0), s = g(e), r = n.getFullYear(), o = s.getFullYear(), i = n.getTime() <= s.getTime() ? o + wt - r : 0;
704
704
  return Array.from({ length: i }, (a, u) => r + u);
705
705
  }, g = (e, t = !1) => {
706
- const n = _t(e, t);
706
+ const n = Ot(e, t);
707
707
  return n ? (n.getTimezoneOffset() > 0 && n.setMinutes(n.getMinutes() + n.getTimezoneOffset()), n) : /* @__PURE__ */ new Date();
708
- }, _t = (e, t = !1) => {
708
+ }, Ot = (e, t = !1) => {
709
709
  const n = Number(e);
710
710
  return e.toString().length !== 13 ? t ? pe(e) : De(e) : isNaN(n) ? /* @__PURE__ */ new Date(`${e}T00:00:00.000Z`) : new Date(n);
711
- }, Ot = (e, t) => t ? Math.floor((e + 1) / 3) : Math.ceil((e + 1) / 3), Rn = (e, t) => {
711
+ }, Lt = (e, t) => t ? Math.floor((e + 1) / 3) : Math.ceil((e + 1) / 3), wn = (e, t) => {
712
712
  const n = re(e) - re(t);
713
713
  if (n === 0 && e !== t) {
714
714
  const s = se(e), r = se(t);
715
715
  return s - r;
716
716
  }
717
717
  return n;
718
- }, se = (e) => U(e) ? 6 : x(e) ? 5 : q(e) ? 4 : W(e) ? 3 : Q(e) ? 2 : ut(e) ? 1 : 0, re = (e, t = !1) => (t ? pe(e) : De(e))?.getTime() || 0;
719
- var G = /* @__PURE__ */ ((e) => (e.LAST_UPDATE_AT = "lastUpdatedAt", e.SERIES_COUNT = "series_count", e))(G || {}), Lt = /* @__PURE__ */ ((e) => (e.C = "c", e))(Lt || {}), h = /* @__PURE__ */ ((e) => (e.EQUALS = "eq", e.NOT_EQUALS = "ne", e.LESS = "lt", e.LESS_OR_EQUAL = "le", e.GREATER = "gt", e.GREATER_OR_EQUAL = "ge", e.CONTAINS = "co", e.NOT_CONTAINS = "nc", e.STARTS = "sw", e.ENDS = "ew", e))(h || {}), Mt = /* @__PURE__ */ ((e) => (e.BOOLEAN = "Boolean", e.DATE_TIME = "DateTime", e.DECIMAL = "Decimal", e.INTEGER = "Integer", e.OBSERVATION_TIME_PERIOD = "ObservationalTimePeriod", e.STRING = "String", e.TIME = "Time", e.TIME_RANGE = "TimeRange", e.URI = "URI", e))(Mt || {}), Ct = /* @__PURE__ */ ((e) => (e.ANNUAL = "A", e.QUARTERLY = "Q", e.MONTHLY = "M", e))(Ct || {});
720
- function wn(e) {
718
+ }, se = (e) => U(e) ? 6 : x(e) ? 5 : q(e) ? 4 : W(e) ? 3 : Q(e) ? 2 : dt(e) ? 1 : 0, re = (e, t = !1) => (t ? pe(e) : De(e))?.getTime() || 0;
719
+ var G = /* @__PURE__ */ ((e) => (e.LAST_UPDATE_AT = "lastUpdatedAt", e.SERIES_COUNT = "series_count", e))(G || {}), Mt = /* @__PURE__ */ ((e) => (e.C = "c", e))(Mt || {}), h = /* @__PURE__ */ ((e) => (e.EQUALS = "eq", e.NOT_EQUALS = "ne", e.LESS = "lt", e.LESS_OR_EQUAL = "le", e.GREATER = "gt", e.GREATER_OR_EQUAL = "ge", e.CONTAINS = "co", e.NOT_CONTAINS = "nc", e.STARTS = "sw", e.ENDS = "ew", e))(h || {}), Ct = /* @__PURE__ */ ((e) => (e.BOOLEAN = "Boolean", e.DATE_TIME = "DateTime", e.DECIMAL = "Decimal", e.INTEGER = "Integer", e.OBSERVATION_TIME_PERIOD = "ObservationalTimePeriod", e.STRING = "String", e.TIME = "Time", e.TIME_RANGE = "TimeRange", e.URI = "URI", e))(Ct || {}), Ut = /* @__PURE__ */ ((e) => (e.ANNUAL = "A", e.QUARTERLY = "Q", e.MONTHLY = "M", e))(Ut || {});
720
+ function In(e) {
721
721
  return e?.annotations?.find((t) => {
722
722
  if (t.id === G.LAST_UPDATE_AT)
723
723
  return t;
@@ -728,28 +728,28 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
728
728
  const s = n?.get(e?.parent);
729
729
  ye(s, t, n);
730
730
  }
731
- }, Ut = (e, t) => {
731
+ }, xt = (e, t) => {
732
732
  const n = /* @__PURE__ */ new Map(), s = new Map(e?.map((r) => [r.id, r]));
733
733
  return t?.forEach((r) => {
734
734
  ye(r, n, s);
735
735
  }), Array.from(n?.values());
736
- }, xt = "time_period_end", Yt = "time_period_start", Wt = "TIME_PERIOD", In = (e) => {
736
+ }, Yt = "time_period_end", Wt = "time_period_start", kt = "TIME_PERIOD", Nn = (e) => {
737
737
  const t = e?.find(
738
- (o) => o.id === Yt
738
+ (o) => o.id === Wt
739
739
  ), n = e?.find(
740
- (o) => o.id === xt
740
+ (o) => o.id === Yt
741
741
  ), s = n?.title ? new Date(n?.title) : null;
742
742
  return {
743
743
  startPeriod: t?.title ? new Date(t?.title) : null,
744
744
  endPeriod: s
745
745
  };
746
- }, kt = (e, t) => e.id.localeCompare(t.id), qt = (e, t) => e.memberValue.localeCompare(t.memberValue), Qt = (e, t) => {
746
+ }, qt = (e, t) => e.id.localeCompare(t.id), Qt = (e, t) => e.memberValue.localeCompare(t.memberValue), Vt = (e, t) => {
747
747
  const n = new Array(e.length), s = e.map((i, c) => [i, c]);
748
748
  s.sort(
749
- (i, c) => kt(i[0], c[0])
749
+ (i, c) => qt(i[0], c[0])
750
750
  );
751
751
  const r = [...t];
752
- r.sort(qt);
752
+ r.sort(Qt);
753
753
  let o = 0;
754
754
  for (const i of s) {
755
755
  const c = i[0];
@@ -758,9 +758,9 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
758
758
  o < r.length && r[o].memberValue === c.id && (n[i[1]] = i[0]);
759
759
  }
760
760
  return n.filter((i) => i != null);
761
- }, Vt = (e) => !!e?.some((t) => t.parent), Nn = (e, t, n, s, r = []) => {
761
+ }, Bt = (e) => !!e?.some((t) => t.parent), $n = (e, t, n, s, r = []) => {
762
762
  let o = e || [];
763
- if (Bt(n || [], t || "")) {
763
+ if (Ft(n || [], t || "")) {
764
764
  const i = (n || [])[0].cubeRegions?.find(
765
765
  ({ isIncluded: c }) => c
766
766
  );
@@ -771,50 +771,50 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
771
771
  c ? o = o.length === 0 ? (c.selectionValues || []).map(({ memberValue: a }) => ({
772
772
  id: a,
773
773
  name: a
774
- })) : Qt(o, c.selectionValues) : o = [];
774
+ })) : Vt(o, c.selectionValues) : o = [];
775
775
  }
776
776
  } else r.length !== 0 && (o = o.filter(({ id: i }) => r.includes(i)));
777
- return Vt(e) && (o = Ut(e, o)), o?.map((i) => ({
777
+ return Bt(e) && (o = xt(e, o)), o?.map((i) => ({
778
778
  ...i,
779
779
  name: s ? K(i, s) : i?.name
780
780
  }));
781
- }, Bt = (e, t) => e != null && e.length > 0 && t != null, $n = (e) => {
781
+ }, Ft = (e, t) => e != null && e.length > 0 && t != null, Pn = (e) => {
782
782
  const t = [];
783
783
  return e?.filters?.forEach((n) => {
784
- n.componentCode !== Wt && t.push({
784
+ n.componentCode !== kt && t.push({
785
785
  componentCode: n.componentCode,
786
786
  operator: h.EQUALS,
787
787
  value: n.values.join(",")
788
788
  });
789
789
  }), t;
790
- }, Ft = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i, oe = (e) => {
790
+ }, Gt = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i, oe = (e) => {
791
791
  if (typeof e != "string")
792
792
  throw new TypeError("Invalid argument expected string");
793
- const t = e.match(Ft);
793
+ const t = e.match(Gt);
794
794
  if (!t)
795
795
  throw new Error(`Invalid argument not valid semver ('${e}' received)`);
796
796
  return t.shift(), t;
797
797
  }, ie = (e) => e === "*" || e === "x" || e === "X", ae = (e) => {
798
798
  const t = parseInt(e, 10);
799
799
  return isNaN(t) ? e : t;
800
- }, Gt = (e, t) => typeof e != typeof t ? [String(e), String(t)] : [e, t], Kt = (e, t) => {
800
+ }, Kt = (e, t) => typeof e != typeof t ? [String(e), String(t)] : [e, t], jt = (e, t) => {
801
801
  if (ie(e) || ie(t))
802
802
  return 0;
803
- const [n, s] = Gt(ae(e), ae(t));
803
+ const [n, s] = Kt(ae(e), ae(t));
804
804
  return n > s ? 1 : n < s ? -1 : 0;
805
805
  }, ce = (e, t) => {
806
806
  for (let n = 0; n < Math.max(e.length, t.length); n++) {
807
- const s = Kt(e[n] || "0", t[n] || "0");
807
+ const s = jt(e[n] || "0", t[n] || "0");
808
808
  if (s !== 0)
809
809
  return s;
810
810
  }
811
811
  return 0;
812
- }, jt = (e, t) => {
812
+ }, Ht = (e, t) => {
813
813
  const n = oe(e), s = oe(t), r = n.pop(), o = s.pop(), i = ce(n, s);
814
814
  return i !== 0 ? i : r && o ? ce(r.split("."), o.split(".")) : r || o ? r ? -1 : 1 : 0;
815
- }, Ht = (e, t, n) => {
816
- zt(n);
817
- const s = jt(e, t);
815
+ }, zt = (e, t, n) => {
816
+ Jt(n);
817
+ const s = Ht(e, t);
818
818
  return Se[n].includes(s);
819
819
  }, Se = {
820
820
  ">": [1],
@@ -823,7 +823,7 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
823
823
  "<=": [-1, 0],
824
824
  "<": [-1],
825
825
  "!=": [-1, 1]
826
- }, ue = Object.keys(Se), zt = (e) => {
826
+ }, ue = Object.keys(Se), Jt = (e) => {
827
827
  if (ue.indexOf(e) === -1)
828
828
  throw new Error(`Invalid operator, expected one of ${ue.join("|")}`);
829
829
  }, O = "+", j = (e, t) => {
@@ -836,28 +836,28 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
836
836
  return o.find((a) => a.version === r);
837
837
  const i = o.map(
838
838
  (a) => a.version
839
- ), c = Jt(r, i);
839
+ ), c = Xt(r, i);
840
840
  return o.find(
841
841
  (a) => a.version === c[0]
842
842
  );
843
- }, Jt = (e, t) => {
844
- const n = Xt(e, t);
845
- return n.length > 0 ? [n[0]] : [];
846
843
  }, Xt = (e, t) => {
844
+ const n = Zt(e, t);
845
+ return n.length > 0 ? [n[0]] : [];
846
+ }, Zt = (e, t) => {
847
847
  const n = [];
848
848
  return t.forEach((s) => {
849
- en(e, s) && n.push(s);
849
+ tn(e, s) && n.push(s);
850
850
  }), n;
851
- }, Zt = (e) => {
851
+ }, en = (e) => {
852
852
  const t = e.trim().replace(/\d+\+/, "*"), [n] = t.split("*");
853
853
  return new RegExp(`^${n}`);
854
- }, en = (e, t) => {
854
+ }, tn = (e, t) => {
855
855
  const n = e.trim().replace(/\+/, "");
856
- return Zt(e).test(t) && Ht(t, n, ">=");
856
+ return en(e).test(t) && zt(t, n, ">=");
857
857
  }, H = (e, t) => {
858
- const { concept: n } = tn(e, t);
858
+ const { concept: n } = nn(e, t);
859
859
  return n;
860
- }, tn = (e, t) => {
860
+ }, nn = (e, t) => {
861
861
  if (e == null)
862
862
  return {
863
863
  concept: void 0,
@@ -875,7 +875,7 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
875
875
  };
876
876
  }
877
877
  for (const i of t)
878
- if (nn(i, r, s, o))
878
+ if (sn(i, r, s, o))
879
879
  return {
880
880
  concept: de(i?.concepts || [], n),
881
881
  scheme: i
@@ -884,7 +884,7 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
884
884
  concept: void 0,
885
885
  scheme: void 0
886
886
  };
887
- }, de = (e, t) => e?.find((n) => n.id === t), nn = (e, t, n, s) => e.id === t && e.agencyID === n && e.version === s, Pn = (e = [], t = [], n) => {
887
+ }, de = (e, t) => e?.find((n) => n.id === t), sn = (e, t, n, s) => e.id === t && e.agencyID === n && e.version === s, bn = (e = [], t = [], n) => {
888
888
  const s = n?.conceptIdentity || "", r = H(s, t), o = v(
889
889
  n?.localRepresentation?.enumeration
890
890
  ), i = v(
@@ -892,7 +892,7 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
892
892
  ), c = o || i;
893
893
  if (c != null)
894
894
  return j(c, e);
895
- }, bn = (e, t, n, s) => {
895
+ }, _n = (e, t, n, s) => {
896
896
  const r = t?.find(
897
897
  (o) => o?.id === e?.id
898
898
  )?.values;
@@ -900,7 +900,7 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
900
900
  ...o,
901
901
  name: s ? K(o, s) : o?.name
902
902
  })) || [];
903
- }, sn = (e, t) => {
903
+ }, rn = (e, t) => {
904
904
  const n = t?.dataStructureComponents?.attributeList, s = e?.metadataStructureComponents?.metadataAttributeList;
905
905
  return n?.metadataAttributeUsages?.map((r) => {
906
906
  const o = s?.metadataAttributes?.find(
@@ -912,30 +912,30 @@ const K = (e, t) => e?.names && e?.names[t] || e?.name, ye = (e, t, n) => {
912
912
  isMandatory: Number(o?.minOccurs) > 0
913
913
  };
914
914
  });
915
- }, _n = (e = [], t, n) => {
915
+ }, On = (e = [], t, n) => {
916
916
  const s = v(t?.conceptIdentity) || "", r = H(s, e);
917
917
  return n ? K(r, n) : r?.name ?? r?.id ?? t?.id;
918
918
  };
919
919
  function le(e) {
920
920
  return e?.dataStructures?.[0]?.dataStructureComponents?.dimensionList;
921
921
  }
922
- function On(e) {
922
+ function Ln(e) {
923
923
  return e?.data?.structures?.[0]?.dimensions?.series || [];
924
924
  }
925
- function Ln(e) {
925
+ function Mn(e) {
926
926
  return e?.data?.structures?.[0]?.dimensions?.observation?.[0].values.map((t) => t.value).filter((t) => t != null) || [];
927
927
  }
928
- function Mn(e) {
928
+ function Cn(e) {
929
929
  return e.find(
930
930
  (t) => t.type === M.TIME_DIMENSION
931
931
  );
932
932
  }
933
- const Cn = (e) => {
933
+ const Un = (e) => {
934
934
  const t = /* @__PURE__ */ new Map(), n = e?.dataStructures?.[0], s = e?.metadataStructures?.[0], r = e?.conceptSchemes || [], o = e?.codelists || [];
935
935
  return e && [
936
936
  ...le(e)?.dimensions || [],
937
937
  ...le(e)?.timeDimensions || [],
938
- ...sn(s, n),
938
+ ...rn(s, n),
939
939
  ...n?.dataStructureComponents?.attributeList?.attributes || []
940
940
  ].forEach(
941
941
  (c) => {
@@ -957,9 +957,9 @@ const Cn = (e) => {
957
957
  }));
958
958
  }
959
959
  ), t;
960
- }, Un = (e) => e?.find(
960
+ }, xn = (e) => e?.find(
961
961
  (t) => t.id === G.SERIES_COUNT
962
- )?.title || "", rn = "/api/download", xn = (e, t, n, s, r, o, i) => {
962
+ )?.title || "", on = "/api/download", Yn = (e, t, n, s, r, o, i) => {
963
963
  const c = new URLSearchParams({
964
964
  urn: e,
965
965
  format: t,
@@ -969,18 +969,18 @@ const Cn = (e) => {
969
969
  attribute: s,
970
970
  language: n,
971
971
  isMetadata: i ? "true" : "none"
972
- }).toString(), a = `${rn}?${c}`;
972
+ }).toString(), a = `${on}?${c}`;
973
973
  window.open(a, "_blank");
974
- }, Yn = (e, t) => {
974
+ }, Wn = (e, t) => {
975
975
  const n = [];
976
976
  for (const s of e) {
977
977
  if (s.type !== M.DIMENSION)
978
978
  continue;
979
979
  const r = t.find((o) => o.componentCode === s.id);
980
- r != null && r.values?.length > 0 ? n.push(r.values?.join(Le)) : n.push("*");
980
+ r != null && r.values?.length > 0 ? n.push(r.values?.join(Me)) : n.push("*");
981
981
  }
982
982
  return n.join(".");
983
- }, on = (e, t) => {
983
+ }, an = (e, t) => {
984
984
  if (!e || !e.startPeriod && !e.endPeriod)
985
985
  return null;
986
986
  const n = [], { startPeriod: s, endPeriod: r } = e;
@@ -992,12 +992,12 @@ const Cn = (e) => {
992
992
  return null;
993
993
  const o = t;
994
994
  return n.map(
995
- (i) => `${encodeURIComponent(`c[${o}]`)}${Oe}${encodeURIComponent(i)}`
995
+ (i) => `${encodeURIComponent(`c[${o}]`)}${Le}${encodeURIComponent(i)}`
996
996
  ).join(ge);
997
- }, Wn = (e, t) => {
998
- const n = an(e, t) || null;
999
- return n ? on(n, t?.id) : null;
1000
- }, an = (e, t) => {
997
+ }, kn = (e, t) => {
998
+ const n = cn(e, t) || null;
999
+ return n ? an(n, t?.id) : null;
1000
+ }, cn = (e, t) => {
1001
1001
  const n = t.id, s = e?.filters?.find(
1002
1002
  (a) => a.componentCode === n
1003
1003
  );
@@ -1019,7 +1019,7 @@ const Cn = (e) => {
1019
1019
  start: c,
1020
1020
  end: a
1021
1021
  };
1022
- }, cn = (e, t, n, s = "W") => {
1022
+ }, un = (e, t, n, s = "W") => {
1023
1023
  const r = +e, { start: o, end: i } = Te(e, t, n);
1024
1024
  if (o.getTime() > i.getTime())
1025
1025
  return [];
@@ -1028,10 +1028,10 @@ const Cn = (e) => {
1028
1028
  for (let m = a; m <= d; m++)
1029
1029
  l.push(Ee(r, m, s));
1030
1030
  return l;
1031
- }, un = (e) => {
1031
+ }, dn = (e) => {
1032
1032
  const t = new Date(e);
1033
1033
  return t.setMinutes(t.getMinutes() - t.getTimezoneOffset()), t.toISOString().slice(0, 10);
1034
- }, dn = (e, t, n) => {
1034
+ }, ln = (e, t, n) => {
1035
1035
  const { start: s, end: r } = Te(e, t, n);
1036
1036
  if (s.getTime() > r.getTime())
1037
1037
  return [];
@@ -1041,11 +1041,11 @@ const Cn = (e) => {
1041
1041
  s.getDate()
1042
1042
  ), c = new Date(r.getFullYear(), r.getMonth(), r.getDate());
1043
1043
  for (; i.getTime() < c.getTime(); ) {
1044
- const a = un(i);
1044
+ const a = dn(i);
1045
1045
  o.push(a), i.setDate(i.getDate() + 1);
1046
1046
  }
1047
1047
  return o;
1048
- }, ln = (e) => ({
1048
+ }, mn = (e) => ({
1049
1049
  isDailyExist: !!e?.some(({ memberValue: t }) => t === "D"),
1050
1050
  isWeeklyExist: !!e?.some(({ memberValue: t }) => t === "W"),
1051
1051
  isMonthlyExist: !!e?.some(({ memberValue: t }) => t === "M"),
@@ -1054,15 +1054,15 @@ const Cn = (e) => {
1054
1054
  isYearlyExist: !!e?.some(
1055
1055
  ({ memberValue: t }) => t === "A" || t === "Y"
1056
1056
  )
1057
- }), mn = (e, t, n, s) => {
1057
+ }), fn = (e, t, n, s) => {
1058
1058
  const r = s === 0 ? g(t.toString(), !0)?.getMonth() + 1 : void 0, o = s === e.length - 1 ? g(n.toString())?.getMonth() + 1 || 1 : void 0;
1059
1059
  return { startMonth: r, endMonth: o };
1060
- }, fn = ["FREQUENCY", "FREQ"], kn = (e, t) => {
1060
+ }, gn = ["FREQUENCY", "FREQ"], qn = (e, t) => {
1061
1061
  const n = e?.[0]?.cubeRegions?.[0]?.memberSelection?.find(
1062
- (a) => fn.includes(a.componentId)
1063
- )?.selectionValues, s = ln(n || []), r = t?.startPeriod?.getTime() || 1, o = t?.endPeriod?.getTime() || 1, i = bt(o, r), c = [];
1062
+ (a) => gn.includes(a.componentId)
1063
+ )?.selectionValues, s = mn(n || []), r = t?.startPeriod?.getTime() || 1, o = t?.endPeriod?.getTime() || 1, i = _t(o, r), c = [];
1064
1064
  return i.forEach((a, u) => {
1065
- const d = [], { startMonth: l, endMonth: m } = mn(
1065
+ const d = [], { startMonth: l, endMonth: m } = fn(
1066
1066
  i,
1067
1067
  new Date(r),
1068
1068
  new Date(o),
@@ -1075,123 +1075,136 @@ const Cn = (e) => {
1075
1075
  isSemiAnnualExist: N,
1076
1076
  isYearlyExist: $
1077
1077
  } = s;
1078
- $ && d.push(a.toString()), N && d.push(...It(a, l, m)), I && d.push(
1079
- ...wt(a, l, m, !1)
1080
- ), w && d.push(...Pt(a, l, m)), E && d.push(
1081
- ...cn(a, r.toString(), o.toString())
1078
+ $ && d.push(a.toString()), N && d.push(...Nt(a, l, m)), I && d.push(
1079
+ ...It(a, l, m, !1)
1080
+ ), w && d.push(...bt(a, l, m)), E && d.push(
1081
+ ...un(a, r.toString(), o.toString())
1082
1082
  ), f && d.push(
1083
- ...dn(a, r.toString(), o.toString())
1083
+ ...ln(a, r.toString(), o.toString())
1084
1084
  ), c.push(...d);
1085
1085
  }), c;
1086
1086
  };
1087
+ function hn(e) {
1088
+ const { urn: t } = e.details;
1089
+ return Ie(t.resourceId, t.version, t.agencyId);
1090
+ }
1091
+ function Qn(e) {
1092
+ const t = {};
1093
+ for (const n of e.datasets) {
1094
+ const s = n.dataset, r = hn(s);
1095
+ t[r] = s.details.dimensions;
1096
+ }
1097
+ return t;
1098
+ }
1087
1099
  export {
1088
1100
  G as Annotations,
1089
- Ve as AssignmentStatus,
1090
- hn as AvailabilityApi,
1091
- _e as DATASET_DATA_URL,
1092
- pn as DatasetApi,
1101
+ Be as AssignmentStatus,
1102
+ En as AvailabilityApi,
1103
+ Oe as DATASET_DATA_URL,
1104
+ Dn as DatasetApi,
1093
1105
  M as DimensionType,
1094
- $e as DownloadType,
1095
- An as FREQUENCY_DIMENSION_ID,
1096
- fn as FREQUENCY_DIM_ID,
1097
- Ne as FileColumnsAttribute,
1098
- Me as GET_v3_FILTER_ALL,
1099
- En as GET_v3_FILTER_AND,
1100
- Le as GET_v3_FILTER_OR,
1101
- Ke as OBSERVATION_KEY,
1102
- Be as OccurrenceType,
1103
- Ct as Periods,
1104
- Mt as RepresentationTextType,
1105
- Lt as SDMX_DATA_QUERY_PARAMS,
1106
+ Pe as DownloadType,
1107
+ yn as FREQUENCY_DIMENSION_ID,
1108
+ gn as FREQUENCY_DIM_ID,
1109
+ $e as FileColumnsAttribute,
1110
+ Ce as GET_v3_FILTER_ALL,
1111
+ pn as GET_v3_FILTER_AND,
1112
+ Me as GET_v3_FILTER_OR,
1113
+ je as OBSERVATION_KEY,
1114
+ Fe as OccurrenceType,
1115
+ Ut as Periods,
1116
+ Ct as RepresentationTextType,
1117
+ Mt as SDMX_DATA_QUERY_PARAMS,
1106
1118
  O as SINGLE_WILDCARD_SYMBOL,
1107
- Dn as SdmxApiClient,
1119
+ An as SdmxApiClient,
1108
1120
  me as SdmxAvailabilityMode,
1109
1121
  S as SdmxDataFormat,
1110
1122
  fe as SdmxDetails,
1111
1123
  L as SdmxReferences,
1112
1124
  h as SeriesFilterOperator,
1113
- Wt as TIME_PERIOD,
1114
- xt as TIME_PERIOD_END,
1115
- Yt as TIME_PERIOD_START,
1116
- ot as dailyPattern,
1117
- Je as decodeDimensionId,
1118
- Pn as findCodelistByDimension,
1125
+ kt as TIME_PERIOD,
1126
+ Yt as TIME_PERIOD_END,
1127
+ Wt as TIME_PERIOD_START,
1128
+ Qn as buildDatasetDimensionsMetadataMap,
1129
+ it as dailyPattern,
1130
+ Xe as decodeDimensionId,
1131
+ bn as findCodelistByDimension,
1119
1132
  X as generateDatasetDataRequest,
1120
- gn as generateShortUrn,
1121
- kn as getAdditionalColumns,
1122
- In as getAnnotationPeriod,
1133
+ Ie as generateShortUrn,
1134
+ qn as getAdditionalColumns,
1135
+ Nn as getAnnotationPeriod,
1123
1136
  j as getArtifactByUrnWithWildCard,
1124
- yn as getAttachedDimensionsSeriesByDimension,
1125
- Fe as getAttachedDimensionsSeriesByTsId,
1137
+ Sn as getAttachedDimensionsSeriesByDimension,
1138
+ Ge as getAttachedDimensionsSeriesByTsId,
1126
1139
  he as getAttachedDimensionsSeriesKey,
1127
- Ge as getAttributeValueFromDataQueryResponse,
1128
- bn as getAvailableCodes,
1129
- Nn as getAvailableCodesFromConstrains,
1140
+ Ke as getAttributeValueFromDataQueryResponse,
1141
+ _n as getAvailableCodes,
1142
+ $n as getAvailableCodesFromConstrains,
1130
1143
  we as getChildParsedUrn,
1131
1144
  H as getConcept,
1132
1145
  de as getConceptByUrn,
1133
- tn as getConceptWithScheme,
1134
- sn as getConvertedMetaAttributes,
1135
- ct as getDailyRegExp,
1136
- dn as getDaysColumns,
1137
- _n as getDimensionTitle,
1146
+ nn as getConceptWithScheme,
1147
+ rn as getConvertedMetaAttributes,
1148
+ ut as getDailyRegExp,
1149
+ ln as getDaysColumns,
1150
+ On as getDimensionTitle,
1138
1151
  le as getDimensions,
1139
- Ut as getFilteredItemsWithParents,
1140
- $n as getFiltersDtoFromDataQuery,
1152
+ xt as getFilteredItemsWithParents,
1153
+ Pn as getFiltersDtoFromDataQuery,
1141
1154
  R as getISOWeek,
1142
1155
  v as getKeyFromUrn,
1143
- wn as getLastUpdatedTime,
1156
+ In as getLastUpdatedTime,
1144
1157
  ne as getLastWeekNumberOfYear,
1145
1158
  K as getLocalizedName,
1146
- Pt as getMonthlyData,
1147
- vn as getMonthlyDataByQuarter,
1159
+ bt as getMonthlyData,
1160
+ Rn as getMonthlyDataByQuarter,
1148
1161
  Y as getMonthlyRegExp,
1149
1162
  De as getParsedEndPeriodDate,
1150
- Sn as getParsedResponse,
1163
+ Tn as getParsedResponse,
1151
1164
  pe as getParsedStartPeriodDate,
1152
1165
  g as getPeriodDate,
1153
- ln as getPeriods,
1154
- Tn as getQuarterByMonth,
1166
+ mn as getPeriods,
1167
+ vn as getQuarterByMonth,
1155
1168
  k as getQuarterlyRegExp,
1156
- wt as getQuartersData,
1157
- on as getQueryTimePeriodFilters,
1158
- Pe as getRequestAcceptHeader,
1159
- Jt as getResolvedVersionBySingleWildcard,
1160
- It as getSemiAnnualData,
1161
- at as getSemiAnnuallyRegExp,
1169
+ It as getQuartersData,
1170
+ an as getQueryTimePeriodFilters,
1171
+ be as getRequestAcceptHeader,
1172
+ Xt as getResolvedVersionBySingleWildcard,
1173
+ Nt as getSemiAnnualData,
1174
+ ct as getSemiAnnuallyRegExp,
1162
1175
  _ as getSeriesAttributes,
1163
- je as getSeriesName,
1164
- Cn as getStructureComponentsMap,
1165
- On as getStructureDimensions,
1166
- Mn as getTimeDimension,
1167
- Ln as getTimePeriods,
1168
- Wn as getTimeQueryFilter,
1169
- an as getTimeRangeFromAttachment,
1170
- Un as getTimeSeriesCount,
1171
- Yn as getTimeSeriesFilterKey,
1172
- ze as getTimeSeriesId,
1176
+ He as getSeriesName,
1177
+ Un as getStructureComponentsMap,
1178
+ Ln as getStructureDimensions,
1179
+ Cn as getTimeDimension,
1180
+ Mn as getTimePeriods,
1181
+ kn as getTimeQueryFilter,
1182
+ cn as getTimeRangeFromAttachment,
1183
+ xn as getTimeSeriesCount,
1184
+ Wn as getTimeSeriesFilterKey,
1185
+ Je as getTimeSeriesId,
1173
1186
  Ee as getWeekCode,
1174
- ft as getWeeklyPeriodEndDate,
1175
- mt as getWeeklyPeriodStartDate,
1176
- dt as getWeeklyRegExp,
1177
- cn as getWeeksColumns,
1178
- Zt as getWildCardRegexp,
1187
+ gt as getWeeklyPeriodEndDate,
1188
+ ft as getWeeklyPeriodStartDate,
1189
+ lt as getWeeklyRegExp,
1190
+ un as getWeeksColumns,
1191
+ en as getWildCardRegexp,
1179
1192
  Te as getYearPeriod,
1180
1193
  C as getYearlyRegExp,
1181
- bt as getYears,
1182
- ut as isDaily,
1194
+ _t as getYears,
1195
+ dt as isDaily,
1183
1196
  W as isMonthly,
1184
1197
  q as isQuarterly,
1185
1198
  x as isSemiAnnually,
1186
1199
  Q as isWeekly,
1187
- en as isWildCardVersionCorrect,
1200
+ tn as isWildCardVersionCorrect,
1188
1201
  U as isYearly,
1189
- it as monthlyPattern,
1190
- xn as openDownloadWindow,
1191
- tt as quarterPattern,
1192
- st as semiAnnuallyPattern,
1193
- Rn as sortPeriods,
1202
+ at as monthlyPattern,
1203
+ Yn as openDownloadWindow,
1204
+ nt as quarterPattern,
1205
+ rt as semiAnnuallyPattern,
1206
+ wn as sortPeriods,
1194
1207
  D as splitUrn,
1195
- nt as weeklyPattern,
1196
- rt as yearlyPattern
1208
+ st as weeklyPattern,
1209
+ ot as yearlyPattern
1197
1210
  };
@@ -0,0 +1,33 @@
1
+ export interface DeploymentDatasetsResponseData {
2
+ datasets: ChannelDataset[];
3
+ }
4
+ export interface ChannelDataset {
5
+ dataset: Dataset;
6
+ }
7
+ export interface Dataset {
8
+ details: DatasetDetails;
9
+ }
10
+ export interface DatasetDetails {
11
+ urn: Urn;
12
+ dimensions: Record<string, DimensionConfig>;
13
+ }
14
+ export interface Urn {
15
+ version: string;
16
+ agencyId: string;
17
+ resourceId: string;
18
+ }
19
+ export type DimensionTypeKey = 'NON_INDICATOR' | 'INDICATOR' | 'TIME_PERIOD' | (string & {});
20
+ export interface DimensionConfig {
21
+ alias: string | null;
22
+ subtype?: string | null;
23
+ allValues: DimensionAllValues | null;
24
+ dimensionType: DimensionTypeKey;
25
+ }
26
+ export interface DimensionAllValues {
27
+ id: string;
28
+ name: string;
29
+ description: string;
30
+ }
31
+ export type ShortUrn = string;
32
+ export type DimensionKey = string;
33
+ export type DatasetDimensionsMetadataMap = Record<ShortUrn, Record<DimensionKey, DimensionConfig>>;
package/models/index.d.ts CHANGED
@@ -12,3 +12,4 @@ export * from './structural-metadata/data-structure';
12
12
  export * from './structural-metadata/dataflow';
13
13
  export * from './structural-metadata/representation';
14
14
  export * from './structural-metadata-base';
15
+ export * from './datasets-metadata';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epam/statgpt-sdmx-toolkit",
3
- "version": "0.2.0-rc.42",
3
+ "version": "0.2.0-rc.43",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": {
@@ -14,8 +14,8 @@
14
14
  "module": "./index.mjs",
15
15
  "types": "./index.d.ts",
16
16
  "dependencies": {
17
- "@epam/statgpt-dial-toolkit": "0.2.0-rc.42",
18
- "@epam/statgpt-shared-toolkit": "0.2.0-rc.42",
17
+ "@epam/statgpt-dial-toolkit": "0.2.0-rc.43",
18
+ "@epam/statgpt-shared-toolkit": "0.2.0-rc.43",
19
19
  "compare-versions": "^6.1.1"
20
20
  }
21
21
  }
@@ -0,0 +1,2 @@
1
+ import { DeploymentDatasetsResponseData, DatasetDimensionsMetadataMap } from '../models';
2
+ export declare function buildDatasetDimensionsMetadataMap(data: DeploymentDatasetsResponseData): DatasetDimensionsMetadataMap;
package/utils/index.d.ts CHANGED
@@ -20,3 +20,4 @@ export * from './download';
20
20
  export * from './get-filtered-items';
21
21
  export * from './query-filters';
22
22
  export * from './get-periods';
23
+ export * from './build-dataset-dimensions-metadata-map';