brickcharts
Version:
A comprehensive library for managing Billboard and Last.FM charts with visualizations and data management
6 lines • 87.7 kB
JavaScript
(function(T,v){typeof exports=="object"&&typeof module<"u"?v(exports):typeof define=="function"&&define.amd?define(["exports"],v):(T=typeof globalThis<"u"?globalThis:T||self,v(T.BrickCharts={}))})(this,function(T){"use strict";var v=(n=>(n.BILLBOARD="billboard",n.LASTFM="lastfm",n.CUSTOM="custom",n))(v||{});class Oe extends Error{constructor(e,t,r){super(e),this.code=t,this.source=r,this.name="BrickChartsError"}}class x extends Oe{constructor(e,t,r){super(e,"API_ERROR",r),this.statusCode=t,this.name="APIError"}}class ae extends Oe{constructor(e){super(e,"CACHE_ERROR"),this.name="CacheError"}}const{getChart:We,listCharts:jt}=require("@aribradshaw/billboard-top-100");class je{constructor(){this.name="Billboard",this.source=v.BILLBOARD,this.chartMap=new Map([["hot-100","hot-100"],["billboard-200","billboard-200"],["artist-100","artist-100"],["pop-songs","pop-songs"],["country-songs","country-songs"],["rock-songs","rock-songs"],["r-b-songs","r-b-songs"],["rap-songs","rap-songs"],["dance-songs","dance-songs"],["latin-songs","latin-songs"]])}async getAvailableCharts(){return new Promise((e,t)=>{jt((r,a)=>{if(r)t(new x(`Failed to fetch available charts: ${r}`,500,v.BILLBOARD));else{const s=a.map(i=>typeof i=="string"?i:i&&i.chart?i.chart:i&&i.name?i.name:String(i));e(s)}})})}async getChart(e,t={}){return new Promise((r,a)=>{const s=this.chartMap.get(e)||e,i=t.date?this.formatDateForAPI(t.date):void 0;i?We(s,i,(o,c)=>{o?a(new x(`Failed to fetch Billboard chart ${e}: ${o}`,500,v.BILLBOARD)):r(this.normalizeBillboardData(c,e,t.date||new Date))}):We(s,(o,c)=>{o?a(new x(`Failed to fetch Billboard chart ${e}: ${o}`,500,v.BILLBOARD)):r(this.normalizeBillboardData(c,e,new Date))})})}async getHistoricalData(e,t){const r=[],a=new Date(t.start),s=new Date(t.end),i=this.generateWeeklyDates(a,s);try{for(const o of i)try{const c=await this.getChart(e,{date:o});r.push(c),await this.delay(100)}catch(c){console.warn(`Failed to fetch chart for ${o}: ${c}`)}return{chartType:e,dateRange:t,data:r,source:v.BILLBOARD}}catch(o){throw new x(`Failed to fetch historical data for ${e}: ${o}`,500,v.BILLBOARD)}}normalizeBillboardData(e,t,r){const a=[];return(e.songs||e.albums||[]).forEach((i,o)=>{var c,l,d;a.push({rank:i.rank||o+1,title:i.title,artist:i.artist,lastWeek:((c=i.position)==null?void 0:c.positionLastWeek)>0?i.position.positionLastWeek:void 0,peakPosition:(l=i.position)==null?void 0:l.peakPosition,weeksOnChart:(d=i.position)==null?void 0:d.weeksOnChart,chartDate:r,source:v.BILLBOARD,metadata:{originalData:i,cover:i.cover}})}),{chartType:t,date:r,entries:a,source:v.BILLBOARD,totalEntries:a.length,metadata:{week:e.week,previousWeek:e.previousWeek,nextWeek:e.nextWeek}}}formatDateForAPI(e){return e.toISOString().split("T")[0]}generateWeeklyDates(e,t){const r=[],a=new Date(e);for(;a<=t;)r.push(new Date(a)),a.setDate(a.getDate()+7);return r}delay(e){return new Promise(t=>setTimeout(t,e))}async getChartInfo(e){try{return(await this.getAvailableCharts()).find(r=>r===e)?{name:e,available:!0}:null}catch(t){throw new x(`Failed to get chart info for ${e}: ${t}`,500,v.BILLBOARD)}}}function ze(n,e){return function(){return n.apply(e,arguments)}}const{toString:zt}=Object.prototype,{getPrototypeOf:Ee}=Object,{iterator:se,toStringTag:He}=Symbol,ie=(n=>e=>{const t=zt.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),N=n=>(n=n.toLowerCase(),e=>ie(e)===n),oe=n=>e=>typeof e===n,{isArray:q}=Array,Q=oe("undefined");function Ht(n){return n!==null&&!Q(n)&&n.constructor!==null&&!Q(n.constructor)&&A(n.constructor.isBuffer)&&n.constructor.isBuffer(n)}const Ye=N("ArrayBuffer");function Yt(n){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&Ye(n.buffer),e}const qt=oe("string"),A=oe("function"),qe=oe("number"),ce=n=>n!==null&&typeof n=="object",Vt=n=>n===!0||n===!1,le=n=>{if(ie(n)!=="object")return!1;const e=Ee(n);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(He in n)&&!(se in n)},Jt=N("Date"),Kt=N("File"),Xt=N("Blob"),Qt=N("FileList"),Gt=n=>ce(n)&&A(n.pipe),Zt=n=>{let e;return n&&(typeof FormData=="function"&&n instanceof FormData||A(n.append)&&((e=ie(n))==="formdata"||e==="object"&&A(n.toString)&&n.toString()==="[object FormData]"))},er=N("URLSearchParams"),[tr,rr,nr,ar]=["ReadableStream","Request","Response","Headers"].map(N),sr=n=>n.trim?n.trim():n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function G(n,e,{allOwnKeys:t=!1}={}){if(n===null||typeof n>"u")return;let r,a;if(typeof n!="object"&&(n=[n]),q(n))for(r=0,a=n.length;r<a;r++)e.call(null,n[r],r,n);else{const s=t?Object.getOwnPropertyNames(n):Object.keys(n),i=s.length;let o;for(r=0;r<i;r++)o=s[r],e.call(null,n[o],o,n)}}function Ve(n,e){e=e.toLowerCase();const t=Object.keys(n);let r=t.length,a;for(;r-- >0;)if(a=t[r],e===a.toLowerCase())return a;return null}const j=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Je=n=>!Q(n)&&n!==j;function ke(){const{caseless:n}=Je(this)&&this||{},e={},t=(r,a)=>{const s=n&&Ve(e,a)||a;le(e[s])&&le(r)?e[s]=ke(e[s],r):le(r)?e[s]=ke({},r):q(r)?e[s]=r.slice():e[s]=r};for(let r=0,a=arguments.length;r<a;r++)arguments[r]&&G(arguments[r],t);return e}const ir=(n,e,t,{allOwnKeys:r}={})=>(G(e,(a,s)=>{t&&A(a)?n[s]=ze(a,t):n[s]=a},{allOwnKeys:r}),n),or=n=>(n.charCodeAt(0)===65279&&(n=n.slice(1)),n),cr=(n,e,t,r)=>{n.prototype=Object.create(e.prototype,r),n.prototype.constructor=n,Object.defineProperty(n,"super",{value:e.prototype}),t&&Object.assign(n.prototype,t)},lr=(n,e,t,r)=>{let a,s,i;const o={};if(e=e||{},n==null)return e;do{for(a=Object.getOwnPropertyNames(n),s=a.length;s-- >0;)i=a[s],(!r||r(i,n,e))&&!o[i]&&(e[i]=n[i],o[i]=!0);n=t!==!1&&Ee(n)}while(n&&(!t||t(n,e))&&n!==Object.prototype);return e},ur=(n,e,t)=>{n=String(n),(t===void 0||t>n.length)&&(t=n.length),t-=e.length;const r=n.indexOf(e,t);return r!==-1&&r===t},dr=n=>{if(!n)return null;if(q(n))return n;let e=n.length;if(!qe(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=n[e];return t},fr=(n=>e=>n&&e instanceof n)(typeof Uint8Array<"u"&&Ee(Uint8Array)),hr=(n,e)=>{const r=(n&&n[se]).call(n);let a;for(;(a=r.next())&&!a.done;){const s=a.value;e.call(n,s[0],s[1])}},mr=(n,e)=>{let t;const r=[];for(;(t=n.exec(e))!==null;)r.push(t);return r},pr=N("HTMLFormElement"),gr=n=>n.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,r,a){return r.toUpperCase()+a}),Ke=(({hasOwnProperty:n})=>(e,t)=>n.call(e,t))(Object.prototype),wr=N("RegExp"),Xe=(n,e)=>{const t=Object.getOwnPropertyDescriptors(n),r={};G(t,(a,s)=>{let i;(i=e(a,s,n))!==!1&&(r[s]=i||a)}),Object.defineProperties(n,r)},yr=n=>{Xe(n,(e,t)=>{if(A(n)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const r=n[t];if(A(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},vr=(n,e)=>{const t={},r=a=>{a.forEach(s=>{t[s]=!0})};return q(n)?r(n):r(String(n).split(e)),t},br=()=>{},Cr=(n,e)=>n!=null&&Number.isFinite(n=+n)?n:e;function Tr(n){return!!(n&&A(n.append)&&n[He]==="FormData"&&n[se])}const Sr=n=>{const e=new Array(10),t=(r,a)=>{if(ce(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[a]=r;const s=q(r)?[]:{};return G(r,(i,o)=>{const c=t(i,a+1);!Q(c)&&(s[o]=c)}),e[a]=void 0,s}}return r};return t(n,0)},Or=N("AsyncFunction"),Er=n=>n&&(ce(n)||A(n))&&A(n.then)&&A(n.catch),Qe=((n,e)=>n?setImmediate:e?((t,r)=>(j.addEventListener("message",({source:a,data:s})=>{a===j&&s===t&&r.length&&r.shift()()},!1),a=>{r.push(a),j.postMessage(t,"*")}))(`axios@${Math.random()}`,[]):t=>setTimeout(t))(typeof setImmediate=="function",A(j.postMessage)),kr=typeof queueMicrotask<"u"?queueMicrotask.bind(j):typeof process<"u"&&process.nextTick||Qe,u={isArray:q,isArrayBuffer:Ye,isBuffer:Ht,isFormData:Zt,isArrayBufferView:Yt,isString:qt,isNumber:qe,isBoolean:Vt,isObject:ce,isPlainObject:le,isReadableStream:tr,isRequest:rr,isResponse:nr,isHeaders:ar,isUndefined:Q,isDate:Jt,isFile:Kt,isBlob:Xt,isRegExp:wr,isFunction:A,isStream:Gt,isURLSearchParams:er,isTypedArray:fr,isFileList:Qt,forEach:G,merge:ke,extend:ir,trim:sr,stripBOM:or,inherits:cr,toFlatObject:lr,kindOf:ie,kindOfTest:N,endsWith:ur,toArray:dr,forEachEntry:hr,matchAll:mr,isHTMLForm:pr,hasOwnProperty:Ke,hasOwnProp:Ke,reduceDescriptors:Xe,freezeMethods:yr,toObjectSet:vr,toCamelCase:gr,noop:br,toFiniteNumber:Cr,findKey:Ve,global:j,isContextDefined:Je,isSpecCompliantForm:Tr,toJSONObject:Sr,isAsyncFn:Or,isThenable:Er,setImmediate:Qe,asap:kr,isIterable:n=>n!=null&&A(n[se])};function y(n,e,t,r,a){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=n,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),r&&(this.request=r),a&&(this.response=a,this.status=a.status?a.status:null)}u.inherits(y,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:u.toJSONObject(this.config),code:this.code,status:this.status}}});const Ge=y.prototype,Ze={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(n=>{Ze[n]={value:n}}),Object.defineProperties(y,Ze),Object.defineProperty(Ge,"isAxiosError",{value:!0}),y.from=(n,e,t,r,a,s)=>{const i=Object.create(Ge);return u.toFlatObject(n,i,function(c){return c!==Error.prototype},o=>o!=="isAxiosError"),y.call(i,n.message,e,t,r,a),i.cause=n,i.name=n.name,s&&Object.assign(i,s),i};const Dr=null;function De(n){return u.isPlainObject(n)||u.isArray(n)}function et(n){return u.endsWith(n,"[]")?n.slice(0,-2):n}function tt(n,e,t){return n?n.concat(e).map(function(a,s){return a=et(a),!t&&s?"["+a+"]":a}).join(t?".":""):e}function xr(n){return u.isArray(n)&&!n.some(De)}const Rr=u.toFlatObject(u,{},null,function(e){return/^is[A-Z]/.test(e)});function ue(n,e,t){if(!u.isObject(n))throw new TypeError("target must be an object");e=e||new FormData,t=u.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(g,p){return!u.isUndefined(p[g])});const r=t.metaTokens,a=t.visitor||d,s=t.dots,i=t.indexes,c=(t.Blob||typeof Blob<"u"&&Blob)&&u.isSpecCompliantForm(e);if(!u.isFunction(a))throw new TypeError("visitor must be a function");function l(h){if(h===null)return"";if(u.isDate(h))return h.toISOString();if(u.isBoolean(h))return h.toString();if(!c&&u.isBlob(h))throw new y("Blob is not supported. Use a Buffer instead.");return u.isArrayBuffer(h)||u.isTypedArray(h)?c&&typeof Blob=="function"?new Blob([h]):Buffer.from(h):h}function d(h,g,p){let S=h;if(h&&!p&&typeof h=="object"){if(u.endsWith(g,"{}"))g=r?g:g.slice(0,-2),h=JSON.stringify(h);else if(u.isArray(h)&&xr(h)||(u.isFileList(h)||u.endsWith(g,"[]"))&&(S=u.toArray(h)))return g=et(g),S.forEach(function(E,M){!(u.isUndefined(E)||E===null)&&e.append(i===!0?tt([g],M,s):i===null?g:g+"[]",l(E))}),!1}return De(h)?!0:(e.append(tt(p,g,s),l(h)),!1)}const f=[],m=Object.assign(Rr,{defaultVisitor:d,convertValue:l,isVisitable:De});function w(h,g){if(!u.isUndefined(h)){if(f.indexOf(h)!==-1)throw Error("Circular reference detected in "+g.join("."));f.push(h),u.forEach(h,function(S,b){(!(u.isUndefined(S)||S===null)&&a.call(e,S,u.isString(b)?b.trim():b,g,m))===!0&&w(S,g?g.concat(b):[b])}),f.pop()}}if(!u.isObject(n))throw new TypeError("data must be an object");return w(n),e}function rt(n){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(n).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function xe(n,e){this._pairs=[],n&&ue(n,this,e)}const nt=xe.prototype;nt.append=function(e,t){this._pairs.push([e,t])},nt.toString=function(e){const t=e?function(r){return e.call(this,r,rt)}:rt;return this._pairs.map(function(a){return t(a[0])+"="+t(a[1])},"").join("&")};function Ar(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function at(n,e,t){if(!e)return n;const r=t&&t.encode||Ar;u.isFunction(t)&&(t={serialize:t});const a=t&&t.serialize;let s;if(a?s=a(e,t):s=u.isURLSearchParams(e)?e.toString():new xe(e,t).toString(r),s){const i=n.indexOf("#");i!==-1&&(n=n.slice(0,i)),n+=(n.indexOf("?")===-1?"?":"&")+s}return n}class st{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){u.forEach(this.handlers,function(r){r!==null&&e(r)})}}const it={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Pr={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<"u"?URLSearchParams:xe,FormData:typeof FormData<"u"?FormData:null,Blob:typeof Blob<"u"?Blob:null},protocols:["http","https","file","blob","url","data"]},Re=typeof window<"u"&&typeof document<"u",Ae=typeof navigator=="object"&&navigator||void 0,Mr=Re&&(!Ae||["ReactNative","NativeScript","NS"].indexOf(Ae.product)<0),Lr=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Fr=Re&&window.location.href||"http://localhost",R={...Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Re,hasStandardBrowserEnv:Mr,hasStandardBrowserWebWorkerEnv:Lr,navigator:Ae,origin:Fr},Symbol.toStringTag,{value:"Module"})),...Pr};function Ur(n,e){return ue(n,new R.classes.URLSearchParams,Object.assign({visitor:function(t,r,a,s){return R.isNode&&u.isBuffer(t)?(this.append(r,t.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)}},e))}function Nr(n){return u.matchAll(/\w+|\[(\w*)]/g,n).map(e=>e[0]==="[]"?"":e[1]||e[0])}function _r(n){const e={},t=Object.keys(n);let r;const a=t.length;let s;for(r=0;r<a;r++)s=t[r],e[s]=n[s];return e}function ot(n){function e(t,r,a,s){let i=t[s++];if(i==="__proto__")return!0;const o=Number.isFinite(+i),c=s>=t.length;return i=!i&&u.isArray(a)?a.length:i,c?(u.hasOwnProp(a,i)?a[i]=[a[i],r]:a[i]=r,!o):((!a[i]||!u.isObject(a[i]))&&(a[i]=[]),e(t,r,a[i],s)&&u.isArray(a[i])&&(a[i]=_r(a[i])),!o)}if(u.isFormData(n)&&u.isFunction(n.entries)){const t={};return u.forEachEntry(n,(r,a)=>{e(Nr(r),a,t,0)}),t}return null}function $r(n,e,t){if(u.isString(n))try{return(e||JSON.parse)(n),u.trim(n)}catch(r){if(r.name!=="SyntaxError")throw r}return(t||JSON.stringify)(n)}const Z={transitional:it,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const r=t.getContentType()||"",a=r.indexOf("application/json")>-1,s=u.isObject(e);if(s&&u.isHTMLForm(e)&&(e=new FormData(e)),u.isFormData(e))return a?JSON.stringify(ot(e)):e;if(u.isArrayBuffer(e)||u.isBuffer(e)||u.isStream(e)||u.isFile(e)||u.isBlob(e)||u.isReadableStream(e))return e;if(u.isArrayBufferView(e))return e.buffer;if(u.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(s){if(r.indexOf("application/x-www-form-urlencoded")>-1)return Ur(e,this.formSerializer).toString();if((o=u.isFileList(e))||r.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return ue(o?{"files[]":e}:e,c&&new c,this.formSerializer)}}return s||a?(t.setContentType("application/json",!1),$r(e)):e}],transformResponse:[function(e){const t=this.transitional||Z.transitional,r=t&&t.forcedJSONParsing,a=this.responseType==="json";if(u.isResponse(e)||u.isReadableStream(e))return e;if(e&&u.isString(e)&&(r&&!this.responseType||a)){const i=!(t&&t.silentJSONParsing)&&a;try{return JSON.parse(e)}catch(o){if(i)throw o.name==="SyntaxError"?y.from(o,y.ERR_BAD_RESPONSE,this,null,this.response):o}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:R.classes.FormData,Blob:R.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};u.forEach(["delete","get","head","post","put","patch"],n=>{Z.headers[n]={}});const Br=u.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Ir=n=>{const e={};let t,r,a;return n&&n.split(`
`).forEach(function(i){a=i.indexOf(":"),t=i.substring(0,a).trim().toLowerCase(),r=i.substring(a+1).trim(),!(!t||e[t]&&Br[t])&&(t==="set-cookie"?e[t]?e[t].push(r):e[t]=[r]:e[t]=e[t]?e[t]+", "+r:r)}),e},ct=Symbol("internals");function ee(n){return n&&String(n).trim().toLowerCase()}function de(n){return n===!1||n==null?n:u.isArray(n)?n.map(de):String(n)}function Wr(n){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=t.exec(n);)e[r[1]]=r[2];return e}const jr=n=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(n.trim());function Pe(n,e,t,r,a){if(u.isFunction(r))return r.call(this,e,t);if(a&&(e=t),!!u.isString(e)){if(u.isString(r))return e.indexOf(r)!==-1;if(u.isRegExp(r))return r.test(e)}}function zr(n){return n.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}function Hr(n,e){const t=u.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(n,r+t,{value:function(a,s,i){return this[r].call(this,e,a,s,i)},configurable:!0})})}let P=class{constructor(e){e&&this.set(e)}set(e,t,r){const a=this;function s(o,c,l){const d=ee(c);if(!d)throw new Error("header name must be a non-empty string");const f=u.findKey(a,d);(!f||a[f]===void 0||l===!0||l===void 0&&a[f]!==!1)&&(a[f||c]=de(o))}const i=(o,c)=>u.forEach(o,(l,d)=>s(l,d,c));if(u.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(u.isString(e)&&(e=e.trim())&&!jr(e))i(Ir(e),t);else if(u.isObject(e)&&u.isIterable(e)){let o={},c,l;for(const d of e){if(!u.isArray(d))throw TypeError("Object iterator must return a key-value pair");o[l=d[0]]=(c=o[l])?u.isArray(c)?[...c,d[1]]:[c,d[1]]:d[1]}i(o,t)}else e!=null&&s(t,e,r);return this}get(e,t){if(e=ee(e),e){const r=u.findKey(this,e);if(r){const a=this[r];if(!t)return a;if(t===!0)return Wr(a);if(u.isFunction(t))return t.call(this,a,r);if(u.isRegExp(t))return t.exec(a);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=ee(e),e){const r=u.findKey(this,e);return!!(r&&this[r]!==void 0&&(!t||Pe(this,this[r],r,t)))}return!1}delete(e,t){const r=this;let a=!1;function s(i){if(i=ee(i),i){const o=u.findKey(r,i);o&&(!t||Pe(r,r[o],o,t))&&(delete r[o],a=!0)}}return u.isArray(e)?e.forEach(s):s(e),a}clear(e){const t=Object.keys(this);let r=t.length,a=!1;for(;r--;){const s=t[r];(!e||Pe(this,this[s],s,e,!0))&&(delete this[s],a=!0)}return a}normalize(e){const t=this,r={};return u.forEach(this,(a,s)=>{const i=u.findKey(r,s);if(i){t[i]=de(a),delete t[s];return}const o=e?zr(s):String(s).trim();o!==s&&delete t[s],t[o]=de(a),r[o]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return u.forEach(this,(r,a)=>{r!=null&&r!==!1&&(t[a]=e&&u.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(`
`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(a=>r.set(a)),r}static accessor(e){const r=(this[ct]=this[ct]={accessors:{}}).accessors,a=this.prototype;function s(i){const o=ee(i);r[o]||(Hr(a,i),r[o]=!0)}return u.isArray(e)?e.forEach(s):s(e),this}};P.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),u.reduceDescriptors(P.prototype,({value:n},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>n,set(r){this[t]=r}}}),u.freezeMethods(P);function Me(n,e){const t=this||Z,r=e||t,a=P.from(r.headers);let s=r.data;return u.forEach(n,function(o){s=o.call(t,s,a.normalize(),e?e.status:void 0)}),a.normalize(),s}function lt(n){return!!(n&&n.__CANCEL__)}function V(n,e,t){y.call(this,n??"canceled",y.ERR_CANCELED,e,t),this.name="CanceledError"}u.inherits(V,y,{__CANCEL__:!0});function ut(n,e,t){const r=t.config.validateStatus;!t.status||!r||r(t.status)?n(t):e(new y("Request failed with status code "+t.status,[y.ERR_BAD_REQUEST,y.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function Yr(n){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(n);return e&&e[1]||""}function qr(n,e){n=n||10;const t=new Array(n),r=new Array(n);let a=0,s=0,i;return e=e!==void 0?e:1e3,function(c){const l=Date.now(),d=r[s];i||(i=l),t[a]=c,r[a]=l;let f=s,m=0;for(;f!==a;)m+=t[f++],f=f%n;if(a=(a+1)%n,a===s&&(s=(s+1)%n),l-i<e)return;const w=d&&l-d;return w?Math.round(m*1e3/w):void 0}}function Vr(n,e){let t=0,r=1e3/e,a,s;const i=(l,d=Date.now())=>{t=d,a=null,s&&(clearTimeout(s),s=null),n.apply(null,l)};return[(...l)=>{const d=Date.now(),f=d-t;f>=r?i(l,d):(a=l,s||(s=setTimeout(()=>{s=null,i(a)},r-f)))},()=>a&&i(a)]}const fe=(n,e,t=3)=>{let r=0;const a=qr(50,250);return Vr(s=>{const i=s.loaded,o=s.lengthComputable?s.total:void 0,c=i-r,l=a(c),d=i<=o;r=i;const f={loaded:i,total:o,progress:o?i/o:void 0,bytes:c,rate:l||void 0,estimated:l&&o&&d?(o-i)/l:void 0,event:s,lengthComputable:o!=null,[e?"download":"upload"]:!0};n(f)},t)},dt=(n,e)=>{const t=n!=null;return[r=>e[0]({lengthComputable:t,total:n,loaded:r}),e[1]]},ft=n=>(...e)=>u.asap(()=>n(...e)),Jr=R.hasStandardBrowserEnv?((n,e)=>t=>(t=new URL(t,R.origin),n.protocol===t.protocol&&n.host===t.host&&(e||n.port===t.port)))(new URL(R.origin),R.navigator&&/(msie|trident)/i.test(R.navigator.userAgent)):()=>!0,Kr=R.hasStandardBrowserEnv?{write(n,e,t,r,a,s){const i=[n+"="+encodeURIComponent(e)];u.isNumber(t)&&i.push("expires="+new Date(t).toGMTString()),u.isString(r)&&i.push("path="+r),u.isString(a)&&i.push("domain="+a),s===!0&&i.push("secure"),document.cookie=i.join("; ")},read(n){const e=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(n){this.write(n,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Xr(n){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)}function Qr(n,e){return e?n.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):n}function ht(n,e,t){let r=!Xr(e);return n&&(r||t==!1)?Qr(n,e):e}const mt=n=>n instanceof P?{...n}:n;function z(n,e){e=e||{};const t={};function r(l,d,f,m){return u.isPlainObject(l)&&u.isPlainObject(d)?u.merge.call({caseless:m},l,d):u.isPlainObject(d)?u.merge({},d):u.isArray(d)?d.slice():d}function a(l,d,f,m){if(u.isUndefined(d)){if(!u.isUndefined(l))return r(void 0,l,f,m)}else return r(l,d,f,m)}function s(l,d){if(!u.isUndefined(d))return r(void 0,d)}function i(l,d){if(u.isUndefined(d)){if(!u.isUndefined(l))return r(void 0,l)}else return r(void 0,d)}function o(l,d,f){if(f in e)return r(l,d);if(f in n)return r(void 0,l)}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:o,headers:(l,d,f)=>a(mt(l),mt(d),f,!0)};return u.forEach(Object.keys(Object.assign({},n,e)),function(d){const f=c[d]||a,m=f(n[d],e[d],d);u.isUndefined(m)&&f!==o||(t[d]=m)}),t}const pt=n=>{const e=z({},n);let{data:t,withXSRFToken:r,xsrfHeaderName:a,xsrfCookieName:s,headers:i,auth:o}=e;e.headers=i=P.from(i),e.url=at(ht(e.baseURL,e.url,e.allowAbsoluteUrls),n.params,n.paramsSerializer),o&&i.set("Authorization","Basic "+btoa((o.username||"")+":"+(o.password?unescape(encodeURIComponent(o.password)):"")));let c;if(u.isFormData(t)){if(R.hasStandardBrowserEnv||R.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if((c=i.getContentType())!==!1){const[l,...d]=c?c.split(";").map(f=>f.trim()).filter(Boolean):[];i.setContentType([l||"multipart/form-data",...d].join("; "))}}if(R.hasStandardBrowserEnv&&(r&&u.isFunction(r)&&(r=r(e)),r||r!==!1&&Jr(e.url))){const l=a&&s&&Kr.read(s);l&&i.set(a,l)}return e},Gr=typeof XMLHttpRequest<"u"&&function(n){return new Promise(function(t,r){const a=pt(n);let s=a.data;const i=P.from(a.headers).normalize();let{responseType:o,onUploadProgress:c,onDownloadProgress:l}=a,d,f,m,w,h;function g(){w&&w(),h&&h(),a.cancelToken&&a.cancelToken.unsubscribe(d),a.signal&&a.signal.removeEventListener("abort",d)}let p=new XMLHttpRequest;p.open(a.method.toUpperCase(),a.url,!0),p.timeout=a.timeout;function S(){if(!p)return;const E=P.from("getAllResponseHeaders"in p&&p.getAllResponseHeaders()),D={data:!o||o==="text"||o==="json"?p.responseText:p.response,status:p.status,statusText:p.statusText,headers:E,config:n,request:p};ut(function(B){t(B),g()},function(B){r(B),g()},D),p=null}"onloadend"in p?p.onloadend=S:p.onreadystatechange=function(){!p||p.readyState!==4||p.status===0&&!(p.responseURL&&p.responseURL.indexOf("file:")===0)||setTimeout(S)},p.onabort=function(){p&&(r(new y("Request aborted",y.ECONNABORTED,n,p)),p=null)},p.onerror=function(){r(new y("Network Error",y.ERR_NETWORK,n,p)),p=null},p.ontimeout=function(){let M=a.timeout?"timeout of "+a.timeout+"ms exceeded":"timeout exceeded";const D=a.transitional||it;a.timeoutErrorMessage&&(M=a.timeoutErrorMessage),r(new y(M,D.clarifyTimeoutError?y.ETIMEDOUT:y.ECONNABORTED,n,p)),p=null},s===void 0&&i.setContentType(null),"setRequestHeader"in p&&u.forEach(i.toJSON(),function(M,D){p.setRequestHeader(D,M)}),u.isUndefined(a.withCredentials)||(p.withCredentials=!!a.withCredentials),o&&o!=="json"&&(p.responseType=a.responseType),l&&([m,h]=fe(l,!0),p.addEventListener("progress",m)),c&&p.upload&&([f,w]=fe(c),p.upload.addEventListener("progress",f),p.upload.addEventListener("loadend",w)),(a.cancelToken||a.signal)&&(d=E=>{p&&(r(!E||E.type?new V(null,n,p):E),p.abort(),p=null)},a.cancelToken&&a.cancelToken.subscribe(d),a.signal&&(a.signal.aborted?d():a.signal.addEventListener("abort",d)));const b=Yr(a.url);if(b&&R.protocols.indexOf(b)===-1){r(new y("Unsupported protocol "+b+":",y.ERR_BAD_REQUEST,n));return}p.send(s||null)})},Zr=(n,e)=>{const{length:t}=n=n?n.filter(Boolean):[];if(e||t){let r=new AbortController,a;const s=function(l){if(!a){a=!0,o();const d=l instanceof Error?l:this.reason;r.abort(d instanceof y?d:new V(d instanceof Error?d.message:d))}};let i=e&&setTimeout(()=>{i=null,s(new y(`timeout ${e} of ms exceeded`,y.ETIMEDOUT))},e);const o=()=>{n&&(i&&clearTimeout(i),i=null,n.forEach(l=>{l.unsubscribe?l.unsubscribe(s):l.removeEventListener("abort",s)}),n=null)};n.forEach(l=>l.addEventListener("abort",s));const{signal:c}=r;return c.unsubscribe=()=>u.asap(o),c}},en=function*(n,e){let t=n.byteLength;if(t<e){yield n;return}let r=0,a;for(;r<t;)a=r+e,yield n.slice(r,a),r=a},tn=async function*(n,e){for await(const t of rn(n))yield*en(t,e)},rn=async function*(n){if(n[Symbol.asyncIterator]){yield*n;return}const e=n.getReader();try{for(;;){const{done:t,value:r}=await e.read();if(t)break;yield r}}finally{await e.cancel()}},gt=(n,e,t,r)=>{const a=tn(n,e);let s=0,i,o=c=>{i||(i=!0,r&&r(c))};return new ReadableStream({async pull(c){try{const{done:l,value:d}=await a.next();if(l){o(),c.close();return}let f=d.byteLength;if(t){let m=s+=f;t(m)}c.enqueue(new Uint8Array(d))}catch(l){throw o(l),l}},cancel(c){return o(c),a.return()}},{highWaterMark:2})},he=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",wt=he&&typeof ReadableStream=="function",nn=he&&(typeof TextEncoder=="function"?(n=>e=>n.encode(e))(new TextEncoder):async n=>new Uint8Array(await new Response(n).arrayBuffer())),yt=(n,...e)=>{try{return!!n(...e)}catch{return!1}},an=wt&&yt(()=>{let n=!1;const e=new Request(R.origin,{body:new ReadableStream,method:"POST",get duplex(){return n=!0,"half"}}).headers.has("Content-Type");return n&&!e}),vt=64*1024,Le=wt&&yt(()=>u.isReadableStream(new Response("").body)),me={stream:Le&&(n=>n.body)};he&&(n=>{["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!me[e]&&(me[e]=u.isFunction(n[e])?t=>t[e]():(t,r)=>{throw new y(`Response type '${e}' is not supported`,y.ERR_NOT_SUPPORT,r)})})})(new Response);const sn=async n=>{if(n==null)return 0;if(u.isBlob(n))return n.size;if(u.isSpecCompliantForm(n))return(await new Request(R.origin,{method:"POST",body:n}).arrayBuffer()).byteLength;if(u.isArrayBufferView(n)||u.isArrayBuffer(n))return n.byteLength;if(u.isURLSearchParams(n)&&(n=n+""),u.isString(n))return(await nn(n)).byteLength},on=async(n,e)=>{const t=u.toFiniteNumber(n.getContentLength());return t??sn(e)},Fe={http:Dr,xhr:Gr,fetch:he&&(async n=>{let{url:e,method:t,data:r,signal:a,cancelToken:s,timeout:i,onDownloadProgress:o,onUploadProgress:c,responseType:l,headers:d,withCredentials:f="same-origin",fetchOptions:m}=pt(n);l=l?(l+"").toLowerCase():"text";let w=Zr([a,s&&s.toAbortSignal()],i),h;const g=w&&w.unsubscribe&&(()=>{w.unsubscribe()});let p;try{if(c&&an&&t!=="get"&&t!=="head"&&(p=await on(d,r))!==0){let D=new Request(e,{method:"POST",body:r,duplex:"half"}),L;if(u.isFormData(r)&&(L=D.headers.get("content-type"))&&d.setContentType(L),D.body){const[B,X]=dt(p,fe(ft(c)));r=gt(D.body,vt,B,X)}}u.isString(f)||(f=f?"include":"omit");const S="credentials"in Request.prototype;h=new Request(e,{...m,signal:w,method:t.toUpperCase(),headers:d.normalize().toJSON(),body:r,duplex:"half",credentials:S?f:void 0});let b=await fetch(h,m);const E=Le&&(l==="stream"||l==="response");if(Le&&(o||E&&g)){const D={};["status","statusText","headers"].forEach(Te=>{D[Te]=b[Te]});const L=u.toFiniteNumber(b.headers.get("content-length")),[B,X]=o&&dt(L,fe(ft(o),!0))||[];b=new Response(gt(b.body,vt,B,()=>{X&&X(),g&&g()}),D)}l=l||"text";let M=await me[u.findKey(me,l)||"text"](b,n);return!E&&g&&g(),await new Promise((D,L)=>{ut(D,L,{data:M,headers:P.from(b.headers),status:b.status,statusText:b.statusText,config:n,request:h})})}catch(S){throw g&&g(),S&&S.name==="TypeError"&&/Load failed|fetch/i.test(S.message)?Object.assign(new y("Network Error",y.ERR_NETWORK,n,h),{cause:S.cause||S}):y.from(S,S&&S.code,n,h)}})};u.forEach(Fe,(n,e)=>{if(n){try{Object.defineProperty(n,"name",{value:e})}catch{}Object.defineProperty(n,"adapterName",{value:e})}});const bt=n=>`- ${n}`,cn=n=>u.isFunction(n)||n===null||n===!1,Ct={getAdapter:n=>{n=u.isArray(n)?n:[n];const{length:e}=n;let t,r;const a={};for(let s=0;s<e;s++){t=n[s];let i;if(r=t,!cn(t)&&(r=Fe[(i=String(t)).toLowerCase()],r===void 0))throw new y(`Unknown adapter '${i}'`);if(r)break;a[i||"#"+s]=r}if(!r){const s=Object.entries(a).map(([o,c])=>`adapter ${o} `+(c===!1?"is not supported by the environment":"is not available in the build"));let i=e?s.length>1?`since :
`+s.map(bt).join(`
`):" "+bt(s[0]):"as no adapter specified";throw new y("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return r},adapters:Fe};function Ue(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new V(null,n)}function Tt(n){return Ue(n),n.headers=P.from(n.headers),n.data=Me.call(n,n.transformRequest),["post","put","patch"].indexOf(n.method)!==-1&&n.headers.setContentType("application/x-www-form-urlencoded",!1),Ct.getAdapter(n.adapter||Z.adapter)(n).then(function(r){return Ue(n),r.data=Me.call(n,n.transformResponse,r),r.headers=P.from(r.headers),r},function(r){return lt(r)||(Ue(n),r&&r.response&&(r.response.data=Me.call(n,n.transformResponse,r.response),r.response.headers=P.from(r.response.headers))),Promise.reject(r)})}const St="1.10.0",pe={};["object","boolean","number","function","string","symbol"].forEach((n,e)=>{pe[n]=function(r){return typeof r===n||"a"+(e<1?"n ":" ")+n}});const Ot={};pe.transitional=function(e,t,r){function a(s,i){return"[Axios v"+St+"] Transitional option '"+s+"'"+i+(r?". "+r:"")}return(s,i,o)=>{if(e===!1)throw new y(a(i," has been removed"+(t?" in "+t:"")),y.ERR_DEPRECATED);return t&&!Ot[i]&&(Ot[i]=!0,console.warn(a(i," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(s,i,o):!0}},pe.spelling=function(e){return(t,r)=>(console.warn(`${r} is likely a misspelling of ${e}`),!0)};function ln(n,e,t){if(typeof n!="object")throw new y("options must be an object",y.ERR_BAD_OPTION_VALUE);const r=Object.keys(n);let a=r.length;for(;a-- >0;){const s=r[a],i=e[s];if(i){const o=n[s],c=o===void 0||i(o,s,n);if(c!==!0)throw new y("option "+s+" must be "+c,y.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new y("Unknown option "+s,y.ERR_BAD_OPTION)}}const ge={assertOptions:ln,validators:pe},_=ge.validators;let H=class{constructor(e){this.defaults=e||{},this.interceptors={request:new st,response:new st}}async request(e,t){try{return await this._request(e,t)}catch(r){if(r instanceof Error){let a={};Error.captureStackTrace?Error.captureStackTrace(a):a=new Error;const s=a.stack?a.stack.replace(/^.+\n/,""):"";try{r.stack?s&&!String(r.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(r.stack+=`
`+s):r.stack=s}catch{}}throw r}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=z(this.defaults,t);const{transitional:r,paramsSerializer:a,headers:s}=t;r!==void 0&&ge.assertOptions(r,{silentJSONParsing:_.transitional(_.boolean),forcedJSONParsing:_.transitional(_.boolean),clarifyTimeoutError:_.transitional(_.boolean)},!1),a!=null&&(u.isFunction(a)?t.paramsSerializer={serialize:a}:ge.assertOptions(a,{encode:_.function,serialize:_.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),ge.assertOptions(t,{baseUrl:_.spelling("baseURL"),withXsrfToken:_.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=s&&u.merge(s.common,s[t.method]);s&&u.forEach(["delete","get","head","post","put","patch","common"],h=>{delete s[h]}),t.headers=P.concat(i,s);const o=[];let c=!0;this.interceptors.request.forEach(function(g){typeof g.runWhen=="function"&&g.runWhen(t)===!1||(c=c&&g.synchronous,o.unshift(g.fulfilled,g.rejected))});const l=[];this.interceptors.response.forEach(function(g){l.push(g.fulfilled,g.rejected)});let d,f=0,m;if(!c){const h=[Tt.bind(this),void 0];for(h.unshift.apply(h,o),h.push.apply(h,l),m=h.length,d=Promise.resolve(t);f<m;)d=d.then(h[f++],h[f++]);return d}m=o.length;let w=t;for(f=0;f<m;){const h=o[f++],g=o[f++];try{w=h(w)}catch(p){g.call(this,p);break}}try{d=Tt.call(this,w)}catch(h){return Promise.reject(h)}for(f=0,m=l.length;f<m;)d=d.then(l[f++],l[f++]);return d}getUri(e){e=z(this.defaults,e);const t=ht(e.baseURL,e.url,e.allowAbsoluteUrls);return at(t,e.params,e.paramsSerializer)}};u.forEach(["delete","get","head","options"],function(e){H.prototype[e]=function(t,r){return this.request(z(r||{},{method:e,url:t,data:(r||{}).data}))}}),u.forEach(["post","put","patch"],function(e){function t(r){return function(s,i,o){return this.request(z(o||{},{method:e,headers:r?{"Content-Type":"multipart/form-data"}:{},url:s,data:i}))}}H.prototype[e]=t(),H.prototype[e+"Form"]=t(!0)});let un=class Wt{constructor(e){if(typeof e!="function")throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(s){t=s});const r=this;this.promise.then(a=>{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](a);r._listeners=null}),this.promise.then=a=>{let s;const i=new Promise(o=>{r.subscribe(o),s=o}).then(a);return i.cancel=function(){r.unsubscribe(s)},i},e(function(s,i,o){r.reason||(r.reason=new V(s,i,o),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=r=>{e.abort(r)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new Wt(function(a){e=a}),cancel:e}}};function dn(n){return function(t){return n.apply(null,t)}}function fn(n){return u.isObject(n)&&n.isAxiosError===!0}const Ne={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Ne).forEach(([n,e])=>{Ne[e]=n});function Et(n){const e=new H(n),t=ze(H.prototype.request,e);return u.extend(t,H.prototype,e,{allOwnKeys:!0}),u.extend(t,e,null,{allOwnKeys:!0}),t.create=function(a){return Et(z(n,a))},t}const O=Et(Z);O.Axios=H,O.CanceledError=V,O.CancelToken=un,O.isCancel=lt,O.VERSION=St,O.toFormData=ue,O.AxiosError=y,O.Cancel=O.CanceledError,O.all=function(e){return Promise.all(e)},O.spread=dn,O.isAxiosError=fn,O.mergeConfig=z,O.AxiosHeaders=P,O.formToJSON=n=>ot(u.isHTMLForm(n)?new FormData(n):n),O.getAdapter=Ct.getAdapter,O.HttpStatusCode=Ne,O.default=O;const{Axios:ts,AxiosError:rs,CanceledError:ns,isCancel:as,CancelToken:ss,VERSION:is,all:os,Cancel:cs,isAxiosError:ls,spread:us,toFormData:ds,AxiosHeaders:fs,HttpStatusCode:hs,formToJSON:ms,getAdapter:ps,mergeConfig:gs}=O;class kt{constructor(e){this.apiKey=e,this.name="Last.FM",this.source=v.LASTFM,this.baseUrl="https://ws.audioscrobbler.com/2.0/",this.chartMap=new Map([["top-tracks",{method:"chart.gettoptracks"}],["top-albums",{method:"chart.gettopalbums"}],["top-artists",{method:"chart.gettopartists"}],["top-tracks-weekly",{method:"chart.gettoptracks",period:"7day"}],["top-tracks-monthly",{method:"chart.gettoptracks",period:"1month"}],["top-tracks-yearly",{method:"chart.gettoptracks",period:"12month"}],["top-albums-weekly",{method:"chart.gettopalbums",period:"7day"}],["top-albums-monthly",{method:"chart.gettopalbums",period:"1month"}],["top-albums-yearly",{method:"chart.gettopalbums",period:"12month"}],["top-artists-weekly",{method:"chart.gettopartists",period:"7day"}],["top-artists-monthly",{method:"chart.gettopartists",period:"1month"}],["top-artists-yearly",{method:"chart.gettopartists",period:"12month"}]]),this.apiKey||console.warn("LastFM API key not provided - Last.FM features will be unavailable")}async getAvailableCharts(){return Array.from(this.chartMap.keys())}async getChart(e,t={}){var a,s,i;if(!this.apiKey)throw new x("Last.FM API key is required",401,v.LASTFM);const r=this.chartMap.get(e);if(!r)throw new x(`Unknown chart type: ${e}`,400,v.LASTFM);try{const o={method:r.method,api_key:this.apiKey,format:"json",limit:(t.limit||50).toString(),page:"1"},c=await O.get(this.baseUrl,{params:o});return this.transformToChartData(c.data,e,t.date||new Date)}catch(o){if(O.isAxiosError(o)){const c=((a=o.response)==null?void 0:a.status)||500,l=((i=(s=o.response)==null?void 0:s.data)==null?void 0:i.message)||o.message;throw new x(`Last.FM API error: ${l}`,c,v.LASTFM)}throw new x(`Failed to fetch Last.FM chart: ${o}`,500,v.LASTFM)}}async getHistoricalData(e,t){const r=await this.getChart(e,{date:t.end});return{chartType:e,dateRange:t,data:[r],source:v.LASTFM}}async searchTracks(e,t=50){var r,a,s,i,o;if(!this.apiKey)throw new x("Last.FM API key is required",401,v.LASTFM);try{const c={method:"track.search",api_key:this.apiKey,format:"json",track:e,limit:t.toString()};return(((a=(r=(await O.get(this.baseUrl,{params:c})).data.results)==null?void 0:r.trackmatches)==null?void 0:a.track)||[]).map((f,m)=>({rank:m+1,title:f.name,artist:f.artist,chartDate:new Date,source:v.LASTFM,metadata:{listeners:f.listeners,url:f.url,mbid:f.mbid}}))}catch(c){if(O.isAxiosError(c)){const l=((s=c.response)==null?void 0:s.status)||500,d=((o=(i=c.response)==null?void 0:i.data)==null?void 0:o.message)||c.message;throw new x(`Last.FM search error: ${d}`,l,v.LASTFM)}throw new x(`Failed to search Last.FM: ${c}`,500,v.LASTFM)}}async getTrackInfo(e,t){var r,a,s;if(!this.apiKey)throw new x("Last.FM API key is required",401,v.LASTFM);try{const i={method:"track.getInfo",api_key:this.apiKey,format:"json",artist:e,track:t};return(await O.get(this.baseUrl,{params:i})).data.track}catch(i){if(O.isAxiosError(i)){const o=((r=i.response)==null?void 0:r.status)||500,c=((s=(a=i.response)==null?void 0:a.data)==null?void 0:s.message)||i.message;throw new x(`Last.FM track info error: ${c}`,o,v.LASTFM)}throw new x(`Failed to get track info from Last.FM: ${i}`,500,v.LASTFM)}}transformToChartData(e,t,r){var o,c,l;const a=Object.keys(e)[0],s=e[a];let i=[];return s.track?i=this.transformTracks(s.track,r):s.album?i=this.transformAlbums(s.album,r):s.artist&&(i=this.transformArtists(s.artist,r)),{chartType:t,date:r,entries:i,source:v.LASTFM,totalEntries:i.length,metadata:{period:((o=this.chartMap.get(t))==null?void 0:o.period)||"overall",total:(c=s["@attr"])==null?void 0:c.total,page:(l=s["@attr"])==null?void 0:l.page}}}transformTracks(e,t){return e.map((r,a)=>{var s;return{rank:parseInt(((s=r["@attr"])==null?void 0:s.rank)||r.rank||(a+1).toString()),title:r.name,artist:r.artist.name,chartDate:t,source:v.LASTFM,metadata:{playcount:parseInt(r.playcount||"0"),listeners:parseInt(r.listeners||"0"),mbid:r.artist.mbid}}})}transformAlbums(e,t){return e.map((r,a)=>{var s;return{rank:parseInt(((s=r["@attr"])==null?void 0:s.rank)||r.rank||(a+1).toString()),title:r.name,artist:r.artist.name,album:r.name,chartDate:t,source:v.LASTFM,metadata:{playcount:parseInt(r.playcount||"0"),mbid:r.artist.mbid}}})}transformArtists(e,t){return e.map((r,a)=>{var s;return{rank:parseInt(((s=r["@attr"])==null?void 0:s.rank)||r.rank||(a+1).toString()),title:r.name,artist:r.name,chartDate:t,source:v.LASTFM,metadata:{playcount:parseInt(r.playcount||"0"),listeners:parseInt(r.listeners||"0")}}})}}class Dt{constructor(e){this.memoryCache=new Map,this.options={ttl:1e3*60*60,maxSize:100,persistent:!0,...e},this.options.persistent&&this.loadFromStorage()}async set(e,t){try{const r={data:t,timestamp:Date.now(),ttl:this.options.ttl};this.memoryCache.size>=this.options.maxSize&&this.evictOldest(),this.memoryCache.set(e,r),this.options.persistent&&await this.saveToStorage(e,r)}catch(r){throw new ae(`Failed to set cache item: ${r}`)}}async get(e){try{let t=this.memoryCache.get(e);if(!t&&this.options.persistent){const r=await this.loadFromStorage(e);r&&(this.memoryCache.set(e,r),t=r)}return t?this.isExpired(t)?(await this.delete(e),null):t.data:null}catch(t){return console.warn(`Failed to get cache item: ${t}`),null}}async delete(e){this.memoryCache.delete(e),this.options.persistent&&typeof localStorage<"u"&&localStorage.removeItem(`brickcharts-${e}`)}async clearByPattern(e){const t=[];for(const r of this.memoryCache.keys())r.includes(e)&&t.push(r);for(const r of t)await this.delete(r)}async clear(){if(this.memoryCache.clear(),this.options.persistent&&typeof localStorage<"u"){const e=Object.keys(localStorage).filter(t=>t.startsWith("brickcharts-"));for(const t of e)localStorage.removeItem(t)}}async getStats(){let e=0,t=0;for(const r of this.memoryCache.values())this.isExpired(r)?e++:t++;return{totalItems:this.memoryCache.size,validItems:t,expiredItems:e,maxSize:this.options.maxSize,persistent:this.options.persistent,ttl:this.options.ttl}}isExpired(e){return Date.now()-e.timestamp>e.ttl}evictOldest(){let e=null,t=Date.now();for(const[r,a]of this.memoryCache)a.timestamp<t&&(t=a.timestamp,e=r);e&&this.memoryCache.delete(e)}async saveToStorage(e,t){if(!(typeof localStorage>"u"))try{localStorage.setItem(`brickcharts-${e}`,JSON.stringify({...t,data:{...t.data,date:t.data.date.toISOString()}}))}catch(r){console.warn(`Failed to save to localStorage: ${r}`)}}async loadFromStorage(e){if(typeof localStorage>"u")return null;try{if(e){const t=localStorage.getItem(`brickcharts-${e}`);if(t){const r=JSON.parse(t);return{...r,data:{...r.data,date:new Date(r.data.date)}}}return null}else{const t=Object.keys(localStorage).filter(r=>r.startsWith("brickcharts-"));for(const r of t){const a=r.replace("brickcharts-",""),s=await this.loadFromStorage(a);s&&!this.isExpired(s)&&this.memoryCache.set(a,s)}}}catch(t){console.warn(`Failed to load from localStorage: ${t}`)}return null}}class xt{constructor(e){this.cache=new Dt(e)}async cacheChart(e){try{await this.cache.set(this.generateCacheKey(e),e)}catch(t){throw new ae(`Failed to cache chart data: ${t}`)}}async getCachedChart(e,t,r){try{const a=this.generateCacheKey({chartType:e,source:t,date:r||new Date});return await this.cache.get(a)}catch(a){return console.warn(`Failed to get cached chart: ${a}`),null}}async clearCache(e,t){try{if(e&&t){const r=`${t}-${e}-`;await this.cache.clearByPattern(r)}else await this.cache.clear()}catch(r){throw new ae(`Failed to clear cache: ${r}`)}}async getCacheStats(){return await this.cache.getStats()}generateCacheKey(e){const t=e.date.toISOString().split("T")[0];return`${e.source}-${e.chartType}-${t}`}}function we(n){"@babel/helpers - typeof";return we=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},we(n)}function $(n){if(n===null||n===!0||n===!1)return NaN;var e=Number(n);return isNaN(e)?e:e<0?Math.ceil(e):Math.floor(e)}function k(n,e){if(e.length<n)throw new TypeError(n+" argument"+(n>1?"s":"")+" required, but only "+e.length+" present")}function U(n){k(1,arguments);var e=Object.prototype.toString.call(n);return n instanceof Date||we(n)==="object"&&e==="[object Date]"?new Date(n.getTime()):typeof n=="number"||e==="[object Number]"?new Date(n):((typeof n=="string"||e==="[object String]")&&typeof console<"u"&&(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"),console.warn(new Error().stack)),new Date(NaN))}function hn(n,e){k(2,arguments);var t=U(n).getTime(),r=$(e);return new Date(t+r)}var mn={};function J(){return mn}function pn(n,e){var t,r,a,s,i,o,c,l;k(1,arguments);var d=J(),f=$((t=(r=(a=(s=e==null?void 0:e.weekStartsOn)!==null&&s!==void 0?s:e==null||(i=e.locale)===null||i===void 0||(o=i.options)===null||o===void 0?void 0:o.weekStartsOn)!==null&&a!==void 0?a:d.weekStartsOn)!==null&&r!==void 0?r:(c=d.locale)===null||c===void 0||(l=c.options)===null||l===void 0?void 0:l.weekStartsOn)!==null&&t!==void 0?t:0);if(!(f>=0&&f<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var m=U(n),w=m.getDay(),h=(w<f?7:0)+w-f;return m.setDate(m.getDate()-h),m.setHours(0,0,0,0),m}function gn(n){var e=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()));return e.setUTCFullYear(n.getFullYear()),n.getTime()-e.getTime()}var Rt=6e4,At=36e5;function wn(n){return k(1,arguments),n instanceof Date||we(n)==="object"&&Object.prototype.toString.call(n)==="[object Date]"}function _e(n){if(k(1,arguments),!wn(n)&&typeof n!="number")return!1;var e=U(n);return!isNaN(Number(e))}function yn(n,e){var t,r,a,s,i,o,c,l;k(1,arguments);var d=J(),f=$((t=(r=(a=(s=e==null?void 0:e.weekStartsOn)!==null&&s!==void 0?s:e==null||(i=e.locale)===null||i===void 0||(o=i.options)===null||o===void 0?void 0:o.weekStartsOn)!==null&&a!==void 0?a:d.weekStartsOn)!==null&&r!==void 0?r:(c=d.locale)===null||c===void 0||(l=c.options)===null||l===void 0?void 0:l.weekStartsOn)!==null&&t!==void 0?t:0);if(!(f>=0&&f<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var m=U(n),w=m.getDay(),h=(w<f?-7:0)+6-(w-f);return m.setDate(m.getDate()+h),m.setHours(23,59,59,999),m}function vn(n,e){k(2,arguments);var t=$(e);return hn(n,-t)}var bn=864e5;function Cn(n){k(1,arguments);var e=U(n),t=e.getTime();e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0);var r=e.getTime(),a=t-r;return Math.floor(a/bn)+1}function ye(n){k(1,arguments);var e=1,t=U(n),r=t.getUTCDay(),a=(r<e?7:0)+r-e;return t.setUTCDate(t.getUTCDate()-a),t.setUTCHours(0,0,0,0),t}function Pt(n){k(1,arguments);var e=U(n),t=e.getUTCFullYear(),r=new Date(0);r.setUTCFullYear(t+1,0,4),r.setUTCHours(0,0,0,0);var a=ye(r),s=new Date(0);s.setUTCFullYear(t,0,4),s.setUTCHours(0,0,0,0);var i=ye(s);return e.getTime()>=a.getTime()?t+1:e.getTime()>=i.getTime()?t:t-1}function Tn(n){k(1,arguments);var e=Pt(n),t=new Date(0);t.setUTCFullYear(e,0,4),t.setUTCHours(0,0,0,0);var r=ye(t);return r}var Sn=6048e5;function On(n){k(1,arguments);var e=U(n),t=ye(e).getTime()-Tn(e).getTime();return Math.round(t/Sn)+1}function ve(n,e){var t,r,a,s,i,o,c,l;k(1,arguments);var d=J(),f=$((t=(r=(a=(s=e==null?void 0:e.weekStartsOn)!==null&&s!==void 0?s:e==null||(i=e.locale)===null||i===void 0||(o=i.options)===null||o===void 0?void 0:o.weekStartsOn)!==null&&a!==void 0?a:d.weekStartsOn)!==null&&r!==void 0?r:(c=d.locale)===null||c===void 0||(l=c.options)===null||l===void 0?void 0:l.weekStartsOn)!==null&&t!==void 0