@kibalabs/core 0.7.2-next.1 → 0.7.2-next.5
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/dist/index.js +3 -2
- package/dist/index.js.map +1 -0
- package/dist/util/objectUtil.d.ts.map +1 -1
- package/package.json +5 -4
package/dist/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import{addMinutes as
|
|
2
|
-
`);
|
|
1
|
+
import{addMinutes as e}from"date-fns/addMinutes";import{isValid as t}from"date-fns/isValid";import{parse as n}from"date-fns/parse";import{parseISO as r}from"date-fns/parseISO";import{format as i}from"date-fns-tz";import a from"node:fs";import o from"node:path";import s from"deepmerge";import c from"fast-deep-equal";var l=class extends Error{statusCode;exceptionType;fields;constructor(e,t,n,r){super(e),this.name=this.constructor.name,this.statusCode=t||500,this.exceptionType=n||`KibaException`,this.fields=r||{}}};let u=/* @__PURE__ */ function(e){return e.DELETE=`delete`,e.GET=`get`,e.HEAD=`head`,e.OPTIONS=`options`,e.PATCH=`patch`,e.POST=`post`,e.PUT=`put`,e}({});var d=class{method;url;headers;data;formData;date;timeoutSeconds;constructor(e,t,n,r,i,a,o){this.method=e,this.url=t,this.headers=n||{},this.data=r||null,this.formData=i||null,this.date=a||/* @__PURE__ */ new Date,this.timeoutSeconds=o&&o>0?o:null}},f=class{status;headers={};date;content=``;constructor(e,t,n,r){this.status=e,this.headers=t,this.date=n,this.content=r}};const p=(e,t)=>new Promise((n,r)=>{let i=setTimeout(()=>{r(new l(`TIMEOUT`))},e*1e3);t.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})}),ee=e=>{let t=e;for(t.startsWith(`http://`)&&(t=t.slice(7)),t.startsWith(`https://`)&&(t=t.slice(8));t.endsWith(`/`);)t=t.slice(0,t.length-1);return t},m=e=>{let t=e;return!t.startsWith(`http://`)&&!t.startsWith(`https://`)&&(t=`http://${t}`),t},te=e=>e.startsWith(`ipfs://`)?e.replace(`ipfs://`,`https://pablo-images.kibalabs.com/v1/ipfs/`):e,h=e=>{let t=new URLSearchParams;return Object.entries(e).forEach(([e,n])=>{Array.isArray(n)?n.forEach(n=>{t.append(e,n)}):t.append(e,n)}),t},g=(e,t)=>{let n=new URL(e);return Object.keys(t).forEach(e=>{n.searchParams.set(e,String(t[e]))}),n.toString()};var ne=class{modifyRequest(e){return e}modifyResponse(e){return e}},_=class e{headers;modifiers;shouldIncludeCrossSiteCredentials;constructor(e,t,n=!0){this.headers=e||{},this.modifiers=t||[],this.shouldIncludeCrossSiteCredentials=n}addModifier=e=>{this.modifiers.push(e)};modifyRequest=e=>this.modifiers.reduce((e,t)=>t.modifyRequest(e),e);modifyResponse=e=>this.modifiers.reduce((e,t)=>t.modifyResponse(e),e);getRequest=async(e,t,n,r)=>{let i=new d(`get`,e,n,t,void 0,/* @__PURE__ */ new Date,r);return this.makeRequestInternal(i)};postRequest=async(e,t,n,r)=>{let i=new d(`post`,e,n,t,void 0,/* @__PURE__ */ new Date,r);return this.makeRequestInternal(i)};putRequest=async(e,t,n,r)=>{let i=new d(`put`,e,n,t,void 0,/* @__PURE__ */ new Date,r);return this.makeRequestInternal(i)};deleteRequest=async(e,t,n,r)=>{let i=new d(`delete`,e,n,t,void 0,/* @__PURE__ */ new Date,r);return this.makeRequestInternal(i)};makeRequest=async(e,t,n,r,i)=>{let a=new d(e,t,r,n,void 0,/* @__PURE__ */ new Date,i);return this.makeRequestInternal(a)};makeFormRequest=async(e,t,n,r)=>{let i=new d(`post`,e,n,void 0,t,/* @__PURE__ */ new Date,r);return this.makeRequestInternal(i)};makeFormPutRequest=async(e,t,n,r)=>{let i=new d(`put`,e,n,void 0,t,/* @__PURE__ */ new Date,r);return this.makeRequestInternal(i)};makeStreamingRequest=async(e,t,n,r,i,a,o)=>{let s=new d(e,t,a,n,void 0,/* @__PURE__ */ new Date,o);await this.makeStreamingRequestInternal(s,r,i)};makeRequestInternal=async t=>{let n=this.modifyRequest(t),r=await this.makeFetchRequest(n);return r=this.modifyResponse(r),r.status>=400&&r.status<600&&e.throwKibaExceptionFromErrorContent(r.content,r.status),r};makeStreamingRequestInternal=async(e,t,n)=>{let r=this.modifyRequest(e),i=await this.makeStreamingFetchRequest(r,t,n);this.modifyResponse(i)};createFetchRequestConfig=e=>{let t=new URL(e.url),n=new Headers({...this.headers,...e.headers||{}}),r={method:e.method.toUpperCase(),headers:n,credentials:this.shouldIncludeCrossSiteCredentials?`include`:`same-origin`};if(e.method===`get`||e.method===`delete`){if(e.data){let n={...e.data};Object.keys(n).forEach(e=>{n[e]===void 0&&delete n[e]}),t.search=h(n).toString()}}else{let t=n.get(`Content-Type`);e.data?(r.body=JSON.stringify(e.data),t&&t!==`application/json`&&console.warn(`Overwriting content-type header for request from ${t} to application/json`),n.set(`content-type`,`application/json`)):e.formData&&(r.body=e.formData)}return{url:t,fetchConfig:r}};static getResponseHeaders=e=>{let t={};return e.headers.forEach((e,n)=>{t[n]&&console.warn(`key ${n} will be overwritten. TODO(krish): Implement joining keys!`),t[n]=e}),t};static throwKibaExceptionFromErrorContent=(e,t)=>{let n=null;try{n=JSON.parse(e)}catch{}if(n&&`message`in n){let e=n.fields||{},r=typeof n.exceptionType==`string`?n.exceptionType:void 0;throw new l(String(n.message),t,r,e)}throw new l(e,t,void 0,{})};makeFetchRequest=async t=>{let{url:n,fetchConfig:r}=this.createFetchRequestConfig(t),i=fetch(n.toString(),r).catch(e=>{throw new l(`The request was made but no response was received: [${e.code}] "${e.message}"`)}).then(async t=>{if(!t)throw new l(`The request was made but no response was received.`);let n=await t.text();return new f(t.status,e.getResponseHeaders(t),/* @__PURE__ */ new Date,n)});return await(t.timeoutSeconds?p(t.timeoutSeconds,i):i)};makeStreamingFetchRequest=async(t,n,r)=>{let{url:i,fetchConfig:a}=this.createFetchRequestConfig(t),o=fetch(i.toString(),a).catch(e=>{throw new l(`The request was made but no response was received: [${e.code}] "${e.message}"`)}).then(async t=>{if(!t)throw new l(`The request was made but no response was received.`);let i=e.getResponseHeaders(t);if(t.status>=400&&t.status<600){let n=await t.text();e.throwKibaExceptionFromErrorContent(n,t.status)}let a=t.body?.getReader();if(!a)throw new l(`The request was made but no response body was received.`);let o=e=>{let t=e.trim();if(!t)return;let i;try{i=JSON.parse(t)}catch(e){throw new l(`Failed to parse streaming response line: ${t}. Error: ${String(e)}`)}r(n(i))},s=new TextDecoder,c=``,u=async()=>{let{done:e,value:t}=await a.read();if(e)return;c+=s.decode(t,{stream:!0});let n=c.split(`
|
|
2
|
+
`);c=n.pop()||``,n.forEach(o),await u()};return await u(),c+=s.decode(),o(c),new f(t.status,i,/* @__PURE__ */ new Date,``)});return await(t.timeoutSeconds?p(t.timeoutSeconds,o):o)}},re=class{toObject=()=>({})},ie=class{},ae=class{requester;baseUrl;constructor(e,t){this.requester=e,this.baseUrl=t}makeRequest=async(e,t,n,r,i)=>{let a=`${this.baseUrl}/${t}`,o=await this.requester.makeRequest(e,a,n?.toObject(),i);return r?r.fromObject(JSON.parse(o.content)):null};makeStreamingRequest=async(e,t,n,r,i,a)=>{let o=`${this.baseUrl}/${t}`;await this.requester.makeStreamingRequest(e,o,n?.toObject(),r.fromObject,i,a)}},v=class{localStorage;constructor(e){this.localStorage=e}getValue(e){return this.localStorage.getItem(e)}setValue(e,t){t==null?this.removeValue(e):this.localStorage.setItem(e,t)}getBoolean(e){let t=this.getValue(e);return t===`1`||t!==`0`&&null}setBoolean(e,t){t==null?this.removeValue(e):this.setValue(e,t?`1`:`0`)}removeValue(e){this.localStorage.removeItem(e)}clear(){this.localStorage.clear()}};const y=e=>new Promise(t=>{setTimeout(t,e)}),b=()=>typeof document<`u`,oe=async(e,t)=>{let n=new Blob([t]),r=await URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i)},se=()=>{if(!b())return!1;let e;return document.hidden===void 0?document.msHidden===void 0?document.webkitHidden!==void 0&&(e=`webkitHidden`):e=`msHidden`:e=`hidden`,!e||!document[e]},ce=()=>typeof navigator>`u`?!1:[/Android/i,/webOS/i,/iPhone/i,/iPad/i,/iPod/i,/BlackBerry/i,/Windows Phone/i].some(e=>e.test(navigator.userAgent)),le=e=>e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,`,`),x=e=>e>=1e9?`${(e/1e9).toFixed(0)}B`:e>=1e7?`${(e/1e6).toFixed(0)}M`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e4?`${(e/1e3).toFixed(0)}K`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e>100?e.toFixed(0):e>1?e.toFixed(1):e.toFixed(2),S=(e,t=2,n=!1,r=!1)=>{let i=e.toFixed(t);if(n){for(;i.charAt(i.length-1)===`,`;)i=i.slice(0,-1);i.endsWith(`.0`)&&(i=i.replace(`.0`,``))}if(r){let e=i.split(`.`),t=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,`,`);i=e.length===1?t:`${t}.${e[1]}`}return`${i.toLocaleString()}`},C=BigInt(`1000000000000000000`),w=e=>Number(e*1000000n/C)/1e6,ue=e=>`Ξ${x(w(e))}`,T=(e,t=2,n=!1,r=!1)=>`Ξ${S(w(e),t,n,r)}`,E=(...e)=>{let t=[];e.forEach(e=>{e&&t.push(String(e).trim().split(` `))});let n=t.reduce((e,t)=>e.concat(t),[]);return n=n.reverse(),n=Array.from(new Set(n)),n=n.reverse(),n.join(` `)},D=`yyyy-MM-dd'T'HH:mm:ss.SSSXXX`,O=(e,i)=>{let a;if(!i)a=r(e);else try{a=n(e,i,/* @__PURE__ */ new Date)}catch{}if(!a||!t(a))throw new l(`Invalid date string ${e} passed to dateFromString`);return a},k=(t,n=D,r=!1)=>{let a=t;return r&&(a=e(a,a.getTimezoneOffset())),i(a,n,r?{timeZone:`UTC`}:{})},A=(e,t)=>e.getDate()===t.getDate()&&e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear(),j=e=>A(e,/* @__PURE__ */ new Date),M=e=>{let t=/* @__PURE__ */ new Date;return t.setDate(t.getDate()-1),A(e,t)},N=(e,t)=>{let n=new Date(e.getTime());return n.setTime(n.getTime()+t*60*60*1e3),n},P=(e,t)=>{let n=new Date(e.getTime());return n.setDate(n.getDate()+t),n},F=e=>{let t=Math.floor(((/* @__PURE__ */ new Date()).valueOf()-e.valueOf())/1e3),n,r=Math.floor(t/31536e3);return r>=1?n=`year`:(r=Math.floor(t/2592e3),r>=1?n=`month`:(r=Math.floor(t/86400),r>=1?n=`day`:(r=Math.floor(t/3600),r>=1?n=`hour`:(r=Math.floor(t/60),r>=1?n=`minute`:(r=t,n=`second`))))),(r>1||r===0)&&(n+=`s`),`${r} ${n} ago`},I=e=>{let t=Math.floor(((/* @__PURE__ */ new Date()).valueOf()-e.valueOf())/1e3),n,r=Math.floor(t/31536e3);return r>=1?n=`y`:(r=Math.floor(t/2592e3),r>=1?n=`m`:(r=Math.floor(t/86400),r>=1?n=`d`:(r=Math.floor(t/3600),r>=1?n=`h`:(r=Math.floor(t/60),r>=1?n=`m`:(r=t,n=`s`))))),`${r}${n} ago`},L=e=>{let t=new Date(e.getTime());return t.setHours(0,0,0,0),t},R=e=>{let t=new Date(e.getTime());return t.setHours(23,59,59,999),t},z=(e,t=1)=>{if(e===0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`,`TB`,`PB`,`EB`,`ZB`,`YB`],r=Math.floor(Math.log(e)/Math.log(1024));return`${parseFloat((e/1024**r).toFixed(t<0?0:t))} ${n[r]}`},B=(e,t)=>{let n=t;a.existsSync(t)&&a.lstatSync(t).isDirectory()&&(n=o.join(t,o.basename(e)));let r=o.dirname(n);a.existsSync(r)||a.mkdirSync(r,{recursive:!0}),a.writeFileSync(n,a.readFileSync(e))},V=(e,t)=>{if(!a.lstatSync(e).isDirectory())throw Error(`copyDirectorySync must be called with a directory. source ${e} is not a directory`);if(!a.existsSync(t))a.mkdirSync(t,{recursive:!0});else if(!a.lstatSync(e).isDirectory())throw Error(`copyDirectorySync must be called with a directory. target ${t} is not a directory`);a.readdirSync(e).forEach(n=>{let r=o.join(e,n),i=o.join(t,n);a.lstatSync(r).isDirectory()?V(r,i):B(r,i)})},H=(e,t)=>Array(t-e).fill(null).map((t,n)=>e+n),U=(e,t)=>e.reduce((e,n,r)=>{let i=Math.floor(r/t);return e[i]||(e[i]=[]),e[i].push(n),e},[]);function de(e,...t){return s(e,W(...t))}function W(...e){let t={};return e.forEach(e=>{e&&(t=s(t,e))}),t}function fe(e,t){return c(e,t)}const pe=e=>{if(e!==void 0)return e===null?null:JSON.stringify(e)},me=e=>{if(e!==void 0)return e===null?null:JSON.parse(e)},he=e=>{if(e!==void 0)return e===null?null:e?`1`:`0`},ge=e=>{if(e!==void 0)return e===null?null:e===`1`||e===`true`},G=e=>{if(e!==void 0)return e===null?null:String(e)},K=e=>{if(e===void 0)return;if(e===null)return null;let t=Number(e);return Number.isNaN(t)?null:t},_e=e=>e?String(Math.round(e)):G(e),ve=e=>{let t=K(e);return t&&Math.round(t)},ye=(e,t=`,`)=>{if(e!==void 0)return e===null?``:e.join(t)},be=(e,t=`,`)=>{if(e!==void 0)return e===null?[]:e?e.split(t):[]},q=`1234567890`,J=`abcdefghijklmnopqrstuvwxyz`,Y=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`,X=`${J}${Y}`,Z=`${X}${q}`,Q=`${q}abcdef`,$=(e,t=Z)=>{let n=``;for(let r=0;r<e;r+=1)n+=t[Math.floor(Math.random()*t.length)];return n},xe=(e=!0)=>{let t=$(32,Q);return e&&(t=[t.substring(0,8),t.substring(8,12),t.substring(12,16),t.substring(16,20),t.substring(20)].join(`-`)),t},Se=e=>/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e),Ce=e=>e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,`$1-$2`).toLowerCase(),we=(e,t)=>e.length-t>0?`${e.substring(0,Math.ceil(t/2))}...${e.substring(e.length-Math.floor(t/2),e.length)}`:e,Te=(e,t)=>e.length-t>0?`${e.substring(0,t)}...`:e,Ee=(e,t)=>e.length-t>0?`${e.substring(0,t)}...`:e,De=e=>{let t=atob(e).split(``).map(e=>`%${`00${e.charCodeAt(0).toString(16)}`.slice(-2)}`).join(``);return decodeURIComponent(t)};export{X as CHARACTERS_ALPHA,Z as CHARACTERS_ALPHANUMERIC,J as CHARACTERS_ALPHA_LOWERCASE,Y as CHARACTERS_ALPHA_UPPERCASE,Q as CHARACTERS_HEX,q as CHARACTERS_NUMERIC,C as ETHER,D as JSON_DATE_FORMAT,l as KibaException,d as KibaRequest,f as KibaResponse,v as LocalStorageClient,re as RequestData,_ as Requester,ne as RequesterModifier,ie as ResponseData,u as RestMethod,ae as ServiceClient,P as addDays,N as addHours,H as arrayWithRange,y as asyncSleep,De as base64DecodeUnicode,ge as booleanFromString,he as booleanToString,Ce as camelCaseToKebabCase,V as copyDirectorySync,B as copyFileSync,h as createSearchParams,O as dateFromString,I as dateToRelativeShortString,F as dateToRelativeString,k as dateToString,fe as deepCompare,oe as downloadFileFromBrowser,R as endOfDay,w as etherToNumber,$ as generateRandomString,xe as generateUUID,U as getChunks,E as getClassName,m as getLinkableUrl,ee as getUrlDisplayString,z as humanFileSize,ve as integerFromString,_e as integerToString,b as isBrowser,se as isDocumentVisible,ce as isMobile,A as isSameDay,j as isToday,Se as isValidEmail,M as isYesterday,T as longFormatEther,S as longFormatNumber,de as merge,W as mergePartial,K as numberFromString,G as numberToString,le as numberWithCommas,me as objectFromString,pe as objectToString,te as resolveUrl,ue as shortFormatEther,x as shortFormatNumber,L as startOfDay,be as stringListFromString,ye as stringListToString,p as timeoutPromise,Ee as truncateEnd,we as truncateMiddle,Te as truncateStart,g as updateQueryString};
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["fs","path","deepmerge","deepEqual","KibaException","message","statusCode","exceptionType","fields","RestMethod","\"DELETE\"","\"GET\"","\"HEAD\"","\"OPTIONS\"","\"PATCH\"","\"POST\"","\"PUT\"","KibaRequest","method","url","headers","data","formData","date","timeoutSeconds","KibaResponse","status","content","timeoutPromise","timeoutId","reject","promise","resolve","res","err","getUrlDisplayString","cleanUrl","getLinkableUrl","linkableUrl","resolveUrl","createSearchParams","searchParams","params","key","value","innerValue","updateQueryString","newUrl","values","RequesterModifier","request","response","Requester","modifiers","shouldIncludeCrossSiteCredentials","modifier","currentRequest","currentResponse","timeout","parseItem","onItem","modifiedRequest","fetchConfig","requestData","currentContentHeader","responseHeaders","parsedErrorContent","errorContent","fetchOperation","error","reader","processLine","trimmedLine","line","itemObject","decoder","buffer","readAllChunks","done","lines","RequestData","ResponseData","ServiceClient","requester","baseUrl","additionalHeaders","responseClass","streamItemClass","onStreamItem","LocalStorageClient","localStorage","asyncSleep","sleepTime","isBrowser","downloadFileFromBrowser","blob","href","link","filename","isDocumentVisible","hiddenKey","isMobile","searchRegex","numberWithCommas","shortFormatNumber","longFormatNumber","roundedValue","fractionDigits","shouldRemoveTrailingDecimals","shouldAddCommas","parts","part0","ETHER","etherToNumber","shortFormatEther","longFormatEther","getClassName","args","arg","flattenedValues","accumulator","JSON_DATE_FORMAT","dateFromString","parsedDate","formatString","parseISO","dateString","parse","isValid","dateToString","finalDate","convertToUtc","addMinutes","format","isSameDay","date1","date2","isToday","isYesterday","yesterday","addHours","newDate","hours","addDays","days","dateToRelativeString","seconds","intervalType","interval","dateToRelativeShortString","startOfDay","endOfDay","humanFileSize","size","sizes","bucketIndex","decimals","copyFileSync","targetFilePath","targetPath","sourceFilePath","targetDirectory","copyDirectorySync","sourceDirectory","arrayWithRange","end","start","index","getChunks","arr","chunkIndex","chunkSize","merge","partials","base","mergePartial","partial","deepCompare","object1","object2","objectToString","objectFromString","booleanToString","booleanFromString","numberToString","numberFromString","parsedNumber","integerToString","integerFromString","number","stringListToString","delimiter","stringListFromString","CHARACTERS_NUMERIC","CHARACTERS_ALPHA_LOWERCASE","CHARACTERS_ALPHA_UPPERCASE","CHARACTERS_ALPHA","CHARACTERS_ALPHANUMERIC","CHARACTERS_HEX","generateRandomString","result","i","length","characters","generateUUID","uuid","shouldIncludeDashes","isValidEmail","email","camelCaseToKebabCase","truncateMiddle","text","maxLength","truncateStart","truncateEnd","base64DecodeUnicode","percentEncodedInput","input","c"],"sources":["../src/model/kibaException.ts","../src/requester/restMethod.ts","../src/requester/request.ts","../src/requester/response.ts","../src/util/promiseUtil.ts","../src/util/urlUtils.ts","../src/requester/requester.ts","../src/services/serviceClient.ts","../src/storage/localStorageClient.ts","../src/util/asyncUtil.ts","../src/util/browserUtil.ts","../src/util/numberUtil.ts","../src/util/chainUtil.ts","../src/util/classNameUtil.ts","../src/util/dateUtil.ts","../src/util/fileUtil.ts","../src/util/listUtil.ts","../src/util/objectUtil.ts","../src/util/serializationUtil.ts","../src/util/stringUtil.ts"],"sourcesContent":["\nexport class KibaException extends Error {\n public statusCode: number;\n public exceptionType: string;\n public fields: Record<string, string>;\n\n public constructor(message: string, statusCode?: number, exceptionType?: string, fields?: Record<string, string>) {\n super(message);\n this.name = this.constructor.name;\n this.statusCode = statusCode || 500;\n this.exceptionType = exceptionType || 'KibaException';\n this.fields = fields || {};\n }\n}\n","\nexport enum RestMethod {\n DELETE = 'delete',\n GET = 'get',\n HEAD = 'head',\n OPTIONS = 'options',\n PATCH = 'patch',\n POST = 'post',\n PUT = 'put',\n}\n","import { RestMethod } from './restMethod';\n\nexport class KibaRequest {\n public method: RestMethod;\n public url: string;\n public headers: Record<string, string>;\n public data: Record<string, unknown> | null;\n public formData: FormData | null;\n public date: Date;\n public timeoutSeconds: number | null;\n\n public constructor(method: RestMethod, url: string, headers?: Record<string, string>, data?: Record<string, unknown>, formData?: FormData, date?: Date, timeoutSeconds?: number) {\n this.method = method;\n this.url = url;\n this.headers = headers || {};\n this.data = data || null;\n this.formData = formData || null;\n this.date = date || new Date();\n this.timeoutSeconds = timeoutSeconds && timeoutSeconds > 0 ? timeoutSeconds : null;\n }\n}\n","export class KibaResponse {\n public status: number;\n public headers: Record<string, string> = {};\n public date: Date;\n public content = '';\n\n public constructor(status: number, headers: Record<string, string>, date: Date, content: string) {\n this.status = status;\n this.headers = headers;\n this.date = date;\n this.content = content;\n }\n}\n","import { KibaException } from '../model/kibaException';\n\n// TODO(krish): add proper typings to this\nexport const timeoutPromise = <T>(timeoutSeconds: number, promise: Promise<T>): Promise<T> => {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new KibaException('TIMEOUT'));\n }, timeoutSeconds * 1000);\n promise.then(\n (res) => {\n clearTimeout(timeoutId);\n resolve(res);\n },\n (err) => {\n clearTimeout(timeoutId);\n reject(err);\n },\n );\n });\n};\n","export const getUrlDisplayString = (url: string): string => {\n let cleanUrl = url;\n if (cleanUrl.startsWith('http://')) {\n cleanUrl = cleanUrl.slice('http://'.length);\n }\n if (cleanUrl.startsWith('https://')) {\n cleanUrl = cleanUrl.slice('https://'.length);\n }\n while (cleanUrl.endsWith('/')) {\n cleanUrl = cleanUrl.slice(0, cleanUrl.length - 1);\n }\n return cleanUrl;\n};\n\nexport const getLinkableUrl = (url: string): string => {\n let linkableUrl = url;\n if (!linkableUrl.startsWith('http://') && !linkableUrl.startsWith('https://')) {\n linkableUrl = `http://${linkableUrl}`;\n }\n return linkableUrl;\n};\n\nexport const resolveUrl = (url: string): string => {\n return url.startsWith('ipfs://') ? url.replace('ipfs://', 'https://pablo-images.kibalabs.com/v1/ipfs/') : url;\n};\n\nexport const createSearchParams = (params: { [key: string]: string | string[] }): URLSearchParams => {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]: [string, string | string[]]): void => {\n if (Array.isArray(value)) {\n value.forEach((innerValue: string): void => {\n searchParams.append(key, innerValue);\n });\n } else {\n searchParams.append(key, value);\n }\n });\n return searchParams;\n};\n\nexport const updateQueryString = (url: string, values: Record<string, string | number | boolean>): string => {\n const newUrl = new URL(url);\n Object.keys(values).forEach((key: string): void => {\n newUrl.searchParams.set(key, String(values[key]));\n });\n return newUrl.toString();\n};\n","/// <reference lib=\"dom\" />\nimport { KibaRequest } from './request';\nimport { KibaResponse } from './response';\nimport { RestMethod } from './restMethod';\nimport { KibaException } from '../model/kibaException';\nimport { timeoutPromise } from '../util/promiseUtil';\nimport { createSearchParams } from '../util/urlUtils';\n\nexport class RequesterModifier {\n // eslint-disable-next-line class-methods-use-this\n public modifyRequest(request: KibaRequest): KibaRequest {\n return request;\n }\n\n // eslint-disable-next-line class-methods-use-this\n public modifyResponse(response: KibaResponse): KibaResponse {\n return response;\n }\n}\n\nexport class Requester {\n private headers: Record<string, string>;\n private modifiers: RequesterModifier[];\n private shouldIncludeCrossSiteCredentials: boolean;\n\n public constructor(headers?: Record<string, string>, modifiers?: RequesterModifier[], shouldIncludeCrossSiteCredentials = true) {\n this.headers = headers || {};\n this.modifiers = modifiers || [];\n this.shouldIncludeCrossSiteCredentials = shouldIncludeCrossSiteCredentials;\n }\n\n public addModifier = (modifier: RequesterModifier): void => {\n this.modifiers.push(modifier);\n };\n\n private modifyRequest = (request: KibaRequest): KibaRequest => {\n return this.modifiers.reduce((currentRequest: KibaRequest, modifier: RequesterModifier): KibaRequest => {\n return modifier.modifyRequest(currentRequest);\n }, request);\n };\n\n private modifyResponse = (response: KibaResponse): KibaResponse => {\n return this.modifiers.reduce((currentResponse: KibaResponse, modifier: RequesterModifier): KibaResponse => {\n return modifier.modifyResponse(currentResponse);\n }, response);\n };\n\n public getRequest = async (url: string, data?: Record<string, unknown>, headers?: Record<string, string>, timeout?: number): Promise<KibaResponse> => {\n const request = new KibaRequest(RestMethod.GET, url, headers, data, undefined, new Date(), timeout);\n return this.makeRequestInternal(request);\n };\n\n public postRequest = async (url: string, data?: Record<string, unknown>, headers?: Record<string, string>, timeout?: number): Promise<KibaResponse> => {\n const request = new KibaRequest(RestMethod.POST, url, headers, data, undefined, new Date(), timeout);\n return this.makeRequestInternal(request);\n };\n\n public putRequest = async (url: string, data?: Record<string, unknown>, headers?: Record<string, string>, timeout?: number): Promise<KibaResponse> => {\n const request = new KibaRequest(RestMethod.PUT, url, headers, data, undefined, new Date(), timeout);\n return this.makeRequestInternal(request);\n };\n\n public deleteRequest = async (url: string, data?: Record<string, unknown>, headers?: Record<string, string>, timeout?: number): Promise<KibaResponse> => {\n const request = new KibaRequest(RestMethod.DELETE, url, headers, data, undefined, new Date(), timeout);\n return this.makeRequestInternal(request);\n };\n\n public makeRequest = async (method: RestMethod, url: string, data?: Record<string, unknown>, headers?: Record<string, string>, timeout?: number): Promise<KibaResponse> => {\n const request = new KibaRequest(method, url, headers, data, undefined, new Date(), timeout);\n return this.makeRequestInternal(request);\n };\n\n public makeFormRequest = async (url: string, data?: FormData, headers?: Record<string, string>, timeout?: number): Promise<KibaResponse> => {\n const request = new KibaRequest(RestMethod.POST, url, headers, undefined, data, new Date(), timeout);\n return this.makeRequestInternal(request);\n };\n\n public makeFormPutRequest = async (url: string, data?: FormData, headers?: Record<string, string>, timeout?: number): Promise<KibaResponse> => {\n const request = new KibaRequest(RestMethod.PUT, url, headers, undefined, data, new Date(), timeout);\n return this.makeRequestInternal(request);\n };\n\n public makeStreamingRequest = async <StreamItemType>(\n method: RestMethod,\n url: string,\n data: Record<string, unknown> | undefined,\n parseItem: (obj: Record<string, unknown>) => StreamItemType,\n onItem: (item: StreamItemType) => void,\n headers?: Record<string, string>,\n timeout?: number,\n ): Promise<void> => {\n const request = new KibaRequest(method, url, headers, data, undefined, new Date(), timeout);\n await this.makeStreamingRequestInternal(request, parseItem, onItem);\n };\n\n private makeRequestInternal = async (request: KibaRequest): Promise<KibaResponse> => {\n const modifiedRequest = this.modifyRequest(request);\n let response = await this.makeFetchRequest(modifiedRequest);\n response = this.modifyResponse(response);\n if (response.status >= 400 && response.status < 600) {\n Requester.throwKibaExceptionFromErrorContent(response.content, response.status);\n }\n return response;\n };\n\n private makeStreamingRequestInternal = async <StreamItemType>(\n request: KibaRequest,\n parseItem: (obj: Record<string, unknown>) => StreamItemType,\n onItem: (item: StreamItemType) => void,\n ): Promise<void> => {\n const modifiedRequest = this.modifyRequest(request);\n const response = await this.makeStreamingFetchRequest(modifiedRequest, parseItem, onItem);\n this.modifyResponse(response);\n };\n\n private createFetchRequestConfig = (request: KibaRequest): { url: URL; fetchConfig: { method: string; headers: Headers; credentials: 'include' | 'same-origin'; body?: string | FormData } } => {\n const url = new URL(request.url);\n const headers = new Headers({ ...this.headers, ...(request.headers || {}) });\n // NOTE(krishan711): RequestInit comes from the DOM which isn't used by default in typescript typings\n const fetchConfig: { method: string; headers: Headers; credentials: 'include' | 'same-origin'; body?: string | FormData } = {\n method: request.method.toUpperCase(),\n headers,\n credentials: this.shouldIncludeCrossSiteCredentials ? 'include' : 'same-origin',\n };\n if (request.method === RestMethod.GET || request.method === RestMethod.DELETE) {\n if (request.data) {\n const requestData = ({ ...request.data }) as Record<string, string>;\n Object.keys(requestData).forEach((key: string): void => {\n if (requestData[key] === undefined) {\n delete requestData[key];\n }\n });\n url.search = createSearchParams(requestData).toString();\n }\n } else {\n // TODO(krishan711): find a better place for this\n const currentContentHeader = headers.get('Content-Type');\n if (request.data) {\n fetchConfig.body = JSON.stringify(request.data);\n if (currentContentHeader && currentContentHeader !== 'application/json') {\n console.warn(`Overwriting content-type header for request from ${currentContentHeader} to application/json`);\n }\n headers.set('content-type', 'application/json');\n } else if (request.formData) {\n fetchConfig.body = request.formData;\n // NOTE(krishan711): I don't know whether this should be set or not.\n // For S3 uploads it cannot be set as the file type is set already\n // For azure uploads the content-type should be set by the caller to the file type\n // headers.set('content-type', 'multipart/form-data');\n }\n }\n return { url, fetchConfig };\n };\n\n private static getResponseHeaders = (response: Response): Record<string, string> => {\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value: string, key: string): void => {\n if (responseHeaders[key]) {\n console.warn(`key ${key} will be overwritten. TODO(krish): Implement joining keys!`);\n }\n responseHeaders[key] = value;\n });\n return responseHeaders;\n };\n\n private static throwKibaExceptionFromErrorContent = (errorContent: string, statusCode: number): never => {\n let parsedErrorContent: Record<string, unknown> | null = null;\n try {\n parsedErrorContent = JSON.parse(errorContent) as Record<string, unknown>;\n } catch {\n // no-op\n }\n if (parsedErrorContent && 'message' in parsedErrorContent) {\n const fields = parsedErrorContent.fields as Record<string, string> || {};\n const exceptionType = typeof parsedErrorContent.exceptionType === 'string' ? parsedErrorContent.exceptionType : undefined;\n throw new KibaException(String(parsedErrorContent.message), statusCode, exceptionType, fields);\n }\n throw new KibaException(errorContent, statusCode, undefined, {});\n };\n\n private makeFetchRequest = async (request: KibaRequest): Promise<KibaResponse> => {\n const { url, fetchConfig } = this.createFetchRequestConfig(request);\n const fetchOperation = fetch(url.toString(), fetchConfig)\n .catch((error): void => {\n throw new KibaException(`The request was made but no response was received: [${error.code}] \"${error.message}\"`);\n })\n .then(async (response: Response | void): Promise<KibaResponse> => {\n if (!response) {\n throw new KibaException('The request was made but no response was received.');\n }\n const content = await response.text();\n return new KibaResponse(response.status, Requester.getResponseHeaders(response), new Date(), content);\n });\n const response = await (request.timeoutSeconds ? timeoutPromise(request.timeoutSeconds, fetchOperation) : fetchOperation);\n return response;\n };\n\n private makeStreamingFetchRequest = async <StreamItemType>(\n request: KibaRequest,\n parseItem: (obj: Record<string, unknown>) => StreamItemType,\n onItem: (item: StreamItemType) => void,\n ): Promise<KibaResponse> => {\n const { url, fetchConfig } = this.createFetchRequestConfig(request);\n const fetchOperation = fetch(url.toString(), fetchConfig)\n .catch((error): void => {\n throw new KibaException(`The request was made but no response was received: [${error.code}] \"${error.message}\"`);\n })\n .then(async (response: Response | void): Promise<KibaResponse> => {\n if (!response) {\n throw new KibaException('The request was made but no response was received.');\n }\n const responseHeaders = Requester.getResponseHeaders(response);\n if (response.status >= 400 && response.status < 600) {\n const errorContent = await response.text();\n Requester.throwKibaExceptionFromErrorContent(errorContent, response.status);\n }\n const reader = response.body?.getReader();\n if (!reader) {\n throw new KibaException('The request was made but no response body was received.');\n }\n const processLine = (line: string): void => {\n const trimmedLine = line.trim();\n if (!trimmedLine) {\n return;\n }\n let itemObject: Record<string, unknown>;\n try {\n itemObject = JSON.parse(trimmedLine) as Record<string, unknown>;\n } catch (error) {\n throw new KibaException(`Failed to parse streaming response line: ${trimmedLine}. Error: ${String(error)}`);\n }\n onItem(parseItem(itemObject));\n };\n\n const decoder = new TextDecoder();\n let buffer = '';\n const readAllChunks = async (): Promise<void> => {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n lines.forEach(processLine);\n await readAllChunks();\n };\n await readAllChunks();\n buffer += decoder.decode();\n processLine(buffer);\n\n return new KibaResponse(response.status, responseHeaders, new Date(), '');\n });\n const response = await (request.timeoutSeconds ? timeoutPromise(request.timeoutSeconds, fetchOperation) : fetchOperation);\n return response;\n };\n}\n","import { Requester, RestMethod } from '../requester';\n\nexport type RawObject = Record<string, unknown>;\n\n// TODO(krishan711): should this be an interface?\nexport class RequestData {\n // eslint-disable-next-line class-methods-use-this\n public toObject = (): RawObject => {\n return {};\n };\n}\n\n// TODO(krishan711): should this be an interface?\nexport class ResponseData {\n // public static fromObject = <T extends ResponseData>(obj: RawObject): T => {\n // throw new Error();\n // }\n}\n\nexport type ResponseDataClass<T extends ResponseData> = {\n fromObject: (obj: RawObject) => T;\n};\n\nexport class ServiceClient {\n protected requester: Requester;\n public baseUrl: string;\n\n public constructor(requester: Requester, baseUrl: string) {\n this.requester = requester;\n this.baseUrl = baseUrl;\n }\n\n protected makeRequest = async <ResponseType extends ResponseData>(\n method: RestMethod,\n path: string,\n request?: RequestData | undefined,\n responseClass?: ResponseDataClass<ResponseType> | undefined,\n additionalHeaders?: Record<string, string>,\n ): Promise<ResponseType> => {\n const url = `${this.baseUrl}/${path}`;\n const response = await this.requester.makeRequest(method, url, request?.toObject(), additionalHeaders);\n return responseClass ? responseClass.fromObject(JSON.parse(response.content) as RawObject) : null as unknown as ResponseType;\n };\n\n protected makeStreamingRequest = async <StreamItemType extends ResponseData>(\n method: RestMethod,\n path: string,\n request: RequestData | undefined,\n streamItemClass: ResponseDataClass<StreamItemType>,\n onStreamItem: (streamItem: StreamItemType) => void,\n additionalHeaders?: Record<string, string>,\n ): Promise<void> => {\n const url = `${this.baseUrl}/${path}`;\n await this.requester.makeStreamingRequest(method, url, request?.toObject(), streamItemClass.fromObject, onStreamItem, additionalHeaders);\n };\n}\n","\nexport class LocalStorageClient {\n private localStorage: Storage;\n\n constructor(localStorage: Storage) {\n this.localStorage = localStorage;\n }\n\n public getValue(key: string): string | null {\n return this.localStorage.getItem(key);\n }\n\n public setValue(key: string, value: string | null | undefined): void {\n if (value === null || value === undefined) {\n this.removeValue(key);\n } else {\n this.localStorage.setItem(key, value);\n }\n }\n\n public getBoolean(key: string): boolean | null {\n const value = this.getValue(key);\n if (value === '1') {\n return true;\n }\n if (value === '0') {\n return false;\n }\n return null;\n }\n\n public setBoolean(key: string, value: boolean | null | undefined): void {\n if (value === null || value === undefined) {\n this.removeValue(key);\n } else {\n this.setValue(key, value ? '1' : '0');\n }\n }\n\n public removeValue(key: string): void {\n this.localStorage.removeItem(key);\n }\n\n public clear(): void {\n this.localStorage.clear();\n }\n}\n","export const asyncSleep = (sleepTime: number): Promise<void> => {\n return new Promise((resolve): void => {\n setTimeout(resolve, sleepTime);\n });\n};\n","export const isBrowser = (): boolean => {\n return typeof document !== 'undefined';\n};\n\nexport const downloadFileFromBrowser = async (filename: string, content: string): Promise<void> => {\n const blob = new Blob([content]);\n const href = await URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = href;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n// see https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API#Example\nexport const isDocumentVisible = (): boolean => {\n if (!isBrowser()) {\n return false;\n }\n\n let hiddenKey: string | undefined;\n if (document.hidden !== undefined) {\n hiddenKey = 'hidden';\n // @ts-ignore\n } else if (document.msHidden !== undefined) {\n hiddenKey = 'msHidden';\n // @ts-ignore\n } else if (document.webkitHidden !== undefined) {\n hiddenKey = 'webkitHidden';\n }\n // @ts-ignore\n return hiddenKey ? !document[hiddenKey] : true;\n};\n\nexport const isMobile = (): boolean => {\n if (typeof navigator === 'undefined') {\n return false;\n }\n\n const searchRegexs = [\n /Android/i,\n /webOS/i,\n /iPhone/i,\n /iPad/i,\n /iPod/i,\n /BlackBerry/i,\n /Windows Phone/i,\n ];\n\n return searchRegexs.some((searchRegex: RegExp): boolean => searchRegex.test(navigator.userAgent));\n};\n","export const numberWithCommas = (value: number): string => {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nexport const shortFormatNumber = (value: number): string => {\n if (value >= 1000000000) {\n return `${(value / 1000000000.0).toFixed(0)}B`;\n }\n if (value >= 10000000) {\n return `${(value / 1000000.0).toFixed(0)}M`;\n }\n if (value >= 1000000) {\n return `${(value / 1000000.0).toFixed(1)}M`;\n }\n if (value >= 10000) {\n return `${(value / 1000.0).toFixed(0)}K`;\n }\n if (value >= 1000) {\n return `${(value / 1000.0).toFixed(1)}K`;\n }\n if (value > 100) {\n return value.toFixed(0);\n }\n if (value > 1) {\n return value.toFixed(1);\n }\n return value.toFixed(2);\n};\n\nexport const longFormatNumber = (value: number, fractionDigits = 2, shouldRemoveTrailingDecimals = false, shouldAddCommas = false): string => {\n let roundedValue = value.toFixed(fractionDigits);\n if (shouldRemoveTrailingDecimals) {\n while (roundedValue.charAt(roundedValue.length - 1) === ',') {\n roundedValue = roundedValue.slice(0, -1);\n }\n if (roundedValue.endsWith('.0')) {\n roundedValue = roundedValue.replace('.0', '');\n }\n }\n if (shouldAddCommas) {\n const parts = roundedValue.split('.');\n const part0 = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n roundedValue = parts.length === 1 ? part0 : `${part0}.${parts[1]}`;\n }\n return `${roundedValue.toLocaleString()}`;\n};\n","import { longFormatNumber, shortFormatNumber } from './numberUtil';\n\nexport const ETHER = BigInt('1000000000000000000');\n\nexport const etherToNumber = (value: bigint): number => {\n return Number((value * 1000000n) / ETHER) / 1000000.0;\n};\n\nexport const shortFormatEther = (value: bigint): string => {\n const numberString = shortFormatNumber(etherToNumber(value));\n return `Ξ${numberString}`;\n};\n\nexport const longFormatEther = (value: bigint, fractionDigits = 2, shouldRemoveTrailingDecimals = false, shouldAddCommas = false): string => {\n const numberString = longFormatNumber(etherToNumber(value), fractionDigits, shouldRemoveTrailingDecimals, shouldAddCommas);\n return `Ξ${numberString}`;\n};\n","\ntype ArgType = string | number | boolean | null | undefined;\n\n// NOTE(krish): this is inspired from https://github.com/lukeed/clsx/blob/master/src/index.js\nexport const getClassName = (...args: ArgType[]): string => {\n const values: string[][] = [];\n args.forEach((arg: ArgType): void => {\n if (arg) {\n values.push(String(arg).trim().split(' '));\n }\n });\n let flattenedValues = values.reduce((accumulator: string[], value: string[]): string[] => accumulator.concat(value), []);\n flattenedValues = flattenedValues.reverse();\n flattenedValues = Array.from(new Set(flattenedValues));\n flattenedValues = flattenedValues.reverse();\n return flattenedValues.join(' ');\n};\n","import { addMinutes } from 'date-fns/addMinutes';\nimport { isValid } from 'date-fns/isValid';\nimport { parse } from 'date-fns/parse';\nimport { parseISO } from 'date-fns/parseISO';\nimport { format } from 'date-fns-tz';\n// add to package.json if needed: \"jstimezonedetect\": \"^1.0.7\"\n// import jstz from 'jstimezonedetect';\n\nimport { KibaException } from '../model';\n\nexport const JSON_DATE_FORMAT = 'yyyy-MM-dd\\'T\\'HH:mm:ss.SSSXXX';\n\nexport const dateFromString = (dateString: string, formatString?: string): Date => {\n let parsedDate: Date | undefined;\n if (!formatString) {\n parsedDate = parseISO(dateString);\n } else {\n try {\n parsedDate = parse(dateString, formatString, new Date());\n } catch {\n // no-op\n }\n }\n if (!parsedDate || !isValid(parsedDate)) {\n throw new KibaException(`Invalid date string ${dateString} passed to dateFromString`);\n }\n return parsedDate;\n};\n\n// NOTE(krishan711): i really don\\t know what convertToUtc was used for previously but its not used now so probably should remove it\nexport const dateToString = (date: Date, formatString: string = JSON_DATE_FORMAT, convertToUtc = false): string => {\n let finalDate = date;\n if (convertToUtc) {\n finalDate = addMinutes(finalDate, finalDate.getTimezoneOffset());\n }\n const formattedDate = format(finalDate, formatString, convertToUtc ? { timeZone: 'UTC' } : {});\n return formattedDate;\n};\n\nexport const isSameDay = (date1: Date, date2: Date): boolean => {\n return date1.getDate() === date2.getDate() && date1.getMonth() === date2.getMonth() && date1.getFullYear() === date2.getFullYear();\n};\n\nexport const isToday = (date: Date): boolean => {\n return isSameDay(date, new Date());\n};\n\nexport const isYesterday = (date: Date): boolean => {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n return isSameDay(date, yesterday);\n};\n\nexport const addHours = (date: Date, hours: number): Date => {\n const newDate = new Date(date.getTime());\n newDate.setTime(newDate.getTime() + (hours * 60 * 60 * 1000));\n return newDate;\n};\n\nexport const addDays = (date: Date, days: number): Date => {\n const newDate = new Date(date.getTime());\n newDate.setDate(newDate.getDate() + days);\n return newDate;\n};\n\nexport const dateToRelativeString = (date: Date): string => {\n const seconds = Math.floor((new Date().valueOf() - date.valueOf()) / 1000);\n let intervalType: string;\n\n let interval = Math.floor(seconds / 31536000);\n if (interval >= 1) {\n intervalType = 'year';\n } else {\n interval = Math.floor(seconds / 2592000);\n if (interval >= 1) {\n intervalType = 'month';\n } else {\n interval = Math.floor(seconds / 86400);\n if (interval >= 1) {\n intervalType = 'day';\n } else {\n interval = Math.floor(seconds / 3600);\n if (interval >= 1) {\n intervalType = 'hour';\n } else {\n interval = Math.floor(seconds / 60);\n if (interval >= 1) {\n intervalType = 'minute';\n } else {\n interval = seconds;\n intervalType = 'second';\n }\n }\n }\n }\n }\n if (interval > 1 || interval === 0) {\n intervalType += 's';\n }\n return `${interval} ${intervalType} ago`;\n};\n\nexport const dateToRelativeShortString = (date: Date): string => {\n const seconds = Math.floor((new Date().valueOf() - date.valueOf()) / 1000);\n let intervalType: string;\n\n let interval = Math.floor(seconds / 31536000);\n if (interval >= 1) {\n intervalType = 'y';\n } else {\n interval = Math.floor(seconds / 2592000);\n if (interval >= 1) {\n intervalType = 'm';\n } else {\n interval = Math.floor(seconds / 86400);\n if (interval >= 1) {\n intervalType = 'd';\n } else {\n interval = Math.floor(seconds / 3600);\n if (interval >= 1) {\n intervalType = 'h';\n } else {\n interval = Math.floor(seconds / 60);\n if (interval >= 1) {\n intervalType = 'm';\n } else {\n interval = seconds;\n intervalType = 's';\n }\n }\n }\n }\n }\n return `${interval}${intervalType} ago`;\n};\n\nexport const startOfDay = (date: Date): Date => {\n const newDate = new Date(date.getTime());\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n};\n\nexport const endOfDay = (date: Date): Date => {\n const newDate = new Date(date.getTime());\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n};\n\n// export const guessTimezone = (): string => {\n// if (Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone) {\n// return Intl.DateTimeFormat().resolvedOptions().timeZone;\n// }\n// return jstz.determine().name();\n// }\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport const humanFileSize = (size: number, decimals = 1): string => {\n if (size === 0) {\n return '0 B';\n }\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const bucketIndex = Math.floor(Math.log(size) / Math.log(1024));\n const formattedSize = parseFloat((size / (1024 ** bucketIndex)).toFixed(decimals < 0 ? 0 : decimals));\n return `${formattedSize} ${sizes[bucketIndex]}`;\n};\n\nexport const copyFileSync = (sourceFilePath: string, targetPath: string): void => {\n let targetFilePath = targetPath;\n if (fs.existsSync(targetPath) && fs.lstatSync(targetPath).isDirectory()) {\n targetFilePath = path.join(targetPath, path.basename(sourceFilePath));\n }\n const targetDirectory = path.dirname(targetFilePath);\n if (!fs.existsSync(targetDirectory)) {\n fs.mkdirSync(targetDirectory, { recursive: true });\n }\n fs.writeFileSync(targetFilePath, fs.readFileSync(sourceFilePath));\n};\n\nexport const copyDirectorySync = (sourceDirectory: string, targetDirectory: string): void => {\n if (!fs.lstatSync(sourceDirectory).isDirectory()) {\n throw new Error(`copyDirectorySync must be called with a directory. source ${sourceDirectory} is not a directory`);\n }\n if (!fs.existsSync(targetDirectory)) {\n fs.mkdirSync(targetDirectory, { recursive: true });\n } else if (!fs.lstatSync(sourceDirectory).isDirectory()) {\n throw new Error(`copyDirectorySync must be called with a directory. target ${targetDirectory} is not a directory`);\n }\n fs.readdirSync(sourceDirectory).forEach((filename: string): void => {\n const sourceFilePath = path.join(sourceDirectory, filename);\n const targetFilePath = path.join(targetDirectory, filename);\n if (fs.lstatSync(sourceFilePath).isDirectory()) {\n copyDirectorySync(sourceFilePath, targetFilePath);\n } else {\n copyFileSync(sourceFilePath, targetFilePath);\n }\n });\n};\n","\nexport const arrayWithRange = (start: number, end: number): number[] => {\n return Array(end - start).fill(null).map((item: unknown, index: number): number => start + index);\n};\n\nexport const getChunks = <T>(arr: T[], chunkSize: number): T[][] => {\n return arr.reduce((accumulator: T[][], value: T, index: number): T[][] => {\n const chunkIndex = Math.floor(index / chunkSize);\n if (!accumulator[chunkIndex]) {\n accumulator[chunkIndex] = [];\n }\n accumulator[chunkIndex].push(value);\n return accumulator;\n }, []);\n};\n","import { default as deepmerge } from 'deepmerge';\nimport deepEqual from 'fast-deep-equal';\n\nimport { RecursivePartial } from './typeUtil';\n\nexport function merge<T>(base: T, ...partials: (RecursivePartial<T> | undefined)[]): T {\n // @ts-ignore\n return deepmerge(base, mergePartial(...partials));\n}\n\nexport function mergePartial<T>(...partials: (RecursivePartial<T> | undefined)[]): RecursivePartial<T> {\n let base = {} as RecursivePartial<T>;\n partials.forEach((partial?: RecursivePartial<T>): void => {\n if (!partial) {\n return;\n }\n // @ts-ignore\n base = deepmerge(base, partial);\n });\n return base;\n}\n\nexport function deepCompare<T>(object1: T, object2: T): boolean {\n return deepEqual(object1, object2);\n}\n","export const objectToString = (value: Record<string, unknown> | null | undefined): string | null | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return JSON.stringify(value);\n};\n\nexport const objectFromString = (value: string | null | undefined): Record<string, unknown> | null | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return JSON.parse(value);\n};\n\nexport const booleanToString = (value: boolean | null | undefined): string | null | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return value ? '1' : '0';\n};\n\nexport const booleanFromString = (value: string | null | undefined): boolean | null | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return value === '1' || value === 'true';\n};\n\nexport const numberToString = (value: number | null | undefined): string | null | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n return String(value);\n};\n\nexport const numberFromString = (value: string | null | undefined): number | null | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n const parsedNumber = Number(value);\n return Number.isNaN(parsedNumber) ? null : parsedNumber;\n};\n\nexport const integerToString = (value: number | null | undefined): string | null | undefined => {\n return value ? String(Math.round(value)) : numberToString(value);\n};\n\nexport const integerFromString = (value: string | null | undefined): number | null | undefined => {\n const number = numberFromString(value);\n return number ? Math.round(number) : number;\n};\n\nexport const stringListToString = (value: string[] | null | undefined, delimiter = ','): string | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return '';\n }\n return value.join(delimiter);\n};\n\nexport const stringListFromString = (value: string | null | undefined, delimiter = ','): string[] | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return [];\n }\n return value ? value.split(delimiter) : [];\n};\n","export const CHARACTERS_NUMERIC = '1234567890';\nexport const CHARACTERS_ALPHA_LOWERCASE = 'abcdefghijklmnopqrstuvwxyz';\nexport const CHARACTERS_ALPHA_UPPERCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nexport const CHARACTERS_ALPHA = `${CHARACTERS_ALPHA_LOWERCASE}${CHARACTERS_ALPHA_UPPERCASE}`;\nexport const CHARACTERS_ALPHANUMERIC = `${CHARACTERS_ALPHA}${CHARACTERS_NUMERIC}`;\nexport const CHARACTERS_HEX = `${CHARACTERS_NUMERIC}abcdef`;\n\nexport const generateRandomString = (length: number, characters: string = CHARACTERS_ALPHANUMERIC): string => {\n let result = '';\n for (let i = 0; i < length; i += 1) {\n result += characters[Math.floor(Math.random() * characters.length)];\n }\n return result;\n};\n\nexport const generateUUID = (shouldIncludeDashes = true): string => {\n let uuid = generateRandomString(32, CHARACTERS_HEX);\n if (shouldIncludeDashes) {\n uuid = [\n uuid.substring(0, 8),\n uuid.substring(8, 12),\n uuid.substring(12, 16),\n uuid.substring(16, 20),\n uuid.substring(20)]\n .join('-');\n }\n return uuid;\n};\n\nexport const isValidEmail = (email: string): boolean => {\n const re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(email);\n};\n\nexport const camelCaseToKebabCase = (value: string): string => {\n return value.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();\n};\n\nexport const truncateMiddle = (text: string, maxLength: number): string => {\n const diff = text.length - maxLength;\n if (diff > 0) {\n const start = text.substring(0, Math.ceil(maxLength / 2.0));\n const end = text.substring(text.length - Math.floor(maxLength / 2.0), text.length);\n return `${start}...${end}`;\n }\n return text;\n};\n\nexport const truncateStart = (text: string, maxLength: number): string => {\n const diff = text.length - maxLength;\n if (diff > 0) {\n const start = text.substring(0, maxLength);\n return `${start}...`;\n }\n return text;\n};\n\n\nexport const truncateEnd = (text: string, maxLength: number): string => {\n const diff = text.length - maxLength;\n if (diff > 0) {\n const start = text.substring(0, maxLength);\n return `${start}...`;\n }\n return text;\n};\n\n\nexport const base64DecodeUnicode = (input: string): string => {\n // NOTE(krishan711): Convert Base64 encoded bytes to percent-encoding, and then get the original string.\n const percentEncodedInput = atob(input).split('').map((c: string): string => {\n return `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`;\n }).join('');\n return decodeURIComponent(percentEncodedInput);\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectUtil.d.ts","sourceRoot":"","sources":["../../src/util/objectUtil.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"objectUtil.d.ts","sourceRoot":"","sources":["../../src/util/objectUtil.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAGrF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAUrG;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAE9D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kibalabs/core",
|
|
3
|
-
"version": "0.7.2-next.
|
|
3
|
+
"version": "0.7.2-next.5",
|
|
4
4
|
"description": "Utilities for use in front-end projects at Kiba Labs",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -17,12 +17,13 @@
|
|
|
17
17
|
"dist/*"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"date-fns": "^4.
|
|
21
|
-
"date-fns-tz": "^3.
|
|
20
|
+
"date-fns": "^4.4.0",
|
|
21
|
+
"date-fns-tz": "^3.2.0",
|
|
22
22
|
"deepmerge": "^4.3.1",
|
|
23
23
|
"fast-deep-equal": "^3.1.3"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@kibalabs/build": "0.14.
|
|
26
|
+
"@kibalabs/build": "0.14.2-next.8",
|
|
27
|
+
"@types/node": "^24.19.2"
|
|
27
28
|
}
|
|
28
29
|
}
|