@airporting/integrations-app 0.4.31 → 0.4.32

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.
Files changed (115) hide show
  1. package/README.md +74 -2
  2. package/dist/mf/{18.js → 1018.js} +3 -3
  3. package/dist/mf/{235.js → 1330.js} +2 -2
  4. package/dist/mf/1600.js +1 -0
  5. package/dist/mf/1857.js +1 -0
  6. package/dist/mf/{70.js → 2070.js} +3 -3
  7. package/dist/mf/3.js +1 -0
  8. package/dist/mf/{134.js → 3134.js} +2 -2
  9. package/dist/mf/{330.js → 3235.js} +2 -2
  10. package/dist/mf/{473.js → 3711.js} +2 -2
  11. package/dist/mf/4447.js +1 -0
  12. package/dist/mf/{756.js → 4756.js} +4 -4
  13. package/dist/mf/4810.js +1 -0
  14. package/dist/mf/5475.js +1 -0
  15. package/dist/mf/{616.js → 5616.js} +2 -2
  16. package/dist/mf/5625.js +1 -0
  17. package/dist/mf/5741.js +1 -0
  18. package/dist/mf/6082.js +1 -0
  19. package/dist/mf/6092.js +10 -0
  20. package/dist/mf/6124.js +1 -0
  21. package/dist/mf/6702.js +1 -0
  22. package/dist/mf/7285.js +1 -0
  23. package/dist/mf/{286.js → 7286.js} +3 -3
  24. package/dist/mf/7476.js +1 -0
  25. package/dist/mf/7493.js +6 -0
  26. package/dist/mf/7493.js.LICENSE.txt +13 -0
  27. package/dist/mf/8170.js +18 -0
  28. package/dist/mf/8473.js +10 -0
  29. package/dist/mf/{637.js → 8637.js} +3 -3
  30. package/dist/mf/8949.js +10 -0
  31. package/dist/mf/8978.js +33 -0
  32. package/dist/mf/{37.js → 9037.js} +3 -3
  33. package/dist/mf/9110.js +1 -0
  34. package/dist/mf/{755.js → 9430.js} +2 -2
  35. package/dist/mf/9666.js +10 -0
  36. package/dist/mf/9666.js.LICENSE.txt +9 -0
  37. package/dist/mf/9758.js +1 -0
  38. package/dist/mf/@mf-types/compiled-types/api/connectors/connectorAddMutation.d.ts +1 -0
  39. package/dist/mf/@mf-types/compiled-types/api/connectors/connectorCatalogQuery.d.ts +1 -0
  40. package/dist/mf/@mf-types/compiled-types/api/connectors/connectorDeleteMutation.d.ts +1 -0
  41. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroDetailQuery.d.ts +2 -0
  42. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroJobConfigQuery.d.ts +1 -0
  43. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroJobRunMutation.d.ts +4 -0
  44. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroJobSaveMutation.d.ts +5 -0
  45. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroListQuery.d.ts +2 -0
  46. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroRunMutation.d.ts +1 -0
  47. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroScheduleMutations.d.ts +21 -0
  48. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroSpreadsheetsQuery.d.ts +4 -0
  49. package/dist/mf/@mf-types/compiled-types/api/synchro/synchroToggleMutation.d.ts +4 -0
  50. package/dist/mf/@mf-types/compiled-types/api/synchro/types.d.ts +67 -0
  51. package/dist/mf/@mf-types/compiled-types/api/useApiSynchro.d.ts +6 -0
  52. package/dist/mf/@mf-types/compiled-types/components/InlineLoader.d.ts +4 -0
  53. package/dist/mf/@mf-types/compiled-types/components/connectors/connector-menu.component.d.ts +7 -0
  54. package/dist/mf/@mf-types/compiled-types/components/connectors/delete-active-connector-modal.d.ts +1 -0
  55. package/dist/mf/@mf-types/compiled-types/components/connectors/is-delete-confirm-input.d.ts +6 -0
  56. package/dist/mf/@mf-types/compiled-types/components/connectors/list.catalog.component.d.ts +1 -0
  57. package/dist/mf/@mf-types/compiled-types/components/synchro/inputs/InputDateBoundary.d.ts +12 -0
  58. package/dist/mf/@mf-types/compiled-types/components/synchro/inputs/InputGsheetsSelector.d.ts +11 -0
  59. package/dist/mf/@mf-types/compiled-types/components/synchro/synchro.dynamic-form.d.ts +29 -0
  60. package/dist/mf/@mf-types/compiled-types/components/synchro/synchro.functions.d.ts +7 -0
  61. package/dist/mf/@mf-types/compiled-types/components/synchro/synchro.history.d.ts +6 -0
  62. package/dist/mf/@mf-types/compiled-types/components/synchro/synchro.job-config-modal.d.ts +9 -0
  63. package/dist/mf/@mf-types/compiled-types/components/synchro/synchro.list.d.ts +8 -0
  64. package/dist/mf/@mf-types/compiled-types/components/synchro/synchro.schedule.d.ts +8 -0
  65. package/dist/mf/@mf-types/compiled-types/gen/IntegrationsApi.d.ts +120 -4
  66. package/dist/mf/@mf-types/compiled-types/hooks/useAppConfigConnectorSingle.d.ts +1 -1
  67. package/dist/mf/@mf-types/compiled-types/hooks/useAppConfigSynchro.d.ts +9 -0
  68. package/dist/mf/@mf-types/compiled-types/providersSynchro.d.ts +15 -0
  69. package/dist/mf/@mf-types/compiled-types/synchro.app.d.ts +1 -0
  70. package/dist/mf/@mf-types/compiled-types/synchro.d.ts +2 -0
  71. package/dist/mf/__federation_expose_connectors.js +2 -2
  72. package/dist/mf/__federation_expose_single_connector.js +2 -2
  73. package/dist/mf/__federation_expose_synchronisation.js +10 -0
  74. package/dist/mf/__federation_expose_synchronisation.js.LICENSE.txt +9 -0
  75. package/dist/mf/index.js +4 -5
  76. package/dist/mf/integrations_app.js +4 -5
  77. package/dist/mf/mf-manifest.json +133 -30
  78. package/dist/mf/mf-stats.json +188 -40
  79. package/package.json +7 -6
  80. package/dist/mf/124.js +0 -1
  81. package/dist/mf/170.js +0 -18
  82. package/dist/mf/285.js +0 -1
  83. package/dist/mf/447.js +0 -1
  84. package/dist/mf/475.js +0 -1
  85. package/dist/mf/476.js +0 -1
  86. package/dist/mf/600.js +0 -1
  87. package/dist/mf/625.js +0 -1
  88. package/dist/mf/666.js +0 -10
  89. package/dist/mf/702.js +0 -1
  90. package/dist/mf/711.js +0 -10
  91. package/dist/mf/741.js +0 -1
  92. package/dist/mf/857.js +0 -1
  93. package/dist/mf/949.js +0 -10
  94. package/dist/mf/978.js +0 -33
  95. package/dist/mf/@mf-types/connectors.d.ts +0 -2
  96. package/dist/mf/@mf-types/single-connector.d.ts +0 -2
  97. package/dist/mf/@mf-types.d.ts +0 -3
  98. package/dist/mf/@mf-types.zip +0 -0
  99. /package/dist/mf/{18.js.LICENSE.txt → 1018.js.LICENSE.txt} +0 -0
  100. /package/dist/mf/{235.js.LICENSE.txt → 1330.js.LICENSE.txt} +0 -0
  101. /package/dist/mf/{70.css → 2070.css} +0 -0
  102. /package/dist/mf/{70.js.LICENSE.txt → 2070.js.LICENSE.txt} +0 -0
  103. /package/dist/mf/{134.js.LICENSE.txt → 3134.js.LICENSE.txt} +0 -0
  104. /package/dist/mf/{330.js.LICENSE.txt → 3235.js.LICENSE.txt} +0 -0
  105. /package/dist/mf/{473.js.LICENSE.txt → 3711.js.LICENSE.txt} +0 -0
  106. /package/dist/mf/{756.js.LICENSE.txt → 4756.js.LICENSE.txt} +0 -0
  107. /package/dist/mf/{616.js.LICENSE.txt → 5616.js.LICENSE.txt} +0 -0
  108. /package/dist/mf/{666.js.LICENSE.txt → 6092.js.LICENSE.txt} +0 -0
  109. /package/dist/mf/{286.js.LICENSE.txt → 7286.js.LICENSE.txt} +0 -0
  110. /package/dist/mf/{170.js.LICENSE.txt → 8170.js.LICENSE.txt} +0 -0
  111. /package/dist/mf/{711.js.LICENSE.txt → 8473.js.LICENSE.txt} +0 -0
  112. /package/dist/mf/{637.js.LICENSE.txt → 8637.js.LICENSE.txt} +0 -0
  113. /package/dist/mf/{949.js.LICENSE.txt → 8949.js.LICENSE.txt} +0 -0
  114. /package/dist/mf/{978.js.LICENSE.txt → 8978.js.LICENSE.txt} +0 -0
  115. /package/dist/mf/{37.js.LICENSE.txt → 9037.js.LICENSE.txt} +0 -0
