@epam/statgpt-sdmx-toolkit 0.7.0-dev.19 → 0.7.0-dev.20

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 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Dt=require("@epam/statgpt-dial-toolkit"),g=require("@epam/statgpt-shared-toolkit"),Et=require("compare-versions"),At=require("date-fns"),R=e=>{if(e!=null){const t=e.split("=");return t.length===1?e:t[1]}},A=e=>{if(e==null)return{};const t=R(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},j=e=>{const[t,n]=e.split(")."),{agency:s,id:r,version:o}=A(t+")");return{childId:n,agency:s,id:r,version:o}},_=(e,t,n)=>{const s=t===""?"":`(${t})`;return`${n}:${e}${s}`};var w=(e=>(e.DESCENDANTS="descendants",e.NONE="none",e.ALL="all",e))(w||{}),z=(e=>(e.EXACT="exact",e.AVAILABLE="available",e))(z||{});function yt(e){return{data:{codelists:e.data.codelists,conceptSchemes:e.data.conceptSchemes,dataConstraints:e.data.dataConstraints?.map(Tt),dataflows:e.data.dataflows,dataStructures:e.data.dataStructures,metadataStructures:e.data.metadataStructures}}}function Tt(e){return{...e,cubeRegions:e.cubeRegions?.map(St)}}function St(e){return{isIncluded:e.include,memberSelection:e.keyValues.map(Rt)}}function Rt(e){return{included:e.include,componentId:e.id,selectionValues:e.values.map(vt)}}function vt(e){return{memberValue:e.value}}const It=(e="",t="",n="")=>`sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;class Pt{constructor(t){this.client=t}async getConstraints(t,n,s){const{agency:r,id:o,version:i}=A(t),c={filters:n||[],mode:z.AVAILABLE,references:w.NONE},a=It(r,o,i),d=!!this.client.config.sdmxProxyUrl,u=d||this.client.config.isDialProxyMode,l=d?this.client.config.sdmxProxyUrl:this.client.config.constrainsApiUrl||this.client.config.apiUrl;if(u){const m=await this.client.postRequest(a,{body:c},l,s);return yt(m)}return await this.client.postRequest(a,{body:c},l,s)}}var E=(e=>(e.CSV="csv",e.JSON="json",e.XML="xml",e))(E||{}),pe=(e=>(e.ID="id",e.NAME="name",e.ID_NAME="both",e))(pe||{}),De=(e=>(e.FULL_DATASET="full",e.DATA_IN_TABLE="query",e))(De||{});const Ee=(e,t)=>{switch(e){case E.CSV:return ue("application/vnd.sdmx.data+csv;version=2.0.0",t);case E.XML:return"application/vnd.sdmx.data+xml;version=3.0.0";case E.JSON:return"application/vnd.sdmx.data+json;version=2.1";default:return ue("application/vnd.sdmx.data+csv;version=2.0.0",t)}},Ae=e=>{switch(e){case E.CSV:return"text/csv; charset=utf-8";case E.XML:return"application/xml; charset=utf-8";case E.JSON:return"application/json; charset=utf-8";default:return"text/csv; charset=utf-8"}},ue=(e,t)=>`${e}; labels=${t}`;var J=(e=>(e.REFERENCE_PARTIAL="referencepartial",e.FULL="full",e))(J||{});const _t="all",ye="sdmx/3.0/data/dataflow",wt="&",de=":",bt="=",X="+",Nt=",",Te="*",q=(e,t,n)=>{const{filterKey:s,timeFilter:r}=n,{agency:o,id:i,version:c}=A(e),a=[r||"",t].filter(u=>!!u).join(wt);return`${`${ye}/${o}/${i}/${c}`}/${s||Te}?${a}`},Mt=(e="",t="",n="",s=w.DESCENDANTS)=>`sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${J.REFERENCE_PARTIAL}`;class Ct{constructor(t){this.client=t}async getDataSet(t,n,s){const{agency:r,id:o,version:i}=A(t);return await this.client.getRequest(Mt(r,o,i,n),void 0,s)}async getDatasetData(t,n,s){const r=new URLSearchParams({includeHistory:"false",limit:"1000",attributes:_t,dimensionAtObservation:"TIME_PERIOD"}).toString(),o=q(t,r,n);return await this.client.getRequest(o,void 0,s)}async downloadDataSet(t,n,s,r,o,i,c=!1,a){const d=new URLSearchParams({compress:"false",attributes:c?"all":"none",limit:"1000"}).toString(),u=q(t,d,o);return this.client.streamRequest(u,{method:"GET",headers:{Accept:Ee(n,r),"Accept-language":s}},i,a,Ae(n))}}class $t{constructor(t){this.config=t,console.info("SdmxApiClient initialized",{apiUrl:t.apiUrl||"NOT SET"})}async getRequest(t,n,s){return this.request(t,{...n,method:"GET"},void 0,s)}async postRequest(t,n,s,r){return this.request(t,{...n,method:"POST"},s,r)}async streamRequest(t,n,s,r,o){const i=`${this.config.apiUrl}/${t}`,c=this.buildHeaders(r,n.headers),a=new ReadableStream({async start(u){try{const l=await g.sendRequest(i,c,n);if(!l.ok){const y=await l.text();throw console.error(`Fetch failed! Status: ${l.status}, Body: ${y}`),new Error(`Fetch failed with status ${l.status}`)}const m=l.body?.getReader();if(!m)throw new Error("Failed to create stream reader");const f=new Uint8Array([239,187,191]);u.enqueue(f);const D=async()=>{const{done:y,value:S}=await m.read();y?u.close():(u.enqueue(S),await D())};D()}catch(l){u.error(l)}}}),d=new Headers({"Content-Disposition":`attachment; filename=${encodeURIComponent(s)}`,...o?{"Content-Type":o}:{}});return new Response(a,{headers:d})}async request(t,n,s,r){const o=Date.now(),i=`${s||this.config.apiUrl}/${t}`,c=this.buildHeaders(r,n.headers);this.addInfoRequestLog("API Request",i,n,c);try{const a=await g.sendRequest(i,c,n),d=Date.now()-o;let u;const l=await a.text();try{u=l?JSON.parse(l):{}}catch{if(this.addErrorRequestParsing(i,n,a,d,l),!a.ok)throw new Error(`API request failed: ${a.status} ${a.statusText} - ${l.substring(0,100)}`);u={data:l}}if(!a.ok){this.addErrorRequestLog(i,n,a,d,u);const m=Dt.getErrorMessage(u,a);throw new Error(`API request failed: ${m}`)}return u}catch(a){const d=Date.now()-o;throw console.error("API Request Exception",{method:n.method,url:i,duration:`${d}ms`,error:a instanceof Error?a.message:String(a)}),a}}buildHeaders(t,n){if(this.config.isDialProxyMode)return{...g.getHeaders(this.config.dialApiKey,{jwt:t}),...n};const s={...g.getHeaders(void 0,{jwt:this.config.jwt}),...n};return this.config.apiKey!=null&&(s[g.OCP_APIM_SUBSCRIPTION_KEY_HEADER]=this.config.apiKey),s}addInfoRequestLog(t,n,s,r){const o={method:s.method||"GET",url:n,headers:g.sanitizeHeaders(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"})}}var b=(e=>(e.LAST_UPDATE_AT="lastUpdatedAt",e.SERIES_COUNT="series_count",e))(b||{});function Lt(e){return e?.annotations?.find(t=>{if(t.id===b.LAST_UPDATE_AT)return t})?.value}const N=(e,t)=>e?.names&&e?.names[t]||e?.name,Se=(e,t,n)=>{if(!(!e||t?.has(e?.id))&&(t?.set(e?.id,e),e?.parent)){const s=n?.get(e?.parent);Se(s,t,n)}},Re=(e,t)=>{const n=new Map,s=new Map(e?.map(r=>[r.id,r]));return t?.forEach(r=>{Se(r,n,s)}),Array.from(n?.values())};var ve=(e=>(e.C="c",e))(ve||{}),h=(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||{}),Ie=(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))(Ie||{}),Pe=(e=>(e.ANNUAL="A",e.QUARTERLY="Q",e.MONTHLY="M",e))(Pe||{});const Ut=["FREQ","FREQUENCY"],_e="TIME_PERIOD",we="time_period_start",be="time_period_end",Ot=e=>{const t=e?.find(o=>o.id===we),n=e?.find(o=>o.id===be),s=n?.title?new Date(n?.title):null;return{startPeriod:t?.title?new Date(t?.title):null,endPeriod:s}},xt=(e,t)=>e.id.localeCompare(t.id),Yt=(e,t)=>e.memberValue.localeCompare(t.memberValue),Ft=(e,t)=>{const n=new Array(e.length),s=e.map((i,c)=>[i,c]);s.sort((i,c)=>xt(i[0],c[0]));const r=[...t];r.sort(Yt);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)},Wt=e=>!!e?.some(t=>t.parent),Qt=(e,t,n,s,r=[])=>{let o=e||[];if(Vt(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})):Ft(o,c.selectionValues):o=[]}}else r.length!==0&&(o=o.filter(({id:i})=>r.includes(i)));return Wt(e)&&(o=Re(e,o)),o?.map(i=>({...i,name:s?N(i,s):i?.name}))},Vt=(e,t)=>e!=null&&e.length>0&&t!=null,Ne=e=>{const t=[];return e?.filters?.forEach(n=>{n.componentCode!==_e&&t.push({componentCode:n.componentCode,operator:h.EQUALS,value:n.values.join(",")})}),t},kt=e=>{const t=new Map;return e?.forEach(n=>{t.set(n.urn,Ne(n))}),t},I="+",M=(e,t)=>{const{agency:n,id:s,version:r}=A(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=Me(r,i);return o.find(a=>a.version===c[0])},Me=(e,t)=>{const n=qt(e,t);return n.length>0?[n[0]]:[]},qt=(e,t)=>{const n=[];return t.forEach(s=>{$e(e,s)&&n.push(s)}),n},Ce=e=>{const t=e.trim(),n=t.indexOf("+");if(n<=0)return"";let s=n;for(;s>0&&t[s-1]>="0"&&t[s-1]<="9";)s--;return s>0?t.slice(0,s):""},$e=(e,t)=>{const n=e.trim().replace(/\+/,""),s=Ce(e);return t.startsWith(s)&&Et.compare(t,n,">=")},C=(e,t)=>{const{concept:n}=Le(e,t);return n},Le=(e,t)=>{if(e==null)return{concept:void 0,scheme:void 0};const{childId:n,agency:s,id:r,version:o}=j(e);if(o?.includes(I)){const i=M(e,t);return{concept:B(i?.concepts||[],n),scheme:i}}for(const i of t)if(Bt(i,r,s,o))return{concept:B(i?.concepts||[],n),scheme:i};return{concept:void 0,scheme:void 0}},B=(e,t)=>e?.find(n=>n.id===t),Bt=(e,t,n,s)=>e.id===t&&e.agencyID===n&&e.version===s,Gt=(e=[],t=[],n)=>{const s=n?.conceptIdentity||"",r=C(s,t),o=R(n?.localRepresentation?.enumeration),i=R(r?.coreRepresentation?.enumeration),c=o||i;if(c!=null)return M(c,e)},Ue=(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:d,decodedSeriesKey:u}=Z(e,t,a);i[c.id]={values:o?.[d]||[],decodedSeriesKey:u,codedSeriesKey:d}}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,d=t[a],u=r[a].values.findIndex(l=>l.id===d||l.value===d)||0;o[a]=u>=0?u:d,i[a]=d}),{codedSeriesKey:o.join(":"),decodedSeriesKey:i.join(":")}},Kt=(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),d=new Array(c?.length);d[a]=n||"";const u={};for(const l of o){const m=l.relationship.dimensions,{codedSeriesKey:f,decodedSeriesKey:D}=Z(e,d,m);u[l.id]={values:i?.[f]||[],decodedSeriesKey:D,codedSeriesKey:f}}return u},Oe=(e,t)=>{if(t==null)return;const n=e.values?.[t];return n??(t instanceof Array?{values:t}:{value:t.toString()})},Ht=(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?N(o,s):o?.name}))||[]},xe=(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,id:o?.id??r.metadataAttributeReference,attributeRelationship:r.attributeRelationship,isMandatory:Number(o?.minOccurs)>0}})},jt=(e=[],t,n)=>{const s=R(t?.conceptIdentity)||"",r=C(s,e);return n?N(r,n):r?.name??r?.id??t?.id};var Ye=(e=>(e.CONDITIONAL="Conditional",e.MANDATORY="Mandatory",e))(Ye||{}),$=(e=>(e.DIMENSION="Dimension",e.MEASURE_DIMENSION="MeasureDimension",e.TIME_DIMENSION="TimeDimension",e))($||{}),Fe=(e=>(e.UNBOUNDED="unbounded",e))(Fe||{});function G(e){return e?.dataStructures?.[0]?.dataStructureComponents?.dimensionList}function zt(e){return e?.data?.structures?.[0]?.dimensions?.series||[]}function Jt(e){return e?.data?.structures?.[0]?.dimensions?.observation?.[0].values.map(t=>t.value?t.value:t.id).filter(t=>t!=null)||[]}function Xt(e){return e.find(t=>t.type===$.TIME_DIMENSION)}const Zt=e=>{const t=new Map,n=e?.dataStructures?.[0],s=e?.metadataStructures?.[0],r=e?.conceptSchemes||[],o=e?.codelists||[];if(e){const i=xe(s,n);[...G(e)?.dimensions||[],...G(e)?.timeDimensions||[],...i,...n?.dataStructureComponents?.attributeList?.attributes||[]].forEach(a=>{const d=C(a?.conceptIdentity,r),u=a?.localRepresentation?.enumeration||d?.coreRepresentation?.enumeration,l=M(u,o);a?.id&&(u?t.set(a?.id,{...l,name:d?.name,names:d?.names}):t.set(a?.id,{id:a?.id,name:d?.name,names:d?.names}))})}return t},en=e=>e?.find(t=>t.id===b.SERIES_COUNT)?.title||"",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 tn(e){const t=new Date(e),s=-((t.getDay()+6)%7)+3;return t.setDate(t.getDate()+s),new Date(t.valueOf())}function K(e,t="W"){const n=`${e}-12-31`,s=v(new Date(n),t);if(s.weekYear===e)return s.weekNumber;const r=`${e}-12-24`;return v(new Date(r),t).weekNumber}function se(e,t,n="W"){return`${e}-${n}${t<10?"0"+t:t}`}function v(e,t="W"){const n=tn(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 We(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te-3*ee;return new Date(r)}function Qe(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te+3*ee;return new Date(r)}const le="/api/download",nn=6e4,sn=/[\x00-\x1F\x7F<>:"/\\|?*]/g,re=e=>e.normalize("NFKC").replace(sn,"_").replace(/_+/g,"_").replace(/\s+/g," ").replace(/^[._ ]+/,"").trim()||"download",rn=(e,t,n,s,r,o,i)=>{const c=new URL(le,window.location.origin);if(c.search=new URLSearchParams({urn:e,format:t,compress:"false",filename:o,filters:JSON.stringify(r),attribute:s,language:n,isMetadata:i?"true":"none"}).toString(),c.origin!==window.location.origin||c.pathname!==le)throw new Error("Invalid download URL");return c.toString()},on=(e,t)=>{const n=URL.createObjectURL(e),s=document.createElement("a");s.href=n,s.download=re(t),s.rel="noopener noreferrer",s.click(),window.setTimeout(()=>URL.revokeObjectURL(n),nn)},an=async(e,t,n,s,r,o,i,c)=>{const a=re(o),d=rn(e,t,n,s,r,a,i),u=await fetch(d,{method:"GET",credentials:"same-origin",signal:c});if(!u.ok){const m=await u.text();throw new Error(`Download request failed: ${u.status} ${u.statusText}${m?` - ${m}`:""}`)}const l=await u.blob();c?.aborted||on(l,a)},cn=(e,t)=>{const n=[];for(const s of e){if(s.type!==$.DIMENSION)continue;const r=t.find(o=>o.componentCode===s.id);r!=null&&r.values?.length>0?n.push(r.values?.join(X)):n.push("*")}return n.join(".")},Ve=(e,t)=>{if(!e||!e.startPeriod&&!e.endPeriod)return null;const n=[],{startPeriod:s,endPeriod:r}=e;if(s&&n.push(`${h.GREATER_OR_EQUAL}${de}${me(s)}`),r&&n.push(`${h.LESS_OR_EQUAL}${de}${me(r)}`),n.length===0)return null;const o=t,i=n.join(X);return`${encodeURIComponent(`c[${o}]`)}${bt}${encodeURIComponent(i)}`},me=e=>At.format(e,"yyyy-MM-dd"),un=(e,t)=>{const n=ke(e,t)||null;return n?Ve(n,t?.id):null},ke=(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===h.LESS_OR_EQUAL||o===h.LESS)return{startPeriod:null,endPeriod:g.getTimePeriod(r[0])};if(o===h.GREATER_OR_EQUAL||o===h.GREATER)return{startPeriod:g.getTimePeriod(r[0]),endPeriod:null};const i=g.getTimePeriod(r[0]),c=g.getTimePeriod(r[1]);return{startPeriod:i,endPeriod:c}},qe="Observation",dn=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 d in i){const u=[],{name:l,parsedTimeSeriesValue:m}=Be(d,c),f=i[d],D=f.attributes||[];if(Object.keys(f).length===0){a.push({name:l,parsedTimeSeriesValue:m,values:u,attributes:[],dataSetAttrs:[]});continue}u.push(...mn(f,n));const y=P(s?.series||[],T=>D[T]),S=gn(n.attributes?.dataSet||[],t[0].attributes?.filter(T=>T!=null)||[]),V=Ue(e,m),k=o.map((T,ht)=>{const ce=V[T.id],pt=Oe(T,ce.values[ht]);return{attribute:T,dimensionGroupValue:pt,dimensionGroupData:ce}});a.push({name:l,parsedTimeSeriesValue:m,values:u,attributes:y,dataSetAttrs:S,dimensionGroupAttributes:k})}return a},Be=(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:Ge(s),parsedTimeSeriesValue:s}},P=(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?ln(o,r):void 0;n.push({name:r.id,value:i})}return n},ln=(e,t)=>{const n=t.values[e];return n==null?typeof e=="object"?e:e.toString():n?.id||n?.value||n?.ids||n?.values},Ge=e=>e.map(t=>t?Ke(t):"").join("."),Ke=e=>e.replace(/\./g,"|.").replace(/:/g,"|:"),mn=(e,t)=>{const n=t.measures?.observation?.length;if(e.observations==null)return[{values:ge(e,t.measures),obsAttributes:P(t.attributes?.observation||[],i=>e[i+n]),dimensionAtObservation:qe}];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:ge(s[i],t.measures),obsAttributes:P(t.attributes?.observation||[],a=>s[i][a+n])})}return o},ge=(e,t)=>t?.observation?.map((n,s)=>({name:n.id,value:e[s]}))||[],gn=(e,t)=>e.reduce((n,s,r)=>{const o=t[r];return fn(n,s,o,""),n},[]),fn=(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||""})},He=/^[0-9][0-9][0-9][0-9]-Q[1-4]$/,je=/^[0-9][0-9][0-9][0-9]-W(0[1-9]|[1-4][0-9]|5[0-3])$/,ze=/^[0-9][0-9][0-9][0-9]-S[1-2]$/,Je=/^[0-9][0-9][0-9][0-9]$/,Xe=/^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/,Ze=/^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/,L=e=>Je.exec(e),U=e=>!!L(e),et=e=>ze.exec(e),O=e=>!!et(e),x=e=>Ze.exec(e),Y=e=>!!x(e),F=e=>He.exec(e),W=e=>!!F(e),tt=e=>Xe.exec(e),nt=e=>!!tt(e),st=e=>je.exec(e),Q=e=>!!st(e);function oe(e){return U(e)?hn(e):O(e)?Dn(e):W(e)?An(e):Y(e)?Tn(e):Q(e)?We(e):Rn(e)}function ie(e){return U(e)?pn(e):O(e)?En(e):W(e)?yn(e):Y(e)?Sn(e):Q(e)?Qe(e):vn(e)}function hn(e){const t=L(e);if(t)return new Date(Number(t[0]),0,1)}function pn(e){const t=L(e);if(t)return new Date(Number(t[0])+1,0,1)}function Dn(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 En(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 An(e){const t=F(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 yn(e){const t=F(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 Tn(e){const t=x(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s-1,1)}function Sn(e){const t=x(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s,1)}const Rn=e=>new Date(`${e}T00:00:00`),vn=e=>{const t=new Date(`${e}T23:59:00`);return t.setMinutes(t.getMinutes()+1),t},In=1,rt=(e,t,n,s=!0,r="Q")=>{const o=[],i=t&&t>3?Mn(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},ot=(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},Pn=e=>Math.ceil(e/3),it=(e,t,n="M")=>`${e}-${n}${t.toString().padStart(2,"0")}`,_n=(e,t,n="M")=>{const s=[];for(let r=t;r<=12;r++)s.push(it(e,r,n));return s},wn=(e,t,n,s="M")=>{const r=[];for(let o=t;o<n;o++)r.push(it(e,o,s));return r},at=(e,t,n,s="M")=>{const r=t||1,o=n==null,i=n||12;return o?_n(e,r,s):wn(e,r,i,s)},bn=(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[]}},ct=(e,t)=>{const n=p(t,!0),s=p(e),r=n.getFullYear(),o=s.getFullYear(),i=n.getTime()<=s.getTime()?o+In-r:0;return Array.from({length:i},(a,d)=>r+d)},p=(e,t=!1)=>{const n=Nn(e,t);return n?(n.getTimezoneOffset()>0&&n.setMinutes(n.getMinutes()+n.getTimezoneOffset()),n):new Date},Nn=(e,t=!1)=>{const n=Number(e);return e.toString().length!==13?t?oe(e):ie(e):isNaN(n)?new Date(`${e}T00:00:00.000Z`):new Date(n)},Mn=(e,t)=>t?Math.floor((e+1)/3):Math.ceil((e+1)/3),Cn=(e,t)=>{const n=he(e)-he(t);if(n===0&&e!==t){const s=fe(e),r=fe(t);return s-r}return n},fe=e=>U(e)?6:O(e)?5:W(e)?4:Y(e)?3:Q(e)?2:nt(e)?1:0,he=(e,t=!1)=>(t?oe(e):ie(e))?.getTime()||0,ae=(e,t,n)=>{const s=p(t,!0),r=p(n),o=p(e,!0),i=p(e),c=s.getTime()>o.getTime()?s:o,a=r.getTime()<i.getTime()?r:i;return{start:c,end:a}},ut=(e,t,n,s="W")=>{const r=+e,{start:o,end:i}=ae(e,t,n);if(o.getTime()>i.getTime())return[];const c=v(o,s),a=c.weekYear===r?c.weekNumber:c.weekYear<r?1:K(r,s),d=v(i,s),u=d.weekYear===r?d.weekNumber:d.weekYear>r?K(r,s):1,l=[];if(a<u)for(let m=a;m<=u;m++)l.push(se(r,m,s));return l},$n=e=>{const t=new Date(e);return t.setMinutes(t.getMinutes()-t.getTimezoneOffset()),t.toISOString().slice(0,10)},dt=(e,t,n)=>{const{start:s,end:r}=ae(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=$n(i);o.push(a),i.setDate(i.getDate()+1)}return o},lt=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")}),Ln=(e,t,n,s)=>{const r=s===0?p(t.toString(),!0)?.getMonth()+1:void 0,o=s===e.length-1?p(n.toString())?.getMonth()+1||1:void 0;return{startMonth:r,endMonth:o}},mt=["FREQUENCY","FREQ"],Un=(e,t)=>{const n=e?.[0]?.cubeRegions?.[0]?.memberSelection?.find(a=>mt.includes(a.componentId))?.selectionValues,s=lt(n||[]),r=t?.startPeriod?.getTime()||1,o=t?.endPeriod?.getTime()||1,i=ct(o,r),c=[];return i.forEach((a,d)=>{const u=[],{startMonth:l,endMonth:m}=Ln(i,new Date(r),new Date(o),d),{isDailyExist:f,isWeeklyExist:D,isMonthlyExist:y,isQuarterlyExist:S,isSemiAnnualExist:V,isYearlyExist:k}=s;k&&u.push(a.toString()),V&&u.push(...ot(a,l,m)),S&&u.push(...rt(a,l,m,!1)),y&&u.push(...at(a,l,m)),D&&u.push(...ut(a,r.toString(),o.toString())),f&&u.push(...dt(a,r.toString(),o.toString())),c.push(...u)}),c};function On(e){const{urn:t}=e.details;return _(t.resourceId,t.version,t.agencyId)}function xn(e){const t={};for(const n of e.datasets){const s=n.dataset,r=On(s);t[r]=s.details.dimensions}return t}function Yn(e){return e?.codelists?.length?e.codelists.map(t=>({id:t.id,agencyID:t.agencyID??"",version:t.version??"",name:t.name,codes:t.codes?.map(n=>({id:n.id,name:n.name,description:n.description}))})):(e?.glossaries??[]).map(t=>({id:t.id,agencyID:t.agencyID??"",version:t.version??"",name:t.name,codes:t.terms?.map(n=>({id:n.id,name:n.name,description:n.description}))}))}function gt(e,t){const n=s=>{const r=s.indexOf("(");if(r===-1)return s;const o=s.indexOf(")",r);return o===-1?s:s.slice(0,r+1)+"*"+s.slice(o)};return n(e)===n(t)}function H(e){return _(e.id,e.version??"",e.agencyID??"")}function ft(e,t,n){t?.forEach(s=>{const{childId:r,agency:o,id:i,version:c}=j(s.code),a=_(i,c,o),d=n?.find(l=>gt(a,H(l))),u=d?.codes?.find(l=>l.id===r);if(u!=null){const l=s.code.replace(a,H(d));e.push({...u,code:l})}ft(e,s.hierarchicalCodes,n)})}function Fn(e,t){const n=[];return ft(n,e?.hierarchicalCodes,t),n}function Wn(e){const t={};return e?.forEach(n=>{t[H(n)]=n.codes}),t}function Qn(e,t,n){if(!n||n.length===0||!t)return e;const s=n[0].cubeRegions?.find(i=>i.isIncluded);if(!s)return e;const r=s.memberSelection?.find(i=>i.componentId===t);if(!r)return[];const o=new Set(r.selectionValues.map(i=>i.memberValue));return e.filter(i=>o.has(i.id))}class Vn{constructor(t){this.client=t}async getAvailableHierarchies(t,n,s){const{agency:r,id:o,version:i}=A(t),a=`${this.client.config.sdmxProxyUrl?this.client.config.sdmxProxyUrl:this.client.config.apiUrl}/sdmx/3.0/structure/codelist`,d=s?{[g.X_SOURCE_ARTEFACT_URN_HEADER]:s}:void 0;return this.client.request(`${r}/${o}/${i}?references=hierarchy&detail=allcompletestubs`,{method:"GET",headers:d},a,n)}async getHierarchy(t,n,s){const{agency:r,id:o,version:i}=A(t),a=`${this.client.config.sdmxProxyUrl?this.client.config.sdmxProxyUrl:this.client.config.apiUrl}/sdmx/3.0/structure/hierarchy`,d=s?{[g.X_SOURCE_ARTEFACT_URN_HEADER]:s}:void 0;return this.client.request(`${r}/${o}/${i}?references=descendants&detail=full`,{method:"GET",headers:d},a,n)}}exports.Annotations=b;exports.AssignmentStatus=Ye;exports.AvailabilityApi=Pt;exports.DATASET_DATA_URL=ye;exports.DatasetApi=Ct;exports.DimensionType=$;exports.DownloadType=De;exports.FREQUENCY_DIMENSION_ID=Ut;exports.FREQUENCY_DIM_ID=mt;exports.FileColumnsAttribute=pe;exports.GET_v3_FILTER_ALL=Te;exports.GET_v3_FILTER_AND=Nt;exports.GET_v3_FILTER_OR=X;exports.HierarchyApi=Vn;exports.OBSERVATION_KEY=qe;exports.OccurrenceType=Fe;exports.Periods=Pe;exports.RepresentationTextType=Ie;exports.SDMX_DATA_QUERY_PARAMS=ve;exports.SINGLE_WILDCARD_SYMBOL=I;exports.SdmxApiClient=$t;exports.SdmxAvailabilityMode=z;exports.SdmxDataFormat=E;exports.SdmxDetails=J;exports.SdmxReferences=w;exports.SeriesFilterOperator=h;exports.TIME_PERIOD=_e;exports.TIME_PERIOD_END_ANNOTATION_KEY=be;exports.TIME_PERIOD_START_ANNOTATION_KEY=we;exports.buildDatasetDimensionsMetadataMap=xn;exports.dailyPattern=Xe;exports.decodeDimensionId=Ke;exports.findCodelistByDimension=Gt;exports.generateDatasetDataRequest=q;exports.generateShortUrn=_;exports.getAdditionalColumns=Un;exports.getAnnotationPeriod=Ot;exports.getArtifactByUrnWithWildCard=M;exports.getAttachedDimensionsSeriesByDimension=Kt;exports.getAttachedDimensionsSeriesByTsId=Ue;exports.getAttachedDimensionsSeriesKey=Z;exports.getAttributeValueFromDataQueryResponse=Oe;exports.getAvailableCodes=Ht;exports.getAvailableCodesFromConstrains=Qt;exports.getChildParsedUrn=j;exports.getCodeListsData=Wn;exports.getConcept=C;exports.getConceptByUrn=B;exports.getConceptWithScheme=Le;exports.getConvertedMetaAttributes=xe;exports.getDailyRegExp=tt;exports.getDaysColumns=dt;exports.getDimensionTitle=jt;exports.getDimensions=G;exports.getFilteredItemsWithParents=Re;exports.getFiltersDtoFromDataQuery=Ne;exports.getFiltersDtoMapFromDataQuery=kt;exports.getHierarchyAvailableCodes=Qn;exports.getHierarchyCodes=Fn;exports.getISOWeek=v;exports.getKeyFromUrn=R;exports.getLastUpdatedTime=Lt;exports.getLastWeekNumberOfYear=K;exports.getLocalizedName=N;exports.getMonthlyData=at;exports.getMonthlyDataByQuarter=bn;exports.getMonthlyRegExp=x;exports.getParsedEndPeriodDate=ie;exports.getParsedResponse=dn;exports.getParsedStartPeriodDate=oe;exports.getPeriodDate=p;exports.getPeriods=lt;exports.getQuarterByMonth=Pn;exports.getQuarterlyRegExp=F;exports.getQuartersData=rt;exports.getQueryTimePeriodFilters=Ve;exports.getRequestAcceptHeader=Ee;exports.getResolvedVersionBySingleWildcard=Me;exports.getResponseContentType=Ae;exports.getSemiAnnualData=ot;exports.getSemiAnnuallyRegExp=et;exports.getSeriesAttributes=P;exports.getSeriesName=Be;exports.getStructureComponentsMap=Zt;exports.getStructureDimensions=zt;exports.getTimeDimension=Xt;exports.getTimePeriods=Jt;exports.getTimeQueryFilter=un;exports.getTimeRangeFromAttachment=ke;exports.getTimeSeriesCount=en;exports.getTimeSeriesFilterKey=cn;exports.getTimeSeriesId=Ge;exports.getWeekCode=se;exports.getWeeklyPeriodEndDate=Qe;exports.getWeeklyPeriodStartDate=We;exports.getWeeklyRegExp=st;exports.getWeeksColumns=ut;exports.getWildCardPrefix=Ce;exports.getYearPeriod=ae;exports.getYearlyRegExp=L;exports.getYears=ct;exports.isDaily=nt;exports.isMonthly=Y;exports.isQuarterly=W;exports.isSemiAnnually=O;exports.isWeekly=Q;exports.isWildCardVersionCorrect=$e;exports.isYearly=U;exports.monthlyPattern=Ze;exports.openDownloadWindow=an;exports.quarterPattern=He;exports.resolveCodelistsFromResponse=Yn;exports.sanitizeDownloadFilename=re;exports.semiAnnuallyPattern=ze;exports.sortPeriods=Cn;exports.splitUrn=A;exports.urnMatchesIgnoreVersion=gt;exports.weeklyPattern=je;exports.yearlyPattern=Je;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Et=require("@epam/statgpt-dial-toolkit"),g=require("@epam/statgpt-shared-toolkit"),At=require("compare-versions"),yt=require("date-fns"),R=e=>{if(e!=null){const t=e.split("=");return t.length===1?e:t[1]}},A=e=>{if(e==null)return{};const t=R(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},j=e=>{const[t,n]=e.split(")."),{agency:s,id:r,version:o}=A(t+")");return{childId:n,agency:s,id:r,version:o}},P=(e,t,n)=>{const s=t===""?"":`(${t})`;return`${n}:${e}${s}`};var w=(e=>(e.DESCENDANTS="descendants",e.NONE="none",e.ALL="all",e))(w||{}),z=(e=>(e.EXACT="exact",e.AVAILABLE="available",e))(z||{});function Tt(e){return{data:{codelists:e.data.codelists,conceptSchemes:e.data.conceptSchemes,dataConstraints:e.data.dataConstraints?.map(St),dataflows:e.data.dataflows,dataStructures:e.data.dataStructures,metadataStructures:e.data.metadataStructures}}}function St(e){return{...e,cubeRegions:e.cubeRegions?.map(Rt)}}function Rt(e){return{isIncluded:e.include,memberSelection:e.keyValues.map(vt)}}function vt(e){return{included:e.include,componentId:e.id,selectionValues:e.values.map(It)}}function It(e){return{memberValue:e.value}}const _t=(e="",t="",n="")=>`sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;class Pt{constructor(t){this.client=t}async getConstraints(t,n,s){const{agency:r,id:o,version:i}=A(t),c={filters:n||[],mode:z.AVAILABLE,references:w.NONE},a=_t(r,o,i),d=!!this.client.config.sdmxProxyUrl,u=d||this.client.config.isDialProxyMode,l=d?this.client.config.sdmxProxyUrl:this.client.config.constrainsApiUrl||this.client.config.apiUrl;if(u){const m=await this.client.postRequest(a,{body:c},l,s);return Tt(m)}return await this.client.postRequest(a,{body:c},l,s)}}var E=(e=>(e.CSV="csv",e.JSON="json",e.XML="xml",e))(E||{}),he=(e=>(e.ID="id",e.NAME="name",e.ID_NAME="both",e))(he||{}),De=(e=>(e.FULL_DATASET="full",e.DATA_IN_TABLE="query",e))(De||{});const Ee=(e,t)=>{switch(e){case E.CSV:return ue("application/vnd.sdmx.data+csv;version=2.0.0",t);case E.XML:return"application/vnd.sdmx.data+xml;version=3.0.0";case E.JSON:return"application/vnd.sdmx.data+json;version=2.1";default:return ue("application/vnd.sdmx.data+csv;version=2.0.0",t)}},Ae=e=>{switch(e){case E.CSV:return"text/csv; charset=utf-8";case E.XML:return"application/xml; charset=utf-8";case E.JSON:return"application/json; charset=utf-8";default:return"text/csv; charset=utf-8"}},ue=(e,t)=>`${e}; labels=${t}`;var J=(e=>(e.REFERENCE_PARTIAL="referencepartial",e.FULL="full",e))(J||{});const wt="all",ye="sdmx/3.0/data/dataflow",bt="&",de=":",Nt="=",X="+",Mt=",",Te="*",q=(e,t,n)=>{const{filterKey:s,timeFilter:r}=n,{agency:o,id:i,version:c}=A(e),a=[r||"",t].filter(u=>!!u).join(bt);return`${`${ye}/${o}/${i}/${c}`}/${s||Te}?${a}`},Ct=(e="",t="",n="",s=w.DESCENDANTS)=>`sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${J.REFERENCE_PARTIAL}`;class Lt{constructor(t){this.client=t}async getDataSet(t,n,s){const{agency:r,id:o,version:i}=A(t);return await this.client.getRequest(Ct(r,o,i,n),void 0,s)}async getDatasetData(t,n,s){const r=new URLSearchParams({includeHistory:"false",limit:"1000",attributes:wt,dimensionAtObservation:"TIME_PERIOD"}).toString(),o=q(t,r,n);return await this.client.getRequest(o,void 0,s)}async downloadDataSet(t,n,s,r,o,i,c=!1,a){const d=new URLSearchParams({compress:"false",attributes:c?"all":"none",limit:"1000"}).toString(),u=q(t,d,o);return this.client.streamRequest(u,{method:"GET",headers:{Accept:Ee(n,r),"Accept-language":s}},i,a,Ae(n))}}class $t{constructor(t){this.config=t,console.info("SdmxApiClient initialized",{apiUrl:t.apiUrl||"NOT SET"})}async getRequest(t,n,s){return this.request(t,{...n,method:"GET"},void 0,s)}async postRequest(t,n,s,r){return this.request(t,{...n,method:"POST"},s,r)}async streamRequest(t,n,s,r,o){const i=`${this.config.apiUrl}/${t}`,c=this.buildHeaders(r,n.headers),a=new ReadableStream({async start(u){try{const l=await g.sendRequest(i,c,n);if(!l.ok){const y=await l.text();throw console.error(`Fetch failed! Status: ${l.status}, Body: ${y}`),new Error(`Fetch failed with status ${l.status}`)}const m=l.body?.getReader();if(!m)throw new Error("Failed to create stream reader");const f=new Uint8Array([239,187,191]);u.enqueue(f);const D=async()=>{const{done:y,value:S}=await m.read();y?u.close():(u.enqueue(S),await D())};D()}catch(l){u.error(l)}}}),d=new Headers({"Content-Disposition":`attachment; filename=${encodeURIComponent(s)}`,...o?{"Content-Type":o}:{}});return new Response(a,{headers:d})}async request(t,n,s,r){const o=Date.now(),i=`${s||this.config.apiUrl}/${t}`,c=this.buildHeaders(r,n.headers);this.addInfoRequestLog("API Request",i,n,c);try{const a=await g.sendRequest(i,c,n),d=Date.now()-o;let u;const l=await a.text();try{u=l?JSON.parse(l):{}}catch{if(this.addErrorRequestParsing(i,n,a,d,l),!a.ok)throw new Error(`API request failed: ${a.status} ${a.statusText} - ${l.substring(0,100)}`);u={data:l}}if(!a.ok){this.addErrorRequestLog(i,n,a,d,u);const m=Et.getErrorMessage(u,a);throw new Error(`API request failed: ${m}`)}return u}catch(a){const d=Date.now()-o;throw console.error("API Request Exception",{method:n.method,url:i,duration:`${d}ms`,error:a instanceof Error?a.message:String(a)}),a}}buildHeaders(t,n){if(this.config.isDialProxyMode)return{...g.getHeaders(this.config.dialApiKey,{jwt:t}),...n};const s={...g.getHeaders(void 0,{jwt:this.config.jwt}),...n};return this.config.apiKey!=null&&(s[g.OCP_APIM_SUBSCRIPTION_KEY_HEADER]=this.config.apiKey),s}addInfoRequestLog(t,n,s,r){const o={method:s.method||"GET",url:n,headers:g.sanitizeHeaders(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"})}}var b=(e=>(e.LAST_UPDATE_AT="lastUpdatedAt",e.SERIES_COUNT="series_count",e))(b||{});function Ut(e){return e?.annotations?.find(t=>{if(t.id===b.LAST_UPDATE_AT)return t})?.text}const N=(e,t)=>e?.names&&e?.names[t]||e?.name,Se=(e,t,n)=>{if(!(!e||t?.has(e?.id))&&(t?.set(e?.id,e),e?.parent)){const s=n?.get(e?.parent);Se(s,t,n)}},Re=(e,t)=>{const n=new Map,s=new Map(e?.map(r=>[r.id,r]));return t?.forEach(r=>{Se(r,n,s)}),Array.from(n?.values())};var ve=(e=>(e.C="c",e))(ve||{}),p=(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))(p||{}),Ie=(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))(Ie||{}),_e=(e=>(e.ANNUAL="A",e.QUARTERLY="Q",e.MONTHLY="M",e))(_e||{});const Ot=["FREQ","FREQUENCY"],Pe="TIME_PERIOD",we="time_period_start",be="time_period_end",xt=e=>{const t=e?.find(o=>o.id===we),n=e?.find(o=>o.id===be),s=n?.title?new Date(n?.title):null;return{startPeriod:t?.title?new Date(t?.title):null,endPeriod:s}},Yt=(e,t)=>e.id.localeCompare(t.id),Ft=(e,t)=>e.memberValue.localeCompare(t.memberValue),Wt=(e,t)=>{const n=new Array(e.length),s=e.map((i,c)=>[i,c]);s.sort((i,c)=>Yt(i[0],c[0]));const r=[...t];r.sort(Ft);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)},Qt=e=>!!e?.some(t=>t.parent),Vt=(e,t,n,s,r=[])=>{let o=e||[];if(kt(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})):Wt(o,c.selectionValues):o=[]}}else r.length!==0&&(o=o.filter(({id:i})=>r.includes(i)));return Qt(e)&&(o=Re(e,o)),o?.map(i=>({...i,name:s?N(i,s):i?.name}))},kt=(e,t)=>e!=null&&e.length>0&&t!=null,Ne=e=>{const t=[];return e?.filters?.forEach(n=>{n.componentCode!==Pe&&t.push({componentCode:n.componentCode,operator:p.EQUALS,value:n.values.join(",")})}),t},qt=e=>{const t=new Map;return e?.forEach(n=>{t.set(n.urn,Ne(n))}),t},I="+",M=(e,t)=>{const{agency:n,id:s,version:r}=A(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=Me(r,i);return o.find(a=>a.version===c[0])},Me=(e,t)=>{const n=Bt(e,t);return n.length>0?[n[0]]:[]},Bt=(e,t)=>{const n=[];return t.forEach(s=>{Le(e,s)&&n.push(s)}),n},Ce=e=>{const t=e.trim(),n=t.indexOf("+");if(n<=0)return"";let s=n;for(;s>0&&t[s-1]>="0"&&t[s-1]<="9";)s--;return s>0?t.slice(0,s):""},Le=(e,t)=>{const n=e.trim().replace(/\+/,""),s=Ce(e);return t.startsWith(s)&&At.compare(t,n,">=")},C=(e,t)=>{const{concept:n}=$e(e,t);return n},$e=(e,t)=>{if(e==null)return{concept:void 0,scheme:void 0};const{childId:n,agency:s,id:r,version:o}=j(e);if(o?.includes(I)){const i=M(e,t);return{concept:B(i?.concepts||[],n),scheme:i}}for(const i of t)if(Gt(i,r,s,o))return{concept:B(i?.concepts||[],n),scheme:i};return{concept:void 0,scheme:void 0}},B=(e,t)=>e?.find(n=>n.id===t),Gt=(e,t,n,s)=>e.id===t&&e.agencyID===n&&e.version===s,Kt=(e=[],t=[],n)=>{const s=n?.conceptIdentity||"",r=C(s,t),o=R(n?.localRepresentation?.enumeration),i=R(r?.coreRepresentation?.enumeration),c=o||i;if(c!=null)return M(c,e)},Ue=(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:d,decodedSeriesKey:u}=Z(e,t,a);i[c.id]={values:o?.[d]||[],decodedSeriesKey:u,codedSeriesKey:d}}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,d=t[a],u=r[a].values.findIndex(l=>l.id===d||l.value===d)||0;o[a]=u>=0?u:d,i[a]=d}),{codedSeriesKey:o.join(":"),decodedSeriesKey:i.join(":")}},Ht=(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),d=new Array(c?.length);d[a]=n||"";const u={};for(const l of o){const m=l.relationship.dimensions,{codedSeriesKey:f,decodedSeriesKey:D}=Z(e,d,m);u[l.id]={values:i?.[f]||[],decodedSeriesKey:D,codedSeriesKey:f}}return u},Oe=(e,t)=>{if(t==null)return;const n=e.values?.[t];return n??(t instanceof Array?{values:t}:{value:t.toString()})},jt=(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?N(o,s):o?.name}))||[]},xe=(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,id:o?.id??r.metadataAttributeReference,attributeRelationship:r.attributeRelationship,isMandatory:Number(o?.minOccurs)>0}})},zt=(e=[],t,n)=>{const s=R(t?.conceptIdentity)||"",r=C(s,e);return n?N(r,n):r?.name??r?.id??t?.id};var Ye=(e=>(e.CONDITIONAL="Conditional",e.MANDATORY="Mandatory",e))(Ye||{}),L=(e=>(e.DIMENSION="Dimension",e.MEASURE_DIMENSION="MeasureDimension",e.TIME_DIMENSION="TimeDimension",e))(L||{}),Fe=(e=>(e.UNBOUNDED="unbounded",e))(Fe||{});function G(e){return e?.dataStructures?.[0]?.dataStructureComponents?.dimensionList}function Jt(e){return e?.data?.structures?.[0]?.dimensions?.series||[]}function Xt(e){return e?.data?.structures?.[0]?.dimensions?.observation?.[0].values.map(t=>t.value?t.value:t.id).filter(t=>t!=null)||[]}function Zt(e){return e.find(t=>t.type===L.TIME_DIMENSION)}const en=e=>{const t=new Map,n=e?.dataStructures?.[0],s=e?.metadataStructures?.[0],r=e?.conceptSchemes||[],o=e?.codelists||[];if(e){const i=xe(s,n);[...G(e)?.dimensions||[],...G(e)?.timeDimensions||[],...i,...n?.dataStructureComponents?.attributeList?.attributes||[]].forEach(a=>{const d=C(a?.conceptIdentity,r),u=a?.localRepresentation?.enumeration||d?.coreRepresentation?.enumeration,l=M(u,o);a?.id&&(u?t.set(a?.id,{...l,name:d?.name,names:d?.names}):t.set(a?.id,{id:a?.id,name:d?.name,names:d?.names}))})}return t},tn=e=>e?.find(t=>t.id===b.SERIES_COUNT)?.title||"",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 nn(e){const t=new Date(e),s=-((t.getDay()+6)%7)+3;return t.setDate(t.getDate()+s),new Date(t.valueOf())}function K(e,t="W"){const n=`${e}-12-31`,s=v(new Date(n),t);if(s.weekYear===e)return s.weekNumber;const r=`${e}-12-24`;return v(new Date(r),t).weekNumber}function se(e,t,n="W"){return`${e}-${n}${t<10?"0"+t:t}`}function v(e,t="W"){const n=nn(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 We(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te-3*ee;return new Date(r)}function Qe(e){const[t,n]=e.split("-W"),r=ne(+t).getTime()+(+n-1)*te+3*ee;return new Date(r)}const le="/api/download",sn=6e4,rn=/[\x00-\x1F\x7F<>:"/\\|?*]/g,re=e=>e.normalize("NFKC").replace(rn,"_").replace(/_+/g,"_").replace(/\s+/g," ").replace(/^[._ ]+/,"").trim()||"download",on=(e,t,n,s,r,o,i)=>{const c=new URL(le,window.location.origin);if(c.search=new URLSearchParams({urn:e,format:t,compress:"false",filename:o,filters:JSON.stringify(r),attribute:s,language:n,isMetadata:i?"true":"none"}).toString(),c.origin!==window.location.origin||c.pathname!==le)throw new Error("Invalid download URL");return c.toString()},an=(e,t)=>{const n=URL.createObjectURL(e),s=document.createElement("a");s.href=n,s.download=re(t),s.rel="noopener noreferrer",s.click(),window.setTimeout(()=>URL.revokeObjectURL(n),sn)},cn=async(e,t,n,s,r,o,i,c)=>{const a=re(o),d=on(e,t,n,s,r,a,i),u=await fetch(d,{method:"GET",credentials:"same-origin",signal:c});if(!u.ok){const m=await u.text();throw new Error(`Download request failed: ${u.status} ${u.statusText}${m?` - ${m}`:""}`)}const l=await u.blob();c?.aborted||an(l,a)},un=(e,t)=>{const n=[];for(const s of e){if(s.type!==L.DIMENSION)continue;const r=t.find(o=>o.componentCode===s.id);r!=null&&r.values?.length>0?n.push(r.values?.join(X)):n.push("*")}return n.join(".")},Ve=(e,t)=>{if(!e||!e.startPeriod&&!e.endPeriod)return null;const n=[],{startPeriod:s,endPeriod:r}=e;if(s&&n.push(`${p.GREATER_OR_EQUAL}${de}${me(s)}`),r&&n.push(`${p.LESS_OR_EQUAL}${de}${me(r)}`),n.length===0)return null;const o=t,i=n.join(X);return`${encodeURIComponent(`c[${o}]`)}${Nt}${encodeURIComponent(i)}`},me=e=>yt.format(e,"yyyy-MM-dd"),dn=(e,t)=>{const n=ke(e,t)||null;return n?Ve(n,t?.id):null},ke=(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===p.LESS_OR_EQUAL||o===p.LESS)return{startPeriod:null,endPeriod:g.getTimePeriod(r[0])};if(o===p.GREATER_OR_EQUAL||o===p.GREATER)return{startPeriod:g.getTimePeriod(r[0]),endPeriod:null};const i=g.getTimePeriod(r[0]),c=g.getTimePeriod(r[1]);return{startPeriod:i,endPeriod:c}},qe="Observation",ln=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 d in i){const u=[],{name:l,parsedTimeSeriesValue:m}=Be(d,c),f=i[d],D=f.attributes||[];if(Object.keys(f).length===0){a.push({name:l,parsedTimeSeriesValue:m,values:u,attributes:[],dataSetAttrs:[]});continue}u.push(...gn(f,n));const y=_(s?.series||[],T=>D[T]),S=fn(n.attributes?.dataSet||[],t[0].attributes?.filter(T=>T!=null)||[]),V=Ue(e,m),k=o.map((T,ht)=>{const ce=V[T.id],Dt=Oe(T,ce.values[ht]);return{attribute:T,dimensionGroupValue:Dt,dimensionGroupData:ce}});a.push({name:l,parsedTimeSeriesValue:m,values:u,attributes:y,dataSetAttrs:S,dimensionGroupAttributes:k})}return a},Be=(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:Ge(s),parsedTimeSeriesValue:s}},_=(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?mn(o,r):void 0;n.push({name:r.id,value:i})}return n},mn=(e,t)=>{const n=t.values[e];return n==null?typeof e=="object"?e:e.toString():n?.id||n?.value||n?.ids||n?.values},Ge=e=>e.map(t=>t?Ke(t):"").join("."),Ke=e=>e.replace(/\./g,"|.").replace(/:/g,"|:"),gn=(e,t)=>{const n=t.measures?.observation?.length;if(e.observations==null)return[{values:ge(e,t.measures),obsAttributes:_(t.attributes?.observation||[],i=>e[i+n]),dimensionAtObservation:qe}];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:ge(s[i],t.measures),obsAttributes:_(t.attributes?.observation||[],a=>s[i][a+n])})}return o},ge=(e,t)=>t?.observation?.map((n,s)=>({name:n.id,value:e[s]}))||[],fn=(e,t)=>e.reduce((n,s,r)=>{const o=t[r];return pn(n,s,o,""),n},[]),pn=(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||""})},He=/^[0-9][0-9][0-9][0-9]-Q[1-4]$/,je=/^[0-9][0-9][0-9][0-9]-W(0[1-9]|[1-4][0-9]|5[0-3])$/,ze=/^[0-9][0-9][0-9][0-9]-S[1-2]$/,Je=/^[0-9][0-9][0-9][0-9]$/,Xe=/^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/,Ze=/^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/,$=e=>Je.exec(e),U=e=>!!$(e),et=e=>ze.exec(e),O=e=>!!et(e),x=e=>Ze.exec(e),Y=e=>!!x(e),F=e=>He.exec(e),W=e=>!!F(e),tt=e=>Xe.exec(e),nt=e=>!!tt(e),st=e=>je.exec(e),Q=e=>!!st(e);function oe(e){return U(e)?hn(e):O(e)?En(e):W(e)?yn(e):Y(e)?Sn(e):Q(e)?We(e):vn(e)}function ie(e){return U(e)?Dn(e):O(e)?An(e):W(e)?Tn(e):Y(e)?Rn(e):Q(e)?Qe(e):In(e)}function hn(e){const t=$(e);if(t)return new Date(Number(t[0]),0,1)}function Dn(e){const t=$(e);if(t)return new Date(Number(t[0])+1,0,1)}function En(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 An(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 yn(e){const t=F(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 Tn(e){const t=F(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 Sn(e){const t=x(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s-1,1)}function Rn(e){const t=x(e);if(!t)return;const[n,s]=t[0].split("-M");return new Date(+n,+s,1)}const vn=e=>new Date(`${e}T00:00:00`),In=e=>{const t=new Date(`${e}T23:59:00`);return t.setMinutes(t.getMinutes()+1),t},_n=1,rt=(e,t,n,s=!0,r="Q")=>{const o=[],i=t&&t>3?Cn(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},ot=(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},Pn=e=>Math.ceil(e/3),it=(e,t,n="M")=>`${e}-${n}${t.toString().padStart(2,"0")}`,wn=(e,t,n="M")=>{const s=[];for(let r=t;r<=12;r++)s.push(it(e,r,n));return s},bn=(e,t,n,s="M")=>{const r=[];for(let o=t;o<n;o++)r.push(it(e,o,s));return r},at=(e,t,n,s="M")=>{const r=t||1,o=n==null,i=n||12;return o?wn(e,r,s):bn(e,r,i,s)},Nn=(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[]}},ct=(e,t)=>{const n=h(t,!0),s=h(e),r=n.getFullYear(),o=s.getFullYear(),i=n.getTime()<=s.getTime()?o+_n-r:0;return Array.from({length:i},(a,d)=>r+d)},h=(e,t=!1)=>{const n=Mn(e,t);return n?(n.getTimezoneOffset()>0&&n.setMinutes(n.getMinutes()+n.getTimezoneOffset()),n):new Date},Mn=(e,t=!1)=>{const n=Number(e);return e.toString().length!==13?t?oe(e):ie(e):isNaN(n)?new Date(`${e}T00:00:00.000Z`):new Date(n)},Cn=(e,t)=>t?Math.floor((e+1)/3):Math.ceil((e+1)/3),Ln=(e,t)=>{const n=pe(e)-pe(t);if(n===0&&e!==t){const s=fe(e),r=fe(t);return s-r}return n},fe=e=>U(e)?6:O(e)?5:W(e)?4:Y(e)?3:Q(e)?2:nt(e)?1:0,pe=(e,t=!1)=>(t?oe(e):ie(e))?.getTime()||0,ae=(e,t,n)=>{const s=h(t,!0),r=h(n),o=h(e,!0),i=h(e),c=s.getTime()>o.getTime()?s:o,a=r.getTime()<i.getTime()?r:i;return{start:c,end:a}},ut=(e,t,n,s="W")=>{const r=+e,{start:o,end:i}=ae(e,t,n);if(o.getTime()>i.getTime())return[];const c=v(o,s),a=c.weekYear===r?c.weekNumber:c.weekYear<r?1:K(r,s),d=v(i,s),u=d.weekYear===r?d.weekNumber:d.weekYear>r?K(r,s):1,l=[];if(a<u)for(let m=a;m<=u;m++)l.push(se(r,m,s));return l},$n=e=>{const t=new Date(e);return t.setMinutes(t.getMinutes()-t.getTimezoneOffset()),t.toISOString().slice(0,10)},dt=(e,t,n)=>{const{start:s,end:r}=ae(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=$n(i);o.push(a),i.setDate(i.getDate()+1)}return o},lt=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")}),Un=(e,t,n,s)=>{const r=s===0?h(t.toString(),!0)?.getMonth()+1:void 0,o=s===e.length-1?h(n.toString())?.getMonth()+1||1:void 0;return{startMonth:r,endMonth:o}},mt=["FREQUENCY","FREQ"],On=(e,t)=>{const n=e?.[0]?.cubeRegions?.[0]?.memberSelection?.find(a=>mt.includes(a.componentId))?.selectionValues,s=lt(n||[]),r=t?.startPeriod?.getTime()||1,o=t?.endPeriod?.getTime()||1,i=ct(o,r),c=[];return i.forEach((a,d)=>{const u=[],{startMonth:l,endMonth:m}=Un(i,new Date(r),new Date(o),d),{isDailyExist:f,isWeeklyExist:D,isMonthlyExist:y,isQuarterlyExist:S,isSemiAnnualExist:V,isYearlyExist:k}=s;k&&u.push(a.toString()),V&&u.push(...ot(a,l,m)),S&&u.push(...rt(a,l,m,!1)),y&&u.push(...at(a,l,m)),D&&u.push(...ut(a,r.toString(),o.toString())),f&&u.push(...dt(a,r.toString(),o.toString())),c.push(...u)}),c};function gt(e){const{urn:t}=e.details;return P(t.resourceId,t.version,t.agencyId)}function xn(e){const t={};for(const n of e.datasets){const s=n.dataset,r=gt(s);t[r]=s.details.dimensions}return t}function Yn(e){const t={};for(const n of e.datasets)n.last_updated_at&&(t[gt(n.dataset)]=n.last_updated_at);return t}function Fn(e){return e?.codelists?.length?e.codelists.map(t=>({id:t.id,agencyID:t.agencyID??"",version:t.version??"",name:t.name,codes:t.codes?.map(n=>({id:n.id,name:n.name,description:n.description}))})):(e?.glossaries??[]).map(t=>({id:t.id,agencyID:t.agencyID??"",version:t.version??"",name:t.name,codes:t.terms?.map(n=>({id:n.id,name:n.name,description:n.description}))}))}function ft(e,t){const n=s=>{const r=s.indexOf("(");if(r===-1)return s;const o=s.indexOf(")",r);return o===-1?s:s.slice(0,r+1)+"*"+s.slice(o)};return n(e)===n(t)}function H(e){return P(e.id,e.version??"",e.agencyID??"")}function pt(e,t,n){t?.forEach(s=>{const{childId:r,agency:o,id:i,version:c}=j(s.code),a=P(i,c,o),d=n?.find(l=>ft(a,H(l))),u=d?.codes?.find(l=>l.id===r);if(u!=null){const l=s.code.replace(a,H(d));e.push({...u,code:l})}pt(e,s.hierarchicalCodes,n)})}function Wn(e,t){const n=[];return pt(n,e?.hierarchicalCodes,t),n}function Qn(e){const t={};return e?.forEach(n=>{t[H(n)]=n.codes}),t}function Vn(e,t,n){if(!n||n.length===0||!t)return e;const s=n[0].cubeRegions?.find(i=>i.isIncluded);if(!s)return e;const r=s.memberSelection?.find(i=>i.componentId===t);if(!r)return[];const o=new Set(r.selectionValues.map(i=>i.memberValue));return e.filter(i=>o.has(i.id))}class kn{constructor(t){this.client=t}async getAvailableHierarchies(t,n,s){const{agency:r,id:o,version:i}=A(t),a=`${this.client.config.sdmxProxyUrl?this.client.config.sdmxProxyUrl:this.client.config.apiUrl}/sdmx/3.0/structure/codelist`,d=s?{[g.X_SOURCE_ARTEFACT_URN_HEADER]:s}:void 0;return this.client.request(`${r}/${o}/${i}?references=hierarchy&detail=allcompletestubs`,{method:"GET",headers:d},a,n)}async getHierarchy(t,n,s){const{agency:r,id:o,version:i}=A(t),a=`${this.client.config.sdmxProxyUrl?this.client.config.sdmxProxyUrl:this.client.config.apiUrl}/sdmx/3.0/structure/hierarchy`,d=s?{[g.X_SOURCE_ARTEFACT_URN_HEADER]:s}:void 0;return this.client.request(`${r}/${o}/${i}?references=descendants&detail=full`,{method:"GET",headers:d},a,n)}}exports.Annotations=b;exports.AssignmentStatus=Ye;exports.AvailabilityApi=Pt;exports.DATASET_DATA_URL=ye;exports.DatasetApi=Lt;exports.DimensionType=L;exports.DownloadType=De;exports.FREQUENCY_DIMENSION_ID=Ot;exports.FREQUENCY_DIM_ID=mt;exports.FileColumnsAttribute=he;exports.GET_v3_FILTER_ALL=Te;exports.GET_v3_FILTER_AND=Mt;exports.GET_v3_FILTER_OR=X;exports.HierarchyApi=kn;exports.OBSERVATION_KEY=qe;exports.OccurrenceType=Fe;exports.Periods=_e;exports.RepresentationTextType=Ie;exports.SDMX_DATA_QUERY_PARAMS=ve;exports.SINGLE_WILDCARD_SYMBOL=I;exports.SdmxApiClient=$t;exports.SdmxAvailabilityMode=z;exports.SdmxDataFormat=E;exports.SdmxDetails=J;exports.SdmxReferences=w;exports.SeriesFilterOperator=p;exports.TIME_PERIOD=Pe;exports.TIME_PERIOD_END_ANNOTATION_KEY=be;exports.TIME_PERIOD_START_ANNOTATION_KEY=we;exports.buildDatasetDimensionsMetadataMap=xn;exports.buildDatasetLastUpdatedMap=Yn;exports.dailyPattern=Xe;exports.decodeDimensionId=Ke;exports.findCodelistByDimension=Kt;exports.generateDatasetDataRequest=q;exports.generateShortUrn=P;exports.getAdditionalColumns=On;exports.getAnnotationPeriod=xt;exports.getArtifactByUrnWithWildCard=M;exports.getAttachedDimensionsSeriesByDimension=Ht;exports.getAttachedDimensionsSeriesByTsId=Ue;exports.getAttachedDimensionsSeriesKey=Z;exports.getAttributeValueFromDataQueryResponse=Oe;exports.getAvailableCodes=jt;exports.getAvailableCodesFromConstrains=Vt;exports.getChildParsedUrn=j;exports.getCodeListsData=Qn;exports.getConcept=C;exports.getConceptByUrn=B;exports.getConceptWithScheme=$e;exports.getConvertedMetaAttributes=xe;exports.getDailyRegExp=tt;exports.getDaysColumns=dt;exports.getDimensionTitle=zt;exports.getDimensions=G;exports.getFilteredItemsWithParents=Re;exports.getFiltersDtoFromDataQuery=Ne;exports.getFiltersDtoMapFromDataQuery=qt;exports.getHierarchyAvailableCodes=Vn;exports.getHierarchyCodes=Wn;exports.getISOWeek=v;exports.getKeyFromUrn=R;exports.getLastUpdatedTime=Ut;exports.getLastWeekNumberOfYear=K;exports.getLocalizedName=N;exports.getMonthlyData=at;exports.getMonthlyDataByQuarter=Nn;exports.getMonthlyRegExp=x;exports.getParsedEndPeriodDate=ie;exports.getParsedResponse=ln;exports.getParsedStartPeriodDate=oe;exports.getPeriodDate=h;exports.getPeriods=lt;exports.getQuarterByMonth=Pn;exports.getQuarterlyRegExp=F;exports.getQuartersData=rt;exports.getQueryTimePeriodFilters=Ve;exports.getRequestAcceptHeader=Ee;exports.getResolvedVersionBySingleWildcard=Me;exports.getResponseContentType=Ae;exports.getSemiAnnualData=ot;exports.getSemiAnnuallyRegExp=et;exports.getSeriesAttributes=_;exports.getSeriesName=Be;exports.getStructureComponentsMap=en;exports.getStructureDimensions=Jt;exports.getTimeDimension=Zt;exports.getTimePeriods=Xt;exports.getTimeQueryFilter=dn;exports.getTimeRangeFromAttachment=ke;exports.getTimeSeriesCount=tn;exports.getTimeSeriesFilterKey=un;exports.getTimeSeriesId=Ge;exports.getWeekCode=se;exports.getWeeklyPeriodEndDate=Qe;exports.getWeeklyPeriodStartDate=We;exports.getWeeklyRegExp=st;exports.getWeeksColumns=ut;exports.getWildCardPrefix=Ce;exports.getYearPeriod=ae;exports.getYearlyRegExp=$;exports.getYears=ct;exports.isDaily=nt;exports.isMonthly=Y;exports.isQuarterly=W;exports.isSemiAnnually=O;exports.isWeekly=Q;exports.isWildCardVersionCorrect=Le;exports.isYearly=U;exports.monthlyPattern=Ze;exports.openDownloadWindow=cn;exports.quarterPattern=He;exports.resolveCodelistsFromResponse=Fn;exports.sanitizeDownloadFilename=re;exports.semiAnnuallyPattern=ze;exports.sortPeriods=Ln;exports.splitUrn=A;exports.urnMatchesIgnoreVersion=ft;exports.weeklyPattern=je;exports.yearlyPattern=Je;
package/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { getErrorMessage as Re } from "@epam/statgpt-dial-toolkit";
2
- import { sendRequest as j, getHeaders as z, OCP_APIM_SUBSCRIPTION_KEY_HEADER as we, sanitizeHeaders as Ie, getTimePeriod as S, X_SOURCE_ARTEFACT_URN_HEADER as J } from "@epam/statgpt-shared-toolkit";
3
- import { compare as be } from "compare-versions";
1
+ import { getErrorMessage as we } from "@epam/statgpt-dial-toolkit";
2
+ import { sendRequest as j, getHeaders as z, OCP_APIM_SUBSCRIPTION_KEY_HEADER as Ie, sanitizeHeaders as be, getTimePeriod as S, X_SOURCE_ARTEFACT_URN_HEADER as J } from "@epam/statgpt-shared-toolkit";
3
+ import { compare as _e } from "compare-versions";
4
4
  import { format as $e } from "date-fns";
5
5
  const T = (e) => {
6
6
  if (e != null) {
@@ -19,7 +19,7 @@ const T = (e) => {
19
19
  }, ue = (e) => {
20
20
  const [t, n] = e.split(")."), { agency: s, id: r, version: o } = y(t + ")");
21
21
  return { childId: n, agency: s, id: r, version: o };
22
- }, _ = (e, t, n) => {
22
+ }, P = (e, t, n) => {
23
23
  const s = t === "" ? "" : `(${t})`;
24
24
  return `${n}:${e}${s}`;
25
25
  };
@@ -29,38 +29,38 @@ function Pe(e) {
29
29
  data: {
30
30
  codelists: e.data.codelists,
31
31
  conceptSchemes: e.data.conceptSchemes,
32
- dataConstraints: e.data.dataConstraints?.map(_e),
32
+ dataConstraints: e.data.dataConstraints?.map(Ne),
33
33
  dataflows: e.data.dataflows,
34
34
  dataStructures: e.data.dataStructures,
35
35
  metadataStructures: e.data.metadataStructures
36
36
  }
37
37
  };
38
38
  }
39
- function _e(e) {
39
+ function Ne(e) {
40
40
  return {
41
41
  ...e,
42
- cubeRegions: e.cubeRegions?.map(Ne)
42
+ cubeRegions: e.cubeRegions?.map(Me)
43
43
  };
44
44
  }
45
- function Ne(e) {
45
+ function Me(e) {
46
46
  return {
47
47
  isIncluded: e.include,
48
- memberSelection: e.keyValues.map(Me)
48
+ memberSelection: e.keyValues.map(Le)
49
49
  };
50
50
  }
51
- function Me(e) {
51
+ function Le(e) {
52
52
  return {
53
53
  included: e.include,
54
54
  componentId: e.id,
55
- selectionValues: e.values.map(Le)
55
+ selectionValues: e.values.map(Ue)
56
56
  };
57
57
  }
58
- function Le(e) {
58
+ function Ue(e) {
59
59
  return {
60
60
  memberValue: e.value
61
61
  };
62
62
  }
63
- const Ue = (e = "", t = "", n = "") => `sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;
63
+ const Oe = (e = "", t = "", n = "") => `sdmx/3.0/availability/dataflow/${e}/${t}/${n}`;
64
64
  class yn {
65
65
  constructor(t) {
66
66
  this.client = t;
@@ -70,7 +70,7 @@ class yn {
70
70
  filters: n || [],
71
71
  mode: de.AVAILABLE,
72
72
  references: N.NONE
73
- }, a = Ue(r, o, i), d = !!this.client.config.sdmxProxyUrl, u = d || this.client.config.isDialProxyMode, l = d ? this.client.config.sdmxProxyUrl : this.client.config.constrainsApiUrl || this.client.config.apiUrl;
73
+ }, a = Oe(r, o, i), d = !!this.client.config.sdmxProxyUrl, u = d || this.client.config.isDialProxyMode, l = d ? this.client.config.sdmxProxyUrl : this.client.config.constrainsApiUrl || this.client.config.apiUrl;
74
74
  if (u) {
75
75
  const m = await this.client.postRequest(
76
76
  a,
@@ -88,8 +88,8 @@ class yn {
88
88
  );
89
89
  }
90
90
  }
91
- var A = /* @__PURE__ */ ((e) => (e.CSV = "csv", e.JSON = "json", e.XML = "xml", e))(A || {}), Oe = /* @__PURE__ */ ((e) => (e.ID = "id", e.NAME = "name", e.ID_NAME = "both", e))(Oe || {}), Ce = /* @__PURE__ */ ((e) => (e.FULL_DATASET = "full", e.DATA_IN_TABLE = "query", e))(Ce || {});
92
- const xe = (e, t) => {
91
+ var A = /* @__PURE__ */ ((e) => (e.CSV = "csv", e.JSON = "json", e.XML = "xml", e))(A || {}), Ce = /* @__PURE__ */ ((e) => (e.ID = "id", e.NAME = "name", e.ID_NAME = "both", e))(Ce || {}), xe = /* @__PURE__ */ ((e) => (e.FULL_DATASET = "full", e.DATA_IN_TABLE = "query", e))(xe || {});
92
+ const Ye = (e, t) => {
93
93
  switch (e) {
94
94
  case A.CSV:
95
95
  return X(
@@ -106,7 +106,7 @@ const xe = (e, t) => {
106
106
  t
107
107
  );
108
108
  }
109
- }, Ye = (e) => {
109
+ }, Ve = (e) => {
110
110
  switch (e) {
111
111
  case A.CSV:
112
112
  return "text/csv; charset=utf-8";
@@ -119,10 +119,10 @@ const xe = (e, t) => {
119
119
  }
120
120
  }, X = (e, t) => `${e}; labels=${t}`;
121
121
  var le = /* @__PURE__ */ ((e) => (e.REFERENCE_PARTIAL = "referencepartial", e.FULL = "full", e))(le || {});
122
- const Ve = "all", We = "sdmx/3.0/data/dataflow", ke = "&", Z = ":", qe = "=", me = "+", vn = ",", Qe = "*", ee = (e, t, n) => {
123
- const { filterKey: s, timeFilter: r } = n, { agency: o, id: i, version: c } = y(e), a = [r || "", t].filter((u) => !!u).join(ke);
124
- return `${`${We}/${o}/${i}/${c}`}/${s || Qe}?${a}`;
125
- }, Fe = (e = "", t = "", n = "", s = N.DESCENDANTS) => `sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${le.REFERENCE_PARTIAL}`;
122
+ const We = "all", ke = "sdmx/3.0/data/dataflow", qe = "&", Z = ":", Qe = "=", me = "+", vn = ",", Fe = "*", ee = (e, t, n) => {
123
+ const { filterKey: s, timeFilter: r } = n, { agency: o, id: i, version: c } = y(e), a = [r || "", t].filter((u) => !!u).join(qe);
124
+ return `${`${ke}/${o}/${i}/${c}`}/${s || Fe}?${a}`;
125
+ }, Be = (e = "", t = "", n = "", s = N.DESCENDANTS) => `sdmx/3.0/structure/dataflow/${e}/${t}/${n}?references=${s}&detail=${le.REFERENCE_PARTIAL}`;
126
126
  class Sn {
127
127
  constructor(t) {
128
128
  this.client = t;
@@ -130,7 +130,7 @@ class Sn {
130
130
  async getDataSet(t, n, s) {
131
131
  const { agency: r, id: o, version: i } = y(t);
132
132
  return await this.client.getRequest(
133
- Fe(r, o, i, n),
133
+ Be(r, o, i, n),
134
134
  void 0,
135
135
  s
136
136
  );
@@ -139,7 +139,7 @@ class Sn {
139
139
  const r = new URLSearchParams({
140
140
  includeHistory: "false",
141
141
  limit: "1000",
142
- attributes: Ve,
142
+ attributes: We,
143
143
  dimensionAtObservation: "TIME_PERIOD"
144
144
  // TODO: use time dimensions
145
145
  }).toString(), o = ee(t, r, n);
@@ -160,13 +160,13 @@ class Sn {
160
160
  {
161
161
  method: "GET",
162
162
  headers: {
163
- Accept: xe(n, r),
163
+ Accept: Ye(n, r),
164
164
  "Accept-language": s
165
165
  }
166
166
  },
167
167
  i,
168
168
  a,
169
- Ye(n)
169
+ Ve(n)
170
170
  );
171
171
  }
172
172
  }
@@ -246,7 +246,7 @@ class Tn {
246
246
  }
247
247
  if (!a.ok) {
248
248
  this.addErrorRequestLog(i, n, a, d, u);
249
- const m = Re(u, a);
249
+ const m = we(u, a);
250
250
  throw new Error(`API request failed: ${m}`);
251
251
  }
252
252
  return u;
@@ -270,13 +270,13 @@ class Tn {
270
270
  ...z(void 0, { jwt: this.config.jwt }),
271
271
  ...n
272
272
  };
273
- return this.config.apiKey != null && (s[we] = this.config.apiKey), s;
273
+ return this.config.apiKey != null && (s[Ie] = this.config.apiKey), s;
274
274
  }
275
275
  addInfoRequestLog(t, n, s, r) {
276
276
  const o = {
277
277
  method: s.method || "GET",
278
278
  url: n,
279
- headers: Ie(r)
279
+ headers: be(r)
280
280
  };
281
281
  s.body && (o.body = s.body), console.info(t, o);
282
282
  }
@@ -307,37 +307,37 @@ function Rn(e) {
307
307
  return e?.annotations?.find((t) => {
308
308
  if (t.id === M.LAST_UPDATE_AT)
309
309
  return t;
310
- })?.value;
310
+ })?.text;
311
311
  }
312
312
  const L = (e, t) => e?.names && e?.names[t] || e?.name, fe = (e, t, n) => {
313
313
  if (!(!e || t?.has(e?.id)) && (t?.set(e?.id, e), e?.parent)) {
314
314
  const s = n?.get(e?.parent);
315
315
  fe(s, t, n);
316
316
  }
317
- }, Be = (e, t) => {
317
+ }, Ge = (e, t) => {
318
318
  const n = /* @__PURE__ */ new Map(), s = new Map(e?.map((r) => [r.id, r]));
319
319
  return t?.forEach((r) => {
320
320
  fe(r, n, s);
321
321
  }), Array.from(n?.values());
322
322
  };
323
- var Ge = /* @__PURE__ */ ((e) => (e.C = "c", e))(Ge || {}), 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 || {}), Ke = /* @__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))(Ke || {}), He = /* @__PURE__ */ ((e) => (e.ANNUAL = "A", e.QUARTERLY = "Q", e.MONTHLY = "M", e))(He || {});
324
- const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start", Je = "time_period_end", In = (e) => {
323
+ var Ke = /* @__PURE__ */ ((e) => (e.C = "c", e))(Ke || {}), 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 || {}), He = /* @__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))(He || {}), je = /* @__PURE__ */ ((e) => (e.ANNUAL = "A", e.QUARTERLY = "Q", e.MONTHLY = "M", e))(je || {});
324
+ const wn = ["FREQ", "FREQUENCY"], ze = "TIME_PERIOD", Je = "time_period_start", Xe = "time_period_end", In = (e) => {
325
325
  const t = e?.find(
326
- (o) => o.id === ze
327
- ), n = e?.find(
328
326
  (o) => o.id === Je
327
+ ), n = e?.find(
328
+ (o) => o.id === Xe
329
329
  ), s = n?.title ? new Date(n?.title) : null;
330
330
  return {
331
331
  startPeriod: t?.title ? new Date(t?.title) : null,
332
332
  endPeriod: s
333
333
  };
334
- }, Xe = (e, t) => e.id.localeCompare(t.id), Ze = (e, t) => e.memberValue.localeCompare(t.memberValue), et = (e, t) => {
334
+ }, Ze = (e, t) => e.id.localeCompare(t.id), et = (e, t) => e.memberValue.localeCompare(t.memberValue), tt = (e, t) => {
335
335
  const n = new Array(e.length), s = e.map((i, c) => [i, c]);
336
336
  s.sort(
337
- (i, c) => Xe(i[0], c[0])
337
+ (i, c) => Ze(i[0], c[0])
338
338
  );
339
339
  const r = [...t];
340
- r.sort(Ze);
340
+ r.sort(et);
341
341
  let o = 0;
342
342
  for (const i of s) {
343
343
  const c = i[0];
@@ -346,9 +346,9 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
346
346
  o < r.length && r[o].memberValue === c.id && (n[i[1]] = i[0]);
347
347
  }
348
348
  return n.filter((i) => i != null);
349
- }, tt = (e) => !!e?.some((t) => t.parent), bn = (e, t, n, s, r = []) => {
349
+ }, nt = (e) => !!e?.some((t) => t.parent), bn = (e, t, n, s, r = []) => {
350
350
  let o = e || [];
351
- if (nt(n || [], t || "")) {
351
+ if (st(n || [], t || "")) {
352
352
  const i = (n || [])[0].cubeRegions?.find(
353
353
  ({ isIncluded: c }) => c
354
354
  );
@@ -359,26 +359,26 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
359
359
  c ? o = o.length === 0 ? (c.selectionValues || []).map(({ memberValue: a }) => ({
360
360
  id: a,
361
361
  name: a
362
- })) : et(o, c.selectionValues) : o = [];
362
+ })) : tt(o, c.selectionValues) : o = [];
363
363
  }
364
364
  } else r.length !== 0 && (o = o.filter(({ id: i }) => r.includes(i)));
365
- return tt(e) && (o = Be(e, o)), o?.map((i) => ({
365
+ return nt(e) && (o = Ge(e, o)), o?.map((i) => ({
366
366
  ...i,
367
367
  name: s ? L(i, s) : i?.name
368
368
  }));
369
- }, nt = (e, t) => e != null && e.length > 0 && t != null, st = (e) => {
369
+ }, st = (e, t) => e != null && e.length > 0 && t != null, rt = (e) => {
370
370
  const t = [];
371
371
  return e?.filters?.forEach((n) => {
372
- n.componentCode !== je && t.push({
372
+ n.componentCode !== ze && t.push({
373
373
  componentCode: n.componentCode,
374
374
  operator: h.EQUALS,
375
375
  value: n.values.join(",")
376
376
  });
377
377
  }), t;
378
- }, $n = (e) => {
378
+ }, _n = (e) => {
379
379
  const t = /* @__PURE__ */ new Map();
380
380
  return e?.forEach((n) => {
381
- t.set(n.urn, st(n));
381
+ t.set(n.urn, rt(n));
382
382
  }), t;
383
383
  }, b = "+", U = (e, t) => {
384
384
  const { agency: n, id: s, version: r } = y(e), o = t.filter(
@@ -390,32 +390,32 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
390
390
  return o.find((a) => a.version === r);
391
391
  const i = o.map(
392
392
  (a) => a.version
393
- ), c = rt(r, i);
393
+ ), c = ot(r, i);
394
394
  return o.find(
395
395
  (a) => a.version === c[0]
396
396
  );
397
- }, rt = (e, t) => {
398
- const n = ot(e, t);
399
- return n.length > 0 ? [n[0]] : [];
400
397
  }, ot = (e, t) => {
398
+ const n = it(e, t);
399
+ return n.length > 0 ? [n[0]] : [];
400
+ }, it = (e, t) => {
401
401
  const n = [];
402
402
  return t.forEach((s) => {
403
- at(e, s) && n.push(s);
403
+ ct(e, s) && n.push(s);
404
404
  }), n;
405
- }, it = (e) => {
405
+ }, at = (e) => {
406
406
  const t = e.trim(), n = t.indexOf("+");
407
407
  if (n <= 0) return "";
408
408
  let s = n;
409
409
  for (; s > 0 && t[s - 1] >= "0" && t[s - 1] <= "9"; )
410
410
  s--;
411
411
  return s > 0 ? t.slice(0, s) : "";
412
- }, at = (e, t) => {
413
- const n = e.trim().replace(/\+/, ""), s = it(e);
414
- return t.startsWith(s) && be(t, n, ">=");
412
+ }, ct = (e, t) => {
413
+ const n = e.trim().replace(/\+/, ""), s = at(e);
414
+ return t.startsWith(s) && _e(t, n, ">=");
415
415
  }, O = (e, t) => {
416
- const { concept: n } = ct(e, t);
416
+ const { concept: n } = ut(e, t);
417
417
  return n;
418
- }, ct = (e, t) => {
418
+ }, ut = (e, t) => {
419
419
  if (e == null)
420
420
  return {
421
421
  concept: void 0,
@@ -433,7 +433,7 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
433
433
  };
434
434
  }
435
435
  for (const i of t)
436
- if (ut(i, r, s, o))
436
+ if (dt(i, r, s, o))
437
437
  return {
438
438
  concept: te(i?.concepts || [], n),
439
439
  scheme: i
@@ -442,7 +442,7 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
442
442
  concept: void 0,
443
443
  scheme: void 0
444
444
  };
445
- }, te = (e, t) => e?.find((n) => n.id === t), ut = (e, t, n, s) => e.id === t && e.agencyID === n && e.version === s, Pn = (e = [], t = [], n) => {
445
+ }, te = (e, t) => e?.find((n) => n.id === t), dt = (e, t, n, s) => e.id === t && e.agencyID === n && e.version === s, $n = (e = [], t = [], n) => {
446
446
  const s = n?.conceptIdentity || "", r = O(s, t), o = T(
447
447
  n?.localRepresentation?.enumeration
448
448
  ), i = T(
@@ -450,7 +450,7 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
450
450
  ), c = o || i;
451
451
  if (c != null)
452
452
  return U(c, e);
453
- }, dt = (e, t) => {
453
+ }, lt = (e, t) => {
454
454
  const n = e?.data?.dataSets?.[0], r = e?.data?.structures?.[0]?.attributes?.dimensionGroup || [], o = n?.dimensionGroupAttributes, i = {};
455
455
  for (const c of r) {
456
456
  const a = c.relationship.dimensions, { codedSeriesKey: d, decodedSeriesKey: u } = ge(
@@ -479,7 +479,7 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
479
479
  codedSeriesKey: o.join(":"),
480
480
  decodedSeriesKey: i.join(":")
481
481
  };
482
- }, _n = (e, t, n) => {
482
+ }, Pn = (e, t, n) => {
483
483
  const s = e?.data?.dataSets?.[0], r = e?.data?.structures?.[0], o = (r?.attributes?.dimensionGroup || []).filter(
484
484
  (l) => l.relationship.dimensions?.length === 1 && l.relationship.dimensions.includes(t || "")
485
485
  ), i = s?.dimensionGroupAttributes, c = [
@@ -501,7 +501,7 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
501
501
  };
502
502
  }
503
503
  return u;
504
- }, lt = (e, t) => {
504
+ }, mt = (e, t) => {
505
505
  if (t == null)
506
506
  return;
507
507
  const n = e.values?.[t];
@@ -514,7 +514,7 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
514
514
  ...o,
515
515
  name: s ? L(o, s) : o?.name
516
516
  })) || [];
517
- }, mt = (e, t) => {
517
+ }, ft = (e, t) => {
518
518
  const n = t?.dataStructureComponents?.attributeList, s = e?.metadataStructureComponents?.metadataAttributeList;
519
519
  return n?.metadataAttributeUsages?.map((r) => {
520
520
  const o = s?.metadataAttributes?.find(
@@ -531,7 +531,7 @@ const wn = ["FREQ", "FREQUENCY"], je = "TIME_PERIOD", ze = "time_period_start",
531
531
  const s = T(t?.conceptIdentity) || "", r = O(s, e);
532
532
  return n ? L(r, n) : r?.name ?? r?.id ?? t?.id;
533
533
  };
534
- var ft = /* @__PURE__ */ ((e) => (e.CONDITIONAL = "Conditional", e.MANDATORY = "Mandatory", e))(ft || {}), C = /* @__PURE__ */ ((e) => (e.DIMENSION = "Dimension", e.MEASURE_DIMENSION = "MeasureDimension", e.TIME_DIMENSION = "TimeDimension", e))(C || {}), gt = /* @__PURE__ */ ((e) => (e.UNBOUNDED = "unbounded", e))(gt || {});
534
+ var gt = /* @__PURE__ */ ((e) => (e.CONDITIONAL = "Conditional", e.MANDATORY = "Mandatory", e))(gt || {}), C = /* @__PURE__ */ ((e) => (e.DIMENSION = "Dimension", e.MEASURE_DIMENSION = "MeasureDimension", e.TIME_DIMENSION = "TimeDimension", e))(C || {}), ht = /* @__PURE__ */ ((e) => (e.UNBOUNDED = "unbounded", e))(ht || {});
535
535
  function ne(e) {
536
536
  return e?.dataStructures?.[0]?.dataStructureComponents?.dimensionList;
537
537
  }
@@ -549,7 +549,7 @@ function On(e) {
549
549
  const Cn = (e) => {
550
550
  const t = /* @__PURE__ */ new Map(), n = e?.dataStructures?.[0], s = e?.metadataStructures?.[0], r = e?.conceptSchemes || [], o = e?.codelists || [];
551
551
  if (e) {
552
- const i = mt(
552
+ const i = ft(
553
553
  s,
554
554
  n
555
555
  );
@@ -591,7 +591,7 @@ function V(e) {
591
591
  }
592
592
  return n;
593
593
  }
594
- function ht(e) {
594
+ function pt(e) {
595
595
  const t = new Date(e), s = -((t.getDay() + 6) % 7) + 3;
596
596
  return t.setDate(t.getDate() + s), new Date(t.valueOf());
597
597
  }
@@ -606,7 +606,7 @@ function he(e, t, n = "W") {
606
606
  return `${e}-${n}${t < 10 ? "0" + t : t}`;
607
607
  }
608
608
  function R(e, t = "W") {
609
- const n = ht(e), s = n.getFullYear(), r = V(s), o = 1 + Math.ceil(
609
+ const n = pt(e), s = n.getFullYear(), r = V(s), o = 1 + Math.ceil(
610
610
  (n.getTime() - r.getTime()) / Y
611
611
  );
612
612
  return {
@@ -615,15 +615,15 @@ function R(e, t = "W") {
615
615
  weekYear: s
616
616
  };
617
617
  }
618
- function pt(e) {
618
+ function Et(e) {
619
619
  const [t, n] = e.split("-W"), r = V(+t).getTime() + (+n - 1) * Y - 3 * x;
620
620
  return new Date(r);
621
621
  }
622
- function Et(e) {
622
+ function Dt(e) {
623
623
  const [t, n] = e.split("-W"), r = V(+t).getTime() + (+n - 1) * Y + 3 * x;
624
624
  return new Date(r);
625
625
  }
626
- const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e) => e.normalize("NFKC").replace(At, "_").replace(/_+/g, "_").replace(/\s+/g, " ").replace(/^[._ ]+/, "").trim() || "download", yt = (e, t, n, s, r, o, i) => {
626
+ const re = "/api/download", At = 6e4, yt = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e) => e.normalize("NFKC").replace(yt, "_").replace(/_+/g, "_").replace(/\s+/g, " ").replace(/^[._ ]+/, "").trim() || "download", vt = (e, t, n, s, r, o, i) => {
627
627
  const c = new URL(re, window.location.origin);
628
628
  if (c.search = new URLSearchParams({
629
629
  urn: e,
@@ -637,14 +637,14 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
637
637
  }).toString(), c.origin !== window.location.origin || c.pathname !== re)
638
638
  throw new Error("Invalid download URL");
639
639
  return c.toString();
640
- }, vt = (e, t) => {
640
+ }, St = (e, t) => {
641
641
  const n = URL.createObjectURL(e), s = document.createElement("a");
642
642
  s.href = n, s.download = pe(t), s.rel = "noopener noreferrer", s.click(), window.setTimeout(
643
643
  () => URL.revokeObjectURL(n),
644
- Dt
644
+ At
645
645
  );
646
646
  }, Yn = async (e, t, n, s, r, o, i, c) => {
647
- const a = pe(o), d = yt(
647
+ const a = pe(o), d = vt(
648
648
  e,
649
649
  t,
650
650
  n,
@@ -664,7 +664,7 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
664
664
  );
665
665
  }
666
666
  const l = await u.blob();
667
- c?.aborted || vt(l, a);
667
+ c?.aborted || St(l, a);
668
668
  }, Vn = (e, t) => {
669
669
  const n = [];
670
670
  for (const s of e) {
@@ -674,7 +674,7 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
674
674
  r != null && r.values?.length > 0 ? n.push(r.values?.join(me)) : n.push("*");
675
675
  }
676
676
  return n.join(".");
677
- }, St = (e, t) => {
677
+ }, Tt = (e, t) => {
678
678
  if (!e || !e.startPeriod && !e.endPeriod)
679
679
  return null;
680
680
  const n = [], { startPeriod: s, endPeriod: r } = e;
@@ -685,11 +685,11 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
685
685
  ), n.length === 0)
686
686
  return null;
687
687
  const o = t, i = n.join(me);
688
- return `${encodeURIComponent(`c[${o}]`)}${qe}${encodeURIComponent(i)}`;
688
+ return `${encodeURIComponent(`c[${o}]`)}${Qe}${encodeURIComponent(i)}`;
689
689
  }, oe = (e) => $e(e, "yyyy-MM-dd"), Wn = (e, t) => {
690
- const n = Tt(e, t) || null;
691
- return n ? St(n, t?.id) : null;
692
- }, Tt = (e, t) => {
690
+ const n = Rt(e, t) || null;
691
+ return n ? Tt(n, t?.id) : null;
692
+ }, Rt = (e, t) => {
693
693
  const n = t.id, s = e?.filters?.find(
694
694
  (a) => a.componentCode === n
695
695
  );
@@ -705,13 +705,13 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
705
705
  return { startPeriod: S(r[0]), endPeriod: null };
706
706
  const i = S(r[0]), c = S(r[1]);
707
707
  return { startPeriod: i, endPeriod: c };
708
- }, Rt = "Observation", kn = (e) => {
708
+ }, wt = "Observation", kn = (e) => {
709
709
  const t = e?.data?.dataSets, n = e?.data?.structures?.[0];
710
710
  if (!t || !n)
711
711
  return [];
712
712
  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 = [];
713
713
  for (const d in i) {
714
- const u = [], { name: l, parsedTimeSeriesValue: m } = wt(
714
+ const u = [], { name: l, parsedTimeSeriesValue: m } = It(
715
715
  d,
716
716
  c
717
717
  ), f = i[d], g = f.attributes || [];
@@ -728,23 +728,23 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
728
728
  u.push(
729
729
  ...Pt(f, n)
730
730
  );
731
- const E = $(
731
+ const E = _(
732
732
  s?.series || [],
733
733
  (D) => g[D]
734
- ), v = _t(
734
+ ), v = Nt(
735
735
  n.attributes?.dataSet || [],
736
736
  t[0].attributes?.filter((D) => D != null) || []
737
- ), w = dt(
737
+ ), w = lt(
738
738
  e,
739
739
  m
740
- ), I = o.map((D, Se) => {
741
- const H = w[D.id], Te = lt(
740
+ ), I = o.map((D, Te) => {
741
+ const H = w[D.id], Re = mt(
742
742
  D,
743
- H.values[Se]
743
+ H.values[Te]
744
744
  );
745
745
  return {
746
746
  attribute: D,
747
- dimensionGroupValue: Te,
747
+ dimensionGroupValue: Re,
748
748
  dimensionGroupData: H
749
749
  };
750
750
  });
@@ -758,7 +758,7 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
758
758
  });
759
759
  }
760
760
  return a;
761
- }, wt = (e, t) => {
761
+ }, It = (e, t) => {
762
762
  const n = e.split(new RegExp("(?<!\\|):(?!\\||$)")), s = [];
763
763
  for (let r = 0; r < n.length; r++) {
764
764
  const o = t?.[r], i = Number(n[r]);
@@ -772,33 +772,33 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
772
772
  s.push(c?.id || c?.value || "");
773
773
  }
774
774
  return {
775
- name: bt(s),
775
+ name: _t(s),
776
776
  parsedTimeSeriesValue: s
777
777
  };
778
- }, $ = (e, t) => {
778
+ }, _ = (e, t) => {
779
779
  const n = [];
780
780
  for (let s = 0; s < e.length; s++) {
781
- const r = e[s], o = t(s), i = o != null && r.values != null ? It(o, r) : void 0;
781
+ const r = e[s], o = t(s), i = o != null && r.values != null ? bt(o, r) : void 0;
782
782
  n.push({
783
783
  name: r.id,
784
784
  value: i
785
785
  });
786
786
  }
787
787
  return n;
788
- }, It = (e, t) => {
788
+ }, bt = (e, t) => {
789
789
  const n = t.values[e];
790
790
  return n == null ? typeof e == "object" ? e : e.toString() : n?.id || n?.value || n?.ids || n?.values;
791
- }, bt = (e) => e.map((t) => t ? $t(t) : "").join("."), $t = (e) => e.replace(/\./g, "|.").replace(/:/g, "|:"), Pt = (e, t) => {
791
+ }, _t = (e) => e.map((t) => t ? $t(t) : "").join("."), $t = (e) => e.replace(/\./g, "|.").replace(/:/g, "|:"), Pt = (e, t) => {
792
792
  const n = t.measures?.observation?.length;
793
793
  if (e.observations == null)
794
794
  return [
795
795
  {
796
796
  values: ie(e, t.measures),
797
- obsAttributes: $(
797
+ obsAttributes: _(
798
798
  t.attributes?.observation || [],
799
799
  (i) => e[i + n]
800
800
  ),
801
- dimensionAtObservation: Rt
801
+ dimensionAtObservation: wt
802
802
  }
803
803
  ];
804
804
  const s = e.observations, r = t.dimensions.observation?.[0], o = [];
@@ -810,43 +810,43 @@ const re = "/api/download", Dt = 6e4, At = /[\x00-\x1F\x7F<>:"/\\|?*]/g, pe = (e
810
810
  s[i],
811
811
  t.measures
812
812
  ),
813
- obsAttributes: $(
813
+ obsAttributes: _(
814
814
  t.attributes?.observation || [],
815
815
  (a) => s[i][a + n]
816
816
  )
817
817
  });
818
818
  }
819
819
  return o;
820
- }, ie = (e, t) => t?.observation?.map((n, s) => ({ name: n.id, value: e[s] })) || [], _t = (e, t) => e.reduce(
820
+ }, ie = (e, t) => t?.observation?.map((n, s) => ({ name: n.id, value: e[s] })) || [], Nt = (e, t) => e.reduce(
821
821
  (n, s, r) => {
822
822
  const o = t[r];
823
- return Nt(n, s, o, ""), n;
823
+ return Mt(n, s, o, ""), n;
824
824
  },
825
825
  []
826
- ), Nt = (e, t, n, s) => {
826
+ ), Mt = (e, t, n, s) => {
827
827
  const r = n != null ? t?.values?.length > 0 ? t.values[n]?.id || t.values[n]?.value : String(n) : s;
828
828
  e.push({
829
829
  name: t.id,
830
830
  value: r || ""
831
831
  });
832
- }, Mt = /^[0-9][0-9][0-9][0-9]-Q[1-4]$/, Lt = /^[0-9][0-9][0-9][0-9]-W(0[1-9]|[1-4][0-9]|5[0-3])$/, Ut = /^[0-9][0-9][0-9][0-9]-S[1-2]$/, Ot = /^[0-9][0-9][0-9][0-9]$/, Ct = /^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/, xt = /^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/, W = (e) => Ot.exec(e), k = (e) => !!W(e), Yt = (e) => Ut.exec(e), q = (e) => !!Yt(e), Q = (e) => xt.exec(e), F = (e) => !!Q(e), B = (e) => Mt.exec(e), G = (e) => !!B(e), Vt = (e) => Ct.exec(e), Wt = (e) => !!Vt(e), kt = (e) => Lt.exec(e), K = (e) => !!kt(e);
832
+ }, Lt = /^[0-9][0-9][0-9][0-9]-Q[1-4]$/, Ut = /^[0-9][0-9][0-9][0-9]-W(0[1-9]|[1-4][0-9]|5[0-3])$/, Ot = /^[0-9][0-9][0-9][0-9]-S[1-2]$/, Ct = /^[0-9][0-9][0-9][0-9]$/, xt = /^[0-9][0-9][0-9][0-9]-(0[1-9]|1[0-2])-[0-9][0-9]$/, Yt = /^[0-9][0-9][0-9][0-9]-M(0[1-9]|(1[0-2]))$/, W = (e) => Ct.exec(e), k = (e) => !!W(e), Vt = (e) => Ot.exec(e), q = (e) => !!Vt(e), Q = (e) => Yt.exec(e), F = (e) => !!Q(e), B = (e) => Lt.exec(e), G = (e) => !!B(e), Wt = (e) => xt.exec(e), kt = (e) => !!Wt(e), qt = (e) => Ut.exec(e), K = (e) => !!qt(e);
833
833
  function Ee(e) {
834
- return k(e) ? qt(e) : q(e) ? Ft(e) : G(e) ? Gt(e) : F(e) ? Ht(e) : K(e) ? pt(e) : zt(e);
834
+ return k(e) ? Qt(e) : q(e) ? Bt(e) : G(e) ? Kt(e) : F(e) ? jt(e) : K(e) ? Et(e) : Jt(e);
835
835
  }
836
836
  function De(e) {
837
- return k(e) ? Qt(e) : q(e) ? Bt(e) : G(e) ? Kt(e) : F(e) ? jt(e) : K(e) ? Et(e) : Jt(e);
837
+ return k(e) ? Ft(e) : q(e) ? Gt(e) : G(e) ? Ht(e) : F(e) ? zt(e) : K(e) ? Dt(e) : Xt(e);
838
838
  }
839
- function qt(e) {
839
+ function Qt(e) {
840
840
  const t = W(e);
841
841
  if (t)
842
842
  return new Date(Number(t[0]), 0, 1);
843
843
  }
844
- function Qt(e) {
844
+ function Ft(e) {
845
845
  const t = W(e);
846
846
  if (t)
847
847
  return new Date(Number(t[0]) + 1, 0, 1);
848
848
  }
849
- function Ft(e) {
849
+ function Bt(e) {
850
850
  const [t, n] = e.split("-S");
851
851
  switch (+n) {
852
852
  case 1:
@@ -855,7 +855,7 @@ function Ft(e) {
855
855
  return new Date(+t, 6, 1);
856
856
  }
857
857
  }
858
- function Bt(e) {
858
+ function Gt(e) {
859
859
  const [t, n] = e.split("-S");
860
860
  switch (+n) {
861
861
  case 1:
@@ -864,7 +864,7 @@ function Bt(e) {
864
864
  return new Date(+t + 1, 0, 1);
865
865
  }
866
866
  }
867
- function Gt(e) {
867
+ function Kt(e) {
868
868
  const t = B(e);
869
869
  if (!t)
870
870
  return;
@@ -880,7 +880,7 @@ function Gt(e) {
880
880
  return new Date(+n, 9, 1);
881
881
  }
882
882
  }
883
- function Kt(e) {
883
+ function Ht(e) {
884
884
  const t = B(e);
885
885
  if (!t)
886
886
  return;
@@ -896,44 +896,44 @@ function Kt(e) {
896
896
  return new Date(+n + 1, 0, 1);
897
897
  }
898
898
  }
899
- function Ht(e) {
899
+ function jt(e) {
900
900
  const t = Q(e);
901
901
  if (!t)
902
902
  return;
903
903
  const [n, s] = t[0].split("-M");
904
904
  return new Date(+n, +s - 1, 1);
905
905
  }
906
- function jt(e) {
906
+ function zt(e) {
907
907
  const t = Q(e);
908
908
  if (!t)
909
909
  return;
910
910
  const [n, s] = t[0].split("-M");
911
911
  return new Date(+n, +s, 1);
912
912
  }
913
- const zt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Jt = (e) => {
913
+ const Jt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Xt = (e) => {
914
914
  const t = /* @__PURE__ */ new Date(`${e}T23:59:00`);
915
915
  return t.setMinutes(t.getMinutes() + 1), t;
916
- }, Xt = 1, Zt = (e, t, n, s = !0, r = "Q") => {
917
- const o = [], i = t && t > 3 ? an(t, s) : 1, c = n ? Math.floor((n - 1) / 3) : 4;
916
+ }, Zt = 1, en = (e, t, n, s = !0, r = "Q") => {
917
+ const o = [], i = t && t > 3 ? cn(t, s) : 1, c = n ? Math.floor((n - 1) / 3) : 4;
918
918
  for (let a = i; a <= c; a++)
919
919
  o.push(`${e}-${r}${a}`);
920
920
  return o;
921
- }, en = (e, t, n, s = "S") => {
921
+ }, tn = (e, t, n, s = "S") => {
922
922
  const r = [];
923
923
  return (t || 1) < 7 && (n || 12) > 6 && r.push(`${e}-${s}1`), n == null && r.push(`${e}-${s}2`), r;
924
- }, qn = (e) => Math.ceil(e / 3), Ae = (e, t, n = "M") => `${e}-${n}${t.toString().padStart(2, "0")}`, tn = (e, t, n = "M") => {
924
+ }, qn = (e) => Math.ceil(e / 3), Ae = (e, t, n = "M") => `${e}-${n}${t.toString().padStart(2, "0")}`, nn = (e, t, n = "M") => {
925
925
  const s = [];
926
926
  for (let r = t; r <= 12; r++)
927
927
  s.push(Ae(e, r, n));
928
928
  return s;
929
- }, nn = (e, t, n, s = "M") => {
929
+ }, sn = (e, t, n, s = "M") => {
930
930
  const r = [];
931
931
  for (let o = t; o < n; o++)
932
932
  r.push(Ae(e, o, s));
933
933
  return r;
934
- }, sn = (e, t, n, s = "M") => {
934
+ }, rn = (e, t, n, s = "M") => {
935
935
  const r = t || 1, o = n == null, i = n || 12;
936
- return o ? tn(e, r, s) : nn(e, r, i, s);
936
+ return o ? nn(e, r, s) : sn(e, r, i, s);
937
937
  }, Qn = (e, t, n = "M") => {
938
938
  switch (t) {
939
939
  case 0:
@@ -963,29 +963,29 @@ const zt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Jt = (e) => {
963
963
  default:
964
964
  return [];
965
965
  }
966
- }, rn = (e, t) => {
967
- const n = p(t, !0), s = p(e), r = n.getFullYear(), o = s.getFullYear(), i = n.getTime() <= s.getTime() ? o + Xt - r : 0;
966
+ }, on = (e, t) => {
967
+ const n = p(t, !0), s = p(e), r = n.getFullYear(), o = s.getFullYear(), i = n.getTime() <= s.getTime() ? o + Zt - r : 0;
968
968
  return Array.from({ length: i }, (a, d) => r + d);
969
969
  }, p = (e, t = !1) => {
970
- const n = on(e, t);
970
+ const n = an(e, t);
971
971
  return n ? (n.getTimezoneOffset() > 0 && n.setMinutes(n.getMinutes() + n.getTimezoneOffset()), n) : /* @__PURE__ */ new Date();
972
- }, on = (e, t = !1) => {
972
+ }, an = (e, t = !1) => {
973
973
  const n = Number(e);
974
974
  return e.toString().length !== 13 ? t ? Ee(e) : De(e) : isNaN(n) ? /* @__PURE__ */ new Date(`${e}T00:00:00.000Z`) : new Date(n);
975
- }, an = (e, t) => t ? Math.floor((e + 1) / 3) : Math.ceil((e + 1) / 3), Fn = (e, t) => {
975
+ }, cn = (e, t) => t ? Math.floor((e + 1) / 3) : Math.ceil((e + 1) / 3), Fn = (e, t) => {
976
976
  const n = ce(e) - ce(t);
977
977
  if (n === 0 && e !== t) {
978
978
  const s = ae(e), r = ae(t);
979
979
  return s - r;
980
980
  }
981
981
  return n;
982
- }, ae = (e) => k(e) ? 6 : q(e) ? 5 : G(e) ? 4 : F(e) ? 3 : K(e) ? 2 : Wt(e) ? 1 : 0, ce = (e, t = !1) => (t ? Ee(e) : De(e))?.getTime() || 0, ye = (e, t, n) => {
982
+ }, ae = (e) => k(e) ? 6 : q(e) ? 5 : G(e) ? 4 : F(e) ? 3 : K(e) ? 2 : kt(e) ? 1 : 0, ce = (e, t = !1) => (t ? Ee(e) : De(e))?.getTime() || 0, ye = (e, t, n) => {
983
983
  const s = p(t, !0), r = p(n), o = p(e, !0), i = p(e), c = s.getTime() > o.getTime() ? s : o, a = r.getTime() < i.getTime() ? r : i;
984
984
  return {
985
985
  start: c,
986
986
  end: a
987
987
  };
988
- }, cn = (e, t, n, s = "W") => {
988
+ }, un = (e, t, n, s = "W") => {
989
989
  const r = +e, { start: o, end: i } = ye(e, t, n);
990
990
  if (o.getTime() > i.getTime())
991
991
  return [];
@@ -994,10 +994,10 @@ const zt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Jt = (e) => {
994
994
  for (let m = a; m <= u; m++)
995
995
  l.push(he(r, m, s));
996
996
  return l;
997
- }, un = (e) => {
997
+ }, dn = (e) => {
998
998
  const t = new Date(e);
999
999
  return t.setMinutes(t.getMinutes() - t.getTimezoneOffset()), t.toISOString().slice(0, 10);
1000
- }, dn = (e, t, n) => {
1000
+ }, ln = (e, t, n) => {
1001
1001
  const { start: s, end: r } = ye(e, t, n);
1002
1002
  if (s.getTime() > r.getTime())
1003
1003
  return [];
@@ -1007,11 +1007,11 @@ const zt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Jt = (e) => {
1007
1007
  s.getDate()
1008
1008
  ), c = new Date(r.getFullYear(), r.getMonth(), r.getDate());
1009
1009
  for (; i.getTime() < c.getTime(); ) {
1010
- const a = un(i);
1010
+ const a = dn(i);
1011
1011
  o.push(a), i.setDate(i.getDate() + 1);
1012
1012
  }
1013
1013
  return o;
1014
- }, ln = (e) => ({
1014
+ }, mn = (e) => ({
1015
1015
  isDailyExist: !!e?.some(({ memberValue: t }) => t === "D"),
1016
1016
  isWeeklyExist: !!e?.some(({ memberValue: t }) => t === "W"),
1017
1017
  isMonthlyExist: !!e?.some(({ memberValue: t }) => t === "M"),
@@ -1020,15 +1020,15 @@ const zt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Jt = (e) => {
1020
1020
  isYearlyExist: !!e?.some(
1021
1021
  ({ memberValue: t }) => t === "A" || t === "Y"
1022
1022
  )
1023
- }), mn = (e, t, n, s) => {
1023
+ }), fn = (e, t, n, s) => {
1024
1024
  const r = s === 0 ? p(t.toString(), !0)?.getMonth() + 1 : void 0, o = s === e.length - 1 ? p(n.toString())?.getMonth() + 1 || 1 : void 0;
1025
1025
  return { startMonth: r, endMonth: o };
1026
- }, fn = ["FREQUENCY", "FREQ"], Bn = (e, t) => {
1026
+ }, gn = ["FREQUENCY", "FREQ"], Bn = (e, t) => {
1027
1027
  const n = e?.[0]?.cubeRegions?.[0]?.memberSelection?.find(
1028
- (a) => fn.includes(a.componentId)
1029
- )?.selectionValues, s = ln(n || []), r = t?.startPeriod?.getTime() || 1, o = t?.endPeriod?.getTime() || 1, i = rn(o, r), c = [];
1028
+ (a) => gn.includes(a.componentId)
1029
+ )?.selectionValues, s = mn(n || []), r = t?.startPeriod?.getTime() || 1, o = t?.endPeriod?.getTime() || 1, i = on(o, r), c = [];
1030
1030
  return i.forEach((a, d) => {
1031
- const u = [], { startMonth: l, endMonth: m } = mn(
1031
+ const u = [], { startMonth: l, endMonth: m } = fn(
1032
1032
  i,
1033
1033
  new Date(r),
1034
1034
  new Date(o),
@@ -1041,28 +1041,34 @@ const zt = (e) => /* @__PURE__ */ new Date(`${e}T00:00:00`), Jt = (e) => {
1041
1041
  isSemiAnnualExist: w,
1042
1042
  isYearlyExist: I
1043
1043
  } = s;
1044
- I && u.push(a.toString()), w && u.push(...en(a, l, m)), v && u.push(
1045
- ...Zt(a, l, m, !1)
1046
- ), E && u.push(...sn(a, l, m)), g && u.push(
1047
- ...cn(a, r.toString(), o.toString())
1044
+ I && u.push(a.toString()), w && u.push(...tn(a, l, m)), v && u.push(
1045
+ ...en(a, l, m, !1)
1046
+ ), E && u.push(...rn(a, l, m)), g && u.push(
1047
+ ...un(a, r.toString(), o.toString())
1048
1048
  ), f && u.push(
1049
- ...dn(a, r.toString(), o.toString())
1049
+ ...ln(a, r.toString(), o.toString())
1050
1050
  ), c.push(...u);
1051
1051
  }), c;
1052
1052
  };
1053
- function gn(e) {
1053
+ function ve(e) {
1054
1054
  const { urn: t } = e.details;
1055
- return _(t.resourceId, t.version, t.agencyId);
1055
+ return P(t.resourceId, t.version, t.agencyId);
1056
1056
  }
1057
1057
  function Gn(e) {
1058
1058
  const t = {};
1059
1059
  for (const n of e.datasets) {
1060
- const s = n.dataset, r = gn(s);
1060
+ const s = n.dataset, r = ve(s);
1061
1061
  t[r] = s.details.dimensions;
1062
1062
  }
1063
1063
  return t;
1064
1064
  }
1065
1065
  function Kn(e) {
1066
+ const t = {};
1067
+ for (const n of e.datasets)
1068
+ n.last_updated_at && (t[ve(n.dataset)] = n.last_updated_at);
1069
+ return t;
1070
+ }
1071
+ function Hn(e) {
1066
1072
  return e?.codelists?.length ? e.codelists.map((t) => ({
1067
1073
  id: t.id,
1068
1074
  agencyID: t.agencyID ?? "",
@@ -1094,39 +1100,39 @@ function hn(e, t) {
1094
1100
  };
1095
1101
  return n(e) === n(t);
1096
1102
  }
1097
- function P(e) {
1098
- return _(
1103
+ function $(e) {
1104
+ return P(
1099
1105
  e.id,
1100
1106
  e.version ?? "",
1101
1107
  e.agencyID ?? ""
1102
1108
  );
1103
1109
  }
1104
- function ve(e, t, n) {
1110
+ function Se(e, t, n) {
1105
1111
  t?.forEach((s) => {
1106
- const { childId: r, agency: o, id: i, version: c } = ue(s.code), a = _(i, c, o), d = n?.find(
1107
- (l) => hn(a, P(l))
1112
+ const { childId: r, agency: o, id: i, version: c } = ue(s.code), a = P(i, c, o), d = n?.find(
1113
+ (l) => hn(a, $(l))
1108
1114
  ), u = d?.codes?.find((l) => l.id === r);
1109
1115
  if (u != null) {
1110
1116
  const l = s.code.replace(
1111
1117
  a,
1112
- P(d)
1118
+ $(d)
1113
1119
  );
1114
1120
  e.push({ ...u, code: l });
1115
1121
  }
1116
- ve(e, s.hierarchicalCodes, n);
1122
+ Se(e, s.hierarchicalCodes, n);
1117
1123
  });
1118
1124
  }
1119
- function Hn(e, t) {
1125
+ function jn(e, t) {
1120
1126
  const n = [];
1121
- return ve(n, e?.hierarchicalCodes, t), n;
1127
+ return Se(n, e?.hierarchicalCodes, t), n;
1122
1128
  }
1123
- function jn(e) {
1129
+ function zn(e) {
1124
1130
  const t = {};
1125
1131
  return e?.forEach((n) => {
1126
- t[P(n)] = n.codes;
1132
+ t[$(n)] = n.codes;
1127
1133
  }), t;
1128
1134
  }
1129
- function zn(e, t, n) {
1135
+ function Jn(e, t, n) {
1130
1136
  if (!n || n.length === 0 || !t)
1131
1137
  return e;
1132
1138
  const s = n[0].cubeRegions?.find(
@@ -1140,7 +1146,7 @@ function zn(e, t, n) {
1140
1146
  const o = new Set(r.selectionValues.map((i) => i.memberValue));
1141
1147
  return e.filter((i) => o.has(i.id));
1142
1148
  }
1143
- class Jn {
1149
+ class Xn {
1144
1150
  constructor(t) {
1145
1151
  this.client = t;
1146
1152
  }
@@ -1165,24 +1171,24 @@ class Jn {
1165
1171
  }
1166
1172
  export {
1167
1173
  M as Annotations,
1168
- ft as AssignmentStatus,
1174
+ gt as AssignmentStatus,
1169
1175
  yn as AvailabilityApi,
1170
- We as DATASET_DATA_URL,
1176
+ ke as DATASET_DATA_URL,
1171
1177
  Sn as DatasetApi,
1172
1178
  C as DimensionType,
1173
- Ce as DownloadType,
1179
+ xe as DownloadType,
1174
1180
  wn as FREQUENCY_DIMENSION_ID,
1175
- fn as FREQUENCY_DIM_ID,
1176
- Oe as FileColumnsAttribute,
1177
- Qe as GET_v3_FILTER_ALL,
1181
+ gn as FREQUENCY_DIM_ID,
1182
+ Ce as FileColumnsAttribute,
1183
+ Fe as GET_v3_FILTER_ALL,
1178
1184
  vn as GET_v3_FILTER_AND,
1179
1185
  me as GET_v3_FILTER_OR,
1180
- Jn as HierarchyApi,
1181
- Rt as OBSERVATION_KEY,
1182
- gt as OccurrenceType,
1183
- He as Periods,
1184
- Ke as RepresentationTextType,
1185
- Ge as SDMX_DATA_QUERY_PARAMS,
1186
+ Xn as HierarchyApi,
1187
+ wt as OBSERVATION_KEY,
1188
+ ht as OccurrenceType,
1189
+ je as Periods,
1190
+ He as RepresentationTextType,
1191
+ Ke as SDMX_DATA_QUERY_PARAMS,
1186
1192
  b as SINGLE_WILDCARD_SYMBOL,
1187
1193
  Tn as SdmxApiClient,
1188
1194
  de as SdmxAvailabilityMode,
@@ -1190,97 +1196,98 @@ export {
1190
1196
  le as SdmxDetails,
1191
1197
  N as SdmxReferences,
1192
1198
  h as SeriesFilterOperator,
1193
- je as TIME_PERIOD,
1194
- Je as TIME_PERIOD_END_ANNOTATION_KEY,
1195
- ze as TIME_PERIOD_START_ANNOTATION_KEY,
1199
+ ze as TIME_PERIOD,
1200
+ Xe as TIME_PERIOD_END_ANNOTATION_KEY,
1201
+ Je as TIME_PERIOD_START_ANNOTATION_KEY,
1196
1202
  Gn as buildDatasetDimensionsMetadataMap,
1197
- Ct as dailyPattern,
1203
+ Kn as buildDatasetLastUpdatedMap,
1204
+ xt as dailyPattern,
1198
1205
  $t as decodeDimensionId,
1199
- Pn as findCodelistByDimension,
1206
+ $n as findCodelistByDimension,
1200
1207
  ee as generateDatasetDataRequest,
1201
- _ as generateShortUrn,
1208
+ P as generateShortUrn,
1202
1209
  Bn as getAdditionalColumns,
1203
1210
  In as getAnnotationPeriod,
1204
1211
  U as getArtifactByUrnWithWildCard,
1205
- _n as getAttachedDimensionsSeriesByDimension,
1206
- dt as getAttachedDimensionsSeriesByTsId,
1212
+ Pn as getAttachedDimensionsSeriesByDimension,
1213
+ lt as getAttachedDimensionsSeriesByTsId,
1207
1214
  ge as getAttachedDimensionsSeriesKey,
1208
- lt as getAttributeValueFromDataQueryResponse,
1215
+ mt as getAttributeValueFromDataQueryResponse,
1209
1216
  Nn as getAvailableCodes,
1210
1217
  bn as getAvailableCodesFromConstrains,
1211
1218
  ue as getChildParsedUrn,
1212
- jn as getCodeListsData,
1219
+ zn as getCodeListsData,
1213
1220
  O as getConcept,
1214
1221
  te as getConceptByUrn,
1215
- ct as getConceptWithScheme,
1216
- mt as getConvertedMetaAttributes,
1217
- Vt as getDailyRegExp,
1218
- dn as getDaysColumns,
1222
+ ut as getConceptWithScheme,
1223
+ ft as getConvertedMetaAttributes,
1224
+ Wt as getDailyRegExp,
1225
+ ln as getDaysColumns,
1219
1226
  Mn as getDimensionTitle,
1220
1227
  ne as getDimensions,
1221
- Be as getFilteredItemsWithParents,
1222
- st as getFiltersDtoFromDataQuery,
1223
- $n as getFiltersDtoMapFromDataQuery,
1224
- zn as getHierarchyAvailableCodes,
1225
- Hn as getHierarchyCodes,
1228
+ Ge as getFilteredItemsWithParents,
1229
+ rt as getFiltersDtoFromDataQuery,
1230
+ _n as getFiltersDtoMapFromDataQuery,
1231
+ Jn as getHierarchyAvailableCodes,
1232
+ jn as getHierarchyCodes,
1226
1233
  R as getISOWeek,
1227
1234
  T as getKeyFromUrn,
1228
1235
  Rn as getLastUpdatedTime,
1229
1236
  se as getLastWeekNumberOfYear,
1230
1237
  L as getLocalizedName,
1231
- sn as getMonthlyData,
1238
+ rn as getMonthlyData,
1232
1239
  Qn as getMonthlyDataByQuarter,
1233
1240
  Q as getMonthlyRegExp,
1234
1241
  De as getParsedEndPeriodDate,
1235
1242
  kn as getParsedResponse,
1236
1243
  Ee as getParsedStartPeriodDate,
1237
1244
  p as getPeriodDate,
1238
- ln as getPeriods,
1245
+ mn as getPeriods,
1239
1246
  qn as getQuarterByMonth,
1240
1247
  B as getQuarterlyRegExp,
1241
- Zt as getQuartersData,
1242
- St as getQueryTimePeriodFilters,
1243
- xe as getRequestAcceptHeader,
1244
- rt as getResolvedVersionBySingleWildcard,
1245
- Ye as getResponseContentType,
1246
- en as getSemiAnnualData,
1247
- Yt as getSemiAnnuallyRegExp,
1248
- $ as getSeriesAttributes,
1249
- wt as getSeriesName,
1248
+ en as getQuartersData,
1249
+ Tt as getQueryTimePeriodFilters,
1250
+ Ye as getRequestAcceptHeader,
1251
+ ot as getResolvedVersionBySingleWildcard,
1252
+ Ve as getResponseContentType,
1253
+ tn as getSemiAnnualData,
1254
+ Vt as getSemiAnnuallyRegExp,
1255
+ _ as getSeriesAttributes,
1256
+ It as getSeriesName,
1250
1257
  Cn as getStructureComponentsMap,
1251
1258
  Ln as getStructureDimensions,
1252
1259
  On as getTimeDimension,
1253
1260
  Un as getTimePeriods,
1254
1261
  Wn as getTimeQueryFilter,
1255
- Tt as getTimeRangeFromAttachment,
1262
+ Rt as getTimeRangeFromAttachment,
1256
1263
  xn as getTimeSeriesCount,
1257
1264
  Vn as getTimeSeriesFilterKey,
1258
- bt as getTimeSeriesId,
1265
+ _t as getTimeSeriesId,
1259
1266
  he as getWeekCode,
1260
- Et as getWeeklyPeriodEndDate,
1261
- pt as getWeeklyPeriodStartDate,
1262
- kt as getWeeklyRegExp,
1263
- cn as getWeeksColumns,
1264
- it as getWildCardPrefix,
1267
+ Dt as getWeeklyPeriodEndDate,
1268
+ Et as getWeeklyPeriodStartDate,
1269
+ qt as getWeeklyRegExp,
1270
+ un as getWeeksColumns,
1271
+ at as getWildCardPrefix,
1265
1272
  ye as getYearPeriod,
1266
1273
  W as getYearlyRegExp,
1267
- rn as getYears,
1268
- Wt as isDaily,
1274
+ on as getYears,
1275
+ kt as isDaily,
1269
1276
  F as isMonthly,
1270
1277
  G as isQuarterly,
1271
1278
  q as isSemiAnnually,
1272
1279
  K as isWeekly,
1273
- at as isWildCardVersionCorrect,
1280
+ ct as isWildCardVersionCorrect,
1274
1281
  k as isYearly,
1275
- xt as monthlyPattern,
1282
+ Yt as monthlyPattern,
1276
1283
  Yn as openDownloadWindow,
1277
- Mt as quarterPattern,
1278
- Kn as resolveCodelistsFromResponse,
1284
+ Lt as quarterPattern,
1285
+ Hn as resolveCodelistsFromResponse,
1279
1286
  pe as sanitizeDownloadFilename,
1280
- Ut as semiAnnuallyPattern,
1287
+ Ot as semiAnnuallyPattern,
1281
1288
  Fn as sortPeriods,
1282
1289
  y as splitUrn,
1283
1290
  hn as urnMatchesIgnoreVersion,
1284
- Lt as weeklyPattern,
1285
- Ot as yearlyPattern
1291
+ Ut as weeklyPattern,
1292
+ Ct as yearlyPattern
1286
1293
  };
@@ -3,6 +3,7 @@ export interface DeploymentDatasetsResponseData {
3
3
  }
4
4
  export interface ChannelDataset {
5
5
  dataset: Dataset;
6
+ last_updated_at?: string | null;
6
7
  }
7
8
  export interface Dataset {
8
9
  details: DatasetDetails;
@@ -32,3 +33,4 @@ export interface DimensionAllValues {
32
33
  export type ShortUrn = string;
33
34
  export type DimensionKey = string;
34
35
  export type DatasetDimensionsMetadataMap = Record<ShortUrn, Record<DimensionKey, DimensionConfig>>;
36
+ export type DatasetLastUpdatedMap = Record<ShortUrn, string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epam/statgpt-sdmx-toolkit",
3
- "version": "0.7.0-dev.19",
3
+ "version": "0.7.0-dev.20",
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.7.0-dev.19",
18
- "@epam/statgpt-shared-toolkit": "0.7.0-dev.19"
17
+ "@epam/statgpt-dial-toolkit": "0.7.0-dev.20",
18
+ "@epam/statgpt-shared-toolkit": "0.7.0-dev.20"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "compare-versions": "^6.1.1",
@@ -1,2 +1,3 @@
1
- import { DeploymentDatasetsResponseData, DatasetDimensionsMetadataMap } from '../models';
1
+ import { DeploymentDatasetsResponseData, DatasetDimensionsMetadataMap, DatasetLastUpdatedMap } from '../models';
2
2
  export declare function buildDatasetDimensionsMetadataMap(data: DeploymentDatasetsResponseData): DatasetDimensionsMetadataMap;
3
+ export declare function buildDatasetLastUpdatedMap(data: DeploymentDatasetsResponseData): DatasetLastUpdatedMap;