@@ -1,5 +1,5 @@
1
- /*! For license information please see 330.js.LICENSE.txt */
2
- "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["330"],{9698:function(__unused_webpack_module,exports){/**
1
+ /*! For license information please see 3235.js.LICENSE.txt */
2
+ "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["3235"],{9698:function(__unused_webpack_module,exports){/**
3
3
  * @license React
4
4
  * react-jsx-runtime.production.js
5
5
  *
@@ -1,5 +1,5 @@
1
- /*! For license information please see 473.js.LICENSE.txt */
2
- "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["473"],{9698:function(__unused_webpack_module,exports){/**
1
+ /*! For license information please see 3711.js.LICENSE.txt */
2
+ "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["3711"],{9698:function(__unused_webpack_module,exports){/**
3
3
  * @license React
4
4
  * react-jsx-runtime.production.js
5
5
  *
@@ -0,0 +1 @@
1
+ "use strict";(globalThis["chunk_integrations_app"]=globalThis["chunk_integrations_app"]||[]).push([["4447"],{610:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){__webpack_require__.r(__webpack_exports__);__webpack_require__.d(__webpack_exports__,{guard:()=>guard,camel:()=>camel,isInt:()=>isInt,sleep:()=>sleep,toFloat:()=>toFloat,get:()=>object_get,compose:()=>compose,sort:()=>sort,cluster:()=>cluster,partob:()=>partob,template:()=>template,isDate:()=>isDate,alphabetical:()=>alphabetical,draw:()=>draw,isFunction:()=>isFunction,omit:()=>omit,debounce:()=>debounce,flat:()=>flat,fork:()=>fork,isArray:()=>isArray,replace:()=>replace,retry:()=>retry,proxied:()=>proxied,shuffle:()=>shuffle,list:()=>list,mapEntries:()=>mapEntries,min:()=>array_min,isFloat:()=>isFloat,objectify:()=>objectify,keys:()=>object_keys,toggle:()=>toggle,diff:()=>diff,mapKeys:()=>mapKeys,sift:()=>sift,range:()=>range,counting:()=>counting,intersects:()=>intersects,isString:()=>isString,dash:()=>dash,pick:()=>pick,try:()=>tryit,upperize:()=>upperize,boil:()=>boil,throttle:()=>throttle,shift:()=>shift,isPromise:()=>isPromise,max:()=>array_max,defer:()=>defer,first:()=>array_first,random:()=>random,sum:()=>sum,inRange:()=>inRange,tryit:()=>tryit,zip:()=>zip,isPrimitive:()=>isPrimitive,partial:()=>partial,group:()=>group,all:()=>async_all,last:()=>array_last,mapValues:()=>mapValues,title:()=>title,isEmpty:()=>isEmpty,isEqual:()=>isEqual,snake:()=>snake,chain:()=>chain,memo:()=>memo,toInt:()=>toInt,isNumber:()=>isNumber,reduce:()=>reduce,clone:()=>clone,pascal:()=>pascal,unique:()=>unique,replaceOrAppend:()=>replaceOrAppend,map:()=>map,construct:()=>construct,zipToObject:()=>zipToObject,trim:()=>trim,callable:()=>callable,lowerize:()=>lowerize,assign:()=>object_assign,isObject:()=>isObject,select:()=>array_select,set:()=>set,capitalize:()=>capitalize,invert:()=>invert,isSymbol:()=>isSymbol,merge:()=>merge,parallel:()=>parallel,series:()=>series,iterate:()=>iterate,crush:()=>crush,uid:()=>uid,shake:()=>shake,listify:()=>listify});const isSymbol=value=>!!value&&value.constructor===Symbol;const isArray=Array.isArray;const isObject=value=>!!value&&value.constructor===Object;const isPrimitive=value=>null==value||"object"!=typeof value&&"function"!=typeof value;const isFunction=value=>!!(value&&value.constructor&&value.call&&value.apply);const isString=value=>"string"==typeof value||value instanceof String;const isInt=value=>isNumber(value)&&value%1===0;const isFloat=value=>isNumber(value)&&value%1!==0;const isNumber=value=>{try{return Number(value)===value}catch{return false}};const isDate=value=>"[object Date]"===Object.prototype.toString.call(value);const isPromise=value=>{if(!value)return false;if(!value.then)return false;if(!isFunction(value.then))return false;return true};const isEmpty=value=>{if(true===value||false===value)return true;if(null==value)return true;if(isNumber(value))return 0===value;if(isDate(value))return isNaN(value.getTime());if(isFunction(value))return false;if(isSymbol(value))return false;const length=value.length;if(isNumber(length))return 0===length;const size=value.size;if(isNumber(size))return 0===size;const keys=Object.keys(value).length;return 0===keys};const isEqual=(x,y)=>{if(Object.is(x,y))return true;if(x instanceof Date&&y instanceof Date)return x.getTime()===y.getTime();if(x instanceof RegExp&&y instanceof RegExp)return x.toString()===y.toString();if("object"!=typeof x||null===x||"object"!=typeof y||null===y)return false;const keysX=Reflect.ownKeys(x);const keysY=Reflect.ownKeys(y);if(keysX.length!==keysY.length)return false;for(let i=0;i<keysX.length;i++){if(!Reflect.has(y,keysX[i]))return false;if(!isEqual(x[keysX[i]],y[keysX[i]]))return false}return true};const group=(array,getGroupId)=>array.reduce((acc,item)=>{const groupId=getGroupId(item);if(!acc[groupId])acc[groupId]=[];acc[groupId].push(item);return acc},{});function zip(...arrays){if(!arrays||!arrays.length)return[];return new Array(Math.max(...arrays.map(({length})=>length))).fill([]).map((_,idx)=>arrays.map(array=>array[idx]))}function zipToObject(keys,values){if(!keys||!keys.length)return{};const getValue=isFunction(values)?values:isArray(values)?(_k,i)=>values[i]:(_k,_i)=>values;return keys.reduce((acc,key,idx)=>{acc[key]=getValue(key,idx);return acc},{})}const boil=(array,compareFunc)=>{if(!array||(array.length??0)===0)return null;return array.reduce(compareFunc)};function sum(array,fn){return(array||[]).reduce((acc,item)=>acc+(fn?fn(item):item),0)}const array_first=(array,defaultValue)=>array?.length>0?array[0]:defaultValue;const array_last=(array,defaultValue)=>array?.length>0?array[array.length-1]:defaultValue;const sort=(array,getter,desc=false)=>{if(!array)return[];const asc=(a,b)=>getter(a)-getter(b);const dsc=(a,b)=>getter(b)-getter(a);return array.slice().sort(true===desc?dsc:asc)};const alphabetical=(array,getter,dir="asc")=>{if(!array)return[];const asc=(a,b)=>`${getter(a)}`.localeCompare(getter(b));const dsc=(a,b)=>`${getter(b)}`.localeCompare(getter(a));return array.slice().sort("desc"===dir?dsc:asc)};const counting=(list2,identity)=>{if(!list2)return{};return list2.reduce((acc,item)=>{const id=identity(item);acc[id]=(acc[id]??0)+1;return acc},{})};const replace=(list2,newItem,match)=>{if(!list2)return[];if(void 0===newItem)return[...list2];for(let idx=0;idx<list2.length;idx++){const item=list2[idx];if(match(item,idx))return[...list2.slice(0,idx),newItem,...list2.slice(idx+1,list2.length)]}return[...list2]};const objectify=(array,getKey,getValue=item=>item)=>array.reduce((acc,item)=>{acc[getKey(item)]=getValue(item);return acc},{});const array_select=(array,mapper,condition)=>{if(!array)return[];return array.reduce((acc,item,index)=>{if(!condition(item,index))return acc;acc.push(mapper(item,index));return acc},[])};function array_max(array,getter){const get=getter??(v=>v);return boil(array,(a,b)=>get(a)>get(b)?a:b)}function array_min(array,getter){const get=getter??(v=>v);return boil(array,(a,b)=>get(a)<get(b)?a:b)}const cluster=(list2,size=2)=>{const clusterCount=Math.ceil(list2.length/size);return new Array(clusterCount).fill(null).map((_c,i)=>list2.slice(i*size,i*size+size))};const unique=(array,toKey)=>{const valueMap=array.reduce((acc,item)=>{const key=toKey?toKey(item):item;if(acc[key])return acc;acc[key]=item;return acc},{});return Object.values(valueMap)};function*range(startOrLength,end,valueOrMapper=i=>i,step=1){const mapper=isFunction(valueOrMapper)?valueOrMapper:()=>valueOrMapper;const start=end?startOrLength:0;const final=end??startOrLength;for(let i=start;i<=final;i+=step){yield mapper(i);if(i+step>final)break}}const list=(startOrLength,end,valueOrMapper,step)=>Array.from(range(startOrLength,end,valueOrMapper,step));const flat=lists=>lists.reduce((acc,list2)=>{acc.push(...list2);return acc},[]);const intersects=(listA,listB,identity)=>{if(!listA||!listB)return false;const ident=identity??(x=>x);const dictB=listB.reduce((acc,item)=>{acc[ident(item)]=true;return acc},{});return listA.some(value=>dictB[ident(value)])};const fork=(list2,condition)=>{if(!list2)return[[],[]];return list2.reduce((acc,item)=>{const[a,b]=acc;if(condition(item))return[[...a,item],b];return[a,[...b,item]]},[[],[]])};const merge=(root,others,matcher)=>{if(!others&&!root)return[];if(!others)return root;if(!root)return[];if(!matcher)return root;return root.reduce((acc,r)=>{const matched=others.find(o=>matcher(r)===matcher(o));if(matched)acc.push(matched);else acc.push(r);return acc},[])};const replaceOrAppend=(list2,newItem,match)=>{if(!list2&&!newItem)return[];if(!newItem)return[...list2];if(!list2)return[newItem];for(let idx=0;idx<list2.length;idx++){const item=list2[idx];if(match(item,idx))return[...list2.slice(0,idx),newItem,...list2.slice(idx+1,list2.length)]}return[...list2,newItem]};const toggle=(list2,item,toKey,options)=>{if(!list2&&!item)return[];if(!list2)return[item];if(!item)return[...list2];const matcher=toKey?(x,idx)=>toKey(x,idx)===toKey(item,idx):x=>x===item;const existing=list2.find(matcher);if(existing)return list2.filter((x,idx)=>!matcher(x,idx));const strategy=options?.strategy??"append";if("append"===strategy)return[...list2,item];return[item,...list2]};const sift=list2=>list2?.filter(x=>!!x)??[];const iterate=(count,func,initValue)=>{let value=initValue;for(let i=1;i<=count;i++)value=func(value,i);return value};const diff=(root,other,identity=t=>t)=>{if(!root?.length&&!other?.length)return[];if(root?.length===void 0)return[...other];if(!other?.length)return[...root];const bKeys=other.reduce((acc,item)=>{acc[identity(item)]=true;return acc},{});return root.filter(a=>!bKeys[identity(a)])};function shift(arr,n){if(0===arr.length)return arr;const shiftNumber=n%arr.length;if(0===shiftNumber)return arr;return[...arr.slice(-shiftNumber,arr.length),...arr.slice(0,-shiftNumber)]}const reduce=async(array,asyncReducer,initValue)=>{const initProvided=void 0!==initValue;if(!initProvided&&array?.length<1)throw new Error("Cannot reduce empty array with no init value");const iter=initProvided?array:array.slice(1);let value=initProvided?initValue:array[0];for(const[i,item]of iter.entries())value=await asyncReducer(value,item,i);return value};const map=async(array,asyncMapFunc)=>{if(!array)return[];let result=[];let index=0;for(const value of array){const newValue=await asyncMapFunc(value,index++);result.push(newValue)}return result};const defer=async func=>{const callbacks=[];const register=(fn,options)=>callbacks.push({fn,rethrow:options?.rethrow??false});const[err,response]=await tryit(func)(register);for(const{fn,rethrow}of callbacks){const[rethrown]=await tryit(fn)(err);if(rethrown&&rethrow)throw rethrown}if(err)throw err;return response};class AggregateError extends Error{constructor(errors=[]){super();const name=errors.find(e=>e.name)?.name??"";this.name=`AggregateError(${name}...)`;this.message=`AggregateError with ${errors.length} errors`;this.stack=errors.find(e=>e.stack)?.stack??this.stack;this.errors=errors}}const parallel=async(limit,array,func)=>{const work=array.map((item,index)=>({index,item}));const processor=async res=>{const results2=[];while(true){const next=work.pop();if(!next)return res(results2);const[error,result]=await tryit(func)(next.item);results2.push({error,result,index:next.index})}};const queues=list(1,limit).map(()=>new Promise(processor));const itemResults=await Promise.all(queues);const[errors,results]=fork(sort(itemResults.flat(),r=>r.index),x=>!!x.error);if(errors.length>0)throw new AggregateError(errors.map(error=>error.error));return results.map(r=>r.result)};async function async_all(promises){const entries=isArray(promises)?promises.map(p=>[null,p]):Object.entries(promises);const results=await Promise.all(entries.map(([key,value])=>value.then(result=>({result,exc:null,key})).catch(exc=>({result:null,exc,key}))));const exceptions=results.filter(r=>r.exc);if(exceptions.length>0)throw new AggregateError(exceptions.map(e=>e.exc));if(isArray(promises))return results.map(r=>r.result);return results.reduce((acc,item)=>({...acc,[item.key]:item.result}),{})}const retry=async(options,func)=>{const times=options?.times??3;const delay=options?.delay;const backoff=options?.backoff??null;for(const i of range(1,times)){const[err,result]=await tryit(func)(err2=>{throw{_exited:err2}});if(!err)return result;if(err._exited)throw err._exited;if(i===times)throw err;if(delay)await sleep(delay);if(backoff)await sleep(backoff(i))}};const sleep=milliseconds=>new Promise(res=>setTimeout(res,milliseconds));const tryit=func=>(...args)=>{try{const result=func(...args);if(isPromise(result))return result.then(value=>[void 0,value]).catch(err=>[err,void 0]);return[void 0,result]}catch(err){return[err,void 0]}};const guard=(func,shouldGuard)=>{const _guard=err=>{if(shouldGuard&&!shouldGuard(err))throw err};const isPromise2=result=>result instanceof Promise;try{const result=func();return isPromise2(result)?result.catch(_guard):result}catch(err){return _guard(err)}};function chain(...funcs){return(...args)=>funcs.slice(1).reduce((acc,fn)=>fn(acc),funcs[0](...args))}function compose(...funcs){return funcs.reverse().reduce((acc,fn)=>fn(acc))}const partial=(fn,...args)=>(...rest)=>fn(...args,...rest);const partob=(fn,argobj)=>restobj=>fn({...argobj,...restobj});const proxied=handler=>new Proxy({},{get:(target,propertyName)=>handler(propertyName)});const memoize=(cache,func,keyFunc,ttl)=>function(...args){const key=keyFunc?keyFunc(...args):JSON.stringify({args});const existing=cache[key];if(void 0!==existing){if(!existing.exp)return existing.value;if(existing.exp>new Date().getTime())return existing.value}const result=func(...args);cache[key]={exp:ttl?new Date().getTime()+ttl:null,value:result};return result};const memo=(func,options={})=>memoize({},func,options.key??null,options.ttl??null);const debounce=({delay},func)=>{let timer;let active=true;const debounced=(...args)=>{if(active){clearTimeout(timer);timer=setTimeout(()=>{active&&func(...args);timer=void 0},delay)}else func(...args)};debounced.isPending=()=>void 0!==timer;debounced.cancel=()=>{active=false};debounced.flush=(...args)=>func(...args);return debounced};const throttle=({interval},func)=>{let ready=true;let timer;const throttled=(...args)=>{if(!ready)return;func(...args);ready=false;timer=setTimeout(()=>{ready=true;timer=void 0},interval)};throttled.isThrottled=()=>void 0!==timer;return throttled};const callable=(obj,fn)=>{const FUNC=()=>{};return new Proxy(Object.assign(FUNC,obj),{get:(target,key)=>target[key],set:(target,key,value)=>{target[key]=value;return true},apply:(target,self,args)=>fn(Object.assign({},target))(...args)})};function inRange(number,start,end){const isTypeSafe="number"==typeof number&&"number"==typeof start&&(void 0===end||"number"==typeof end);if(!isTypeSafe)return false;if(void 0===end){end=start;start=0}return number>=Math.min(start,end)&&number<Math.max(start,end)}const toFloat=(value,defaultValue)=>{const def=void 0===defaultValue?0:defaultValue;if(null==value)return def;const result=parseFloat(value);return isNaN(result)?def:result};const toInt=(value,defaultValue)=>{const def=void 0===defaultValue?0:defaultValue;if(null==value)return def;const result=parseInt(value);return isNaN(result)?def:result};const shake=(obj,filter=x=>void 0===x)=>{if(!obj)return{};const keys2=Object.keys(obj);return keys2.reduce((acc,key)=>{if(filter(obj[key]))return acc;acc[key]=obj[key];return acc},{})};const mapKeys=(obj,mapFunc)=>{const keys2=Object.keys(obj);return keys2.reduce((acc,key)=>{acc[mapFunc(key,obj[key])]=obj[key];return acc},{})};const mapValues=(obj,mapFunc)=>{const keys2=Object.keys(obj);return keys2.reduce((acc,key)=>{acc[key]=mapFunc(obj[key],key);return acc},{})};const mapEntries=(obj,toEntry)=>{if(!obj)return{};return Object.entries(obj).reduce((acc,[key,value])=>{const[newKey,newValue]=toEntry(key,value);acc[newKey]=newValue;return acc},{})};const invert=obj=>{if(!obj)return{};const keys2=Object.keys(obj);return keys2.reduce((acc,key)=>{acc[obj[key]]=key;return acc},{})};const lowerize=obj=>mapKeys(obj,k=>k.toLowerCase());const upperize=obj=>mapKeys(obj,k=>k.toUpperCase());const clone=obj=>{if(isPrimitive(obj))return obj;if("function"==typeof obj)return obj.bind({});const newObj=new obj.constructor;Object.getOwnPropertyNames(obj).forEach(prop=>{newObj[prop]=obj[prop]});return newObj};const listify=(obj,toItem)=>{if(!obj)return[];const entries=Object.entries(obj);if(0===entries.length)return[];return entries.reduce((acc,entry)=>{acc.push(toItem(entry[0],entry[1]));return acc},[])};const pick=(obj,keys2)=>{if(!obj)return{};return keys2.reduce((acc,key)=>{if(Object.prototype.hasOwnProperty.call(obj,key))acc[key]=obj[key];return acc},{})};const omit=(obj,keys2)=>{if(!obj)return{};if(!keys2||0===keys2.length)return obj;return keys2.reduce((acc,key)=>{delete acc[key];return acc},{...obj})};const object_get=(value,path,defaultValue)=>{const segments=path.split(/[\.\[\]]/g);let current=value;for(const key of segments){if(null===current)return defaultValue;if(void 0===current)return defaultValue;const dequoted=key.replace(/['"]/g,"");if(""!==dequoted.trim())current=current[dequoted]}if(void 0===current)return defaultValue;return current};const set=(initial,path,value)=>{if(!initial)return{};if(!path||void 0===value)return initial;const segments=path.split(/[\.\[\]]/g).filter(x=>!!x.trim());const _set=node=>{if(segments.length>1){const key=segments.shift();const nextIsNum=/^\d+$/.test(segments[0]);node[key]=void 0===node[key]?nextIsNum?[]:{}:node[key];_set(node[key])}else node[segments[0]]=value};const cloned=clone(initial);_set(cloned);return cloned};const object_assign=(initial,override)=>{if(!initial||!override)return initial??override??{};return Object.entries({...initial,...override}).reduce((acc,[key,value])=>({...acc,[key]:(()=>{if(isObject(initial[key]))return object_assign(initial[key],value);return value})()}),{})};const object_keys=value=>{if(!value)return[];const getKeys=(nested,paths)=>{if(isObject(nested))return Object.entries(nested).flatMap(([k,v])=>getKeys(v,[...paths,k]));if(isArray(nested))return nested.flatMap((item,i)=>getKeys(item,[...paths,`${i}`]));return[paths.join(".")]};return getKeys(value,[])};const crush=value=>{if(!value)return{};return objectify(object_keys(value),k=>k,k=>object_get(value,k))};const construct=obj=>{if(!obj)return{};return Object.keys(obj).reduce((acc,path)=>set(acc,path,obj[path]),{})};const random=(min,max)=>Math.floor(Math.random()*(max-min+1)+min);const draw=array=>{const max=array.length;if(0===max)return null;const index=random(0,max-1);return array[index]};const shuffle=array=>array.map(a=>({rand:Math.random(),value:a})).sort((a,b)=>a.rand-b.rand).map(a=>a.value);const uid=(length,specials="")=>{const characters="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"+specials;return iterate(length,acc=>acc+characters.charAt(random(0,characters.length-1)),"")};const series=(items,toKey=item=>`${item}`)=>{const{indexesByKey,itemsByIndex}=items.reduce((acc,item,idx)=>({indexesByKey:{...acc.indexesByKey,[toKey(item)]:idx},itemsByIndex:{...acc.itemsByIndex,[idx]:item}}),{indexesByKey:{},itemsByIndex:{}});const min=(a,b)=>indexesByKey[toKey(a)]<indexesByKey[toKey(b)]?a:b;const max=(a,b)=>indexesByKey[toKey(a)]>indexesByKey[toKey(b)]?a:b;const first=()=>itemsByIndex[0];const last=()=>itemsByIndex[items.length-1];const next=(current,defaultValue)=>itemsByIndex[indexesByKey[toKey(current)]+1]??defaultValue??first();const previous=(current,defaultValue)=>itemsByIndex[indexesByKey[toKey(current)]-1]??defaultValue??last();const spin=(current,num)=>{if(0===num)return current;const abs=Math.abs(num);const rel=abs>items.length?abs%items.length:abs;return list(0,rel-1).reduce(acc=>num>0?next(acc):previous(acc),current)};return{min,max,first,last,next,previous,spin}};const capitalize=str=>{if(!str||0===str.length)return"";const lower=str.toLowerCase();return lower.substring(0,1).toUpperCase()+lower.substring(1,lower.length)};const camel=str=>{const parts=str?.replace(/([A-Z])+/g,capitalize)?.split(/(?=[A-Z])|[\.\-\s_]/).map(x=>x.toLowerCase())??[];if(0===parts.length)return"";if(1===parts.length)return parts[0];return parts.reduce((acc,part)=>`${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}`)};const snake=(str,options)=>{const parts=str?.replace(/([A-Z])+/g,capitalize).split(/(?=[A-Z])|[\.\-\s_]/).map(x=>x.toLowerCase())??[];if(0===parts.length)return"";if(1===parts.length)return parts[0];const result=parts.reduce((acc,part)=>`${acc}_${part.toLowerCase()}`);return options?.splitOnNumber===false?result:result.replace(/([A-Za-z]{1}[0-9]{1})/,val=>`${val[0]}_${val[1]}`)};const dash=str=>{const parts=str?.replace(/([A-Z])+/g,capitalize)?.split(/(?=[A-Z])|[\.\-\s_]/).map(x=>x.toLowerCase())??[];if(0===parts.length)return"";if(1===parts.length)return parts[0];return parts.reduce((acc,part)=>`${acc}-${part.toLowerCase()}`)};const pascal=str=>{const parts=str?.split(/[\.\-\s_]/).map(x=>x.toLowerCase())??[];if(0===parts.length)return"";return parts.map(str2=>str2.charAt(0).toUpperCase()+str2.slice(1)).join("")};const title=str=>{if(!str)return"";return str.split(/(?=[A-Z])|[\.\-\s_]/).map(s=>s.trim()).filter(s=>!!s).map(s=>capitalize(s.toLowerCase())).join(" ")};const template=(str,data,regex=/\{\{(.+?)\}\}/g)=>Array.from(str.matchAll(regex)).reduce((acc,match)=>acc.replace(match[0],data[match[1]]),str);const trim=(str,charsToTrim=" ")=>{if(!str)return"";const toTrim=charsToTrim.replace(/[\W]{1}/g,"\\$&");const regex=new RegExp(`^[${toTrim}]+|[${toTrim}]+$`,"g");return str.replace(regex,"")}}}]);