UNPKG

@osmium/iterate

Version:

A powerful, type-safe iteration library for JavaScript and TypeScript with advanced mapping, parallel processing, and flow control features

1 lines 14.5 kB
(()=>{"use strict";var t={7:(t,s)=>{function e(t){return"function"==typeof t}function i(t){return Array.isArray(t)}function n(t){return"[object Object]"===Object.prototype.toString.call(t)}function a(t){return"string"==typeof t||"[object String]"===Object.prototype.toString.call(t)}function r(t){return("number"==typeof t||"[object Number]"===Object.prototype.toString.call(t))&&isFinite(t)&&!isNaN(t)}function o(t){return Number.isSafeInteger(t)}function c(t){return"[object RegExp]"===Object.prototype.toString.call(t)}function h(t){return t instanceof Map}function u(t){return t instanceof Set}function p(t){return t instanceof WeakSet}function l(t){return t instanceof WeakMap}function y(t){return"[object Date]"===Object.prototype.toString.call(t)&&!isNaN(t.getTime())}function f(t){return t instanceof Error}function b(t){if(!a(t))return!1;try{const s=JSON.parse(t);return!!s&&"object"==typeof s}catch(t){}return!1}function m(t){return a(t)&&/^(?:\{[\dA-F]{8}-[\dA-F]{4}-4[\dA-F]{3}-[89AB][\dA-F]{3}-[\dA-F]{12}}|[\dA-F]{8}-[\dA-F]{4}-4[\dA-F]{3}-[89AB][\dA-F]{3}-[\dA-F]{12})$/i.test(t)}function g(t){return a(t)&&/^(?:\{[\dA-F]{8}-[\dA-F]{4}-[\dA-F]{4}-[\dA-F]{4}-[\dA-F]{12}}|[\dA-F]{8}-[\dA-F]{4}-[\dA-F]{4}-[\dA-F]{4}-[\dA-F]{12})$/i.test(t)}Object.defineProperty(s,"__esModule",{value:!0}),s.isNull=function(t){return null===t},s.isUndefined=function(t){return void 0===t},s.isFunction=e,s.isAsyncFunction=function(t,s){if("[object AsyncFunction]"===Object.prototype.toString.call(t))return!0;if(t&&t.constructor&&("AsyncFunction"===t.constructor.name||"Function"===t.constructor.name)){if(s&&"function"==typeof t.toString){let e=s;if("string"==typeof s)try{e=new RegExp(s)}catch{e=void 0}if(e&&e.test(t.toString()))return!0}if("function"==typeof t.toString&&/__awaiter|return _a.sent\(/.test(t.toString()))return!0}return!1},s.isArray=i,s.isArrayEmpty=function(t){return i(t)&&0===t.length},s.isObject=n,s.isObjectEmpty=function(t){return n(t)&&0===Object.keys(t).length},s.isString=a,s.isBoolean=function(t){return"boolean"==typeof t||"[object Boolean]"===Object.prototype.toString.call(t)},s.isNumber=r,s.isNumeric=function(t){return("number"==typeof t||"[object Number]"===Object.prototype.toString.call(t))&&!isNaN(t)},s.isInteger=o,s.isFloat=function(t){return r(t)&&!o(t)},s.isPositiveInteger=function(t){return o(t)&&t>=0},s.isPositiveNumber=function(t){return r(t)&&t>=0},s.isSymbol=function(t,s){return"symbol"==typeof t&&(!s||t.description===s)},s.isRegExp=c,s.isMap=h,s.isSet=u,s.isWeakSet=p,s.isWeakMap=l,s.isPromise=function(t){return!!t&&"function"==typeof t.then&&"function"==typeof t.catch},s.isDate=y,s.isError=f,s.isPlainObject=function(t){if(!n(t))return!1;const s=Object.getPrototypeOf(t);return s===Object.prototype||null===s},s.isTypedArray=function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},s.isNilOrEmpty=function(t){return null==t||""===t},s.isEmpty=function(t){return i(t)||a(t)?0===t.length:h(t)||u(t)?0===t.size:!!n(t)&&0===Object.keys(t).length},s.isIterable=function(t){return null!=t&&"object"==typeof t&&(i(t)?t.length>0:!(!h(t)&&!u(t)&&(c(t)||g(t)||m(t)||b(t)||0===Object.keys(t).length||Object.getOwnPropertySymbols&&0===Object.keys(t).length&&Object.getOwnPropertySymbols(t).length>0)))},s.isAsyncIterable=function(t){return null!=t&&"function"==typeof t[Symbol.asyncIterator]},s.isJSON=b,s.isGUIDv4=m,s.isGUID=g,s.isNativeObject=function(t){return n(t)&&!i(t)&&!e(t)&&!y(t)&&!c(t)&&!f(t)&&!h(t)&&!u(t)&&!l(t)&&!p(t)}}},s={};function e(i){var n=s[i];if(void 0!==n)return n.exports;var a=s[i]={exports:{}};return t[i](a,a.exports,e),a.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.Iterate=void 0,t.iterateSync=a,t.iterateAsync=function(t,s,e,i){return n.createInstance().iterateAsync(t,s,e,i,!1)},t.iterate=function(t,e,i,a){return(0,s.isAsyncFunction)(e)?n.createInstance().iterateAsync(t,e,i,a,!1):n.createInstance().iterateSync(t,e,i,a,!1)},t.iterateKeysSync=r,t.iterateKeysAsync=function(t,s,e,i){return n.createInstance().iterateAsync(t,s,e,i,!0)},t.iterateKeys=function(t,e,i,a){return(0,s.isAsyncFunction)(e)?n.createInstance().iterateAsync(t,e,i,a,!0):n.createInstance().iterateSync(t,e,i,a,!0)},t.iterateParallel=o,t.iterateKeysParallel=async function(t,s,e,i){return o(t,s,e,i,!0)},t.seriesPageableRange=function(t,s,e){const i=s-t;return r(Math.ceil(i/e),(i,n,a)=>{const r=t+e*i;return r+e>=s?r+e===s?(a.getStates().map.push([r,s-1]),[s,s]):[r,s]:[r,r+e-1]},[])},t.iterateParallelLimit=async function(t,s,e,i=!1){const r=n.createInstance(),o=r.valuesLength(s);if(!o)return;const c=Math.ceil(o/t);for(let n=0;n<c;n++){const c=a(t,(a,c,h)=>{const u=n*t+c;if(u>=o)return h.break();const p=r.getByIndex(u,s);return p?(async()=>i?e(p.idx,p.value,h):e(p.value,p.idx,h))():void 0},[]);await Promise.all(c)}};const s=e(7);class n{states;static createInstance(){return new n}async iterateAsync(t,s,e,i,a){return this.states=n.States.createInstance({isAsync:!0,values:t,cb:s,map:e,mapUndefined:i,iterateKeys:a}),this.resolveTypes(this.states.values,{isNulled:()=>{},isArray:()=>this.iterateArrayLikeAsync(),isSet:()=>this.iterateArrayLikeAsync(),isMap:()=>this.iterateMapAsync(),isNumber:()=>this.iterateNumberAsync(),isTrue:()=>this.iterateTrueAsync(),isString:()=>this.iterateStringAsync(),isObject:()=>this.iterateObjectAsync(),isUnknown:()=>{}})}iterateSync(t,s,e,i,a){return this.states=n.States.createInstance({isAsync:!1,values:t,cb:s,map:e,mapUndefined:i,iterateKeys:a}),this.resolveTypes(this.states.values,{isNulled:()=>{},isArray:()=>this.iterateArrayLikeSync(),isSet:()=>this.iterateArrayLikeSync(),isMap:()=>this.iterateMapSync(),isNumber:()=>this.iterateNumberSync(),isTrue:()=>this.iterateTrueSync(),isString:()=>this.iterateStringSync(),isObject:()=>this.iterateObjectSync(),isUnknown:()=>{}})}valuesLength(t){return this.resolveTypes(t,{isNulled:()=>0,isArray:t=>t.length,isSet:t=>t.size,isMap:t=>t.size,isNumber:t=>t,isTrue:()=>0,isString:t=>t.length,isObject:t=>Object.keys(t).length,isUnknown:()=>0})}getByIndex(t,s){return this.resolveTypes(s,{isNulled:()=>null,isArray:s=>t<0||t>=s.length?null:{idx:t,value:s[t]},isSet:s=>{const e=[...s];return t<0||t>=e.length?null:{idx:t,value:e[t]}},isMap:s=>{const e=[...s.keys()];if(t<0||t>=e.length)return null;const i=e[t];return{idx:i,value:s.get(i)}},isNumber:()=>({idx:t,value:t+1}),isTrue:()=>null,isString:s=>t<0||t>=s.length?null:{idx:t,value:s[t]},isObject:s=>{const e=Object.keys(s);if(t<0||t>=e.length)return null;const i=e[t];return{idx:i,value:s[i]}},isUnknown:()=>null})}resolveTypes(t,e){return(0,s.isUndefined)(t)||(0,s.isNull)(t)||!1===t||Number.isNaN(t)?e.isNulled(t):(0,s.isArray)(t)?e.isArray(t):(0,s.isSet)(t)?e.isSet(t):(0,s.isMap)(t)?e.isMap(t):(0,s.isNumeric)(t)?e.isNumber(t):!0===t?e.isTrue(t):(0,s.isString)(t)?e.isString(t):(0,s.isObject)(t)?e.isObject(t):e.isUnknown(t)}iterateArrayLikeSync(){if(!this.states)throw new Error("States not initialized");const t=[...this.states.values.values()];for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(n.Row.processIterationSync(this.states,t[this.states.position],this.states.position),this.states.break)return this.states.map;return this.states.map}async iterateArrayLikeAsync(){if(!this.states)throw new Error("States not initialized");const t=[...this.states.values.values()];for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(await n.Row.processIterationAsync(this.states,t[this.states.position],this.states.position),this.states.break)return this.states.map;return this.states.map}iterateMapSync(){if(!this.states)throw new Error("States not initialized");const t=[...this.states.values.entries()];for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(n.Row.processIterationSync(this.states,t[this.states.position][1],t[this.states.position][0]),this.states.break)return this.states.map;return this.states.map}async iterateMapAsync(){if(!this.states)throw new Error("States not initialized");const t=[...this.states.values.entries()];for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(await n.Row.processIterationAsync(this.states,t[this.states.position][1],t[this.states.position][0]),this.states.break)return this.states.map;return this.states.map}iterateObjectSync(){if(!this.states)throw new Error("States not initialized");if(this.states.values?.[Symbol.iterator]){const t=[...[...this.states.values].entries()];for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(n.Row.processIterationSync(this.states,t[this.states.position][1],t[this.states.position][0]),this.states.break)return this.states.map;return this.states.map}const t=Object.entries(this.states.values);for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(n.Row.processIterationSync(this.states,t[this.states.position][1],t[this.states.position][0]),this.states.break)return this.states.map;return this.states.map}async iterateObjectAsync(){if(!this.states)throw new Error("States not initialized");if(this.states.values?.[Symbol.iterator]){const t=[...[...this.states.values].entries()];for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(await n.Row.processIterationAsync(this.states,t[this.states.position][1],t[this.states.position][0]),this.states.break)return this.states.map;return this.states.map}const t=Object.entries(this.states.values);for(this.states.length=t.length,this.states.position=0;this.states.position<t.length;this.states.position++)if(await n.Row.processIterationAsync(this.states,t[this.states.position][1],t[this.states.position][0]),this.states.break)return this.states.map;return this.states.map}iterateNumberSync(){if(!this.states)throw new Error("States not initialized");const t=this.states.values;for(this.states.length=t+1,this.states.position=0;this.states.position<t;this.states.position++)if(n.Row.processIterationSync(this.states,this.states.position+1,this.states.position),this.states.break)return this.states.map;return this.states.map}async iterateNumberAsync(){if(!this.states)throw new Error("States not initialized");const t=this.states.values;for(this.states.length=t+1,this.states.position=0;this.states.position<t;this.states.position++)if(await n.Row.processIterationAsync(this.states,this.states.position+1,this.states.position),this.states.break)return this.states.map;return this.states.map}iterateStringSync(){if(!this.states)throw new Error("States not initialized");const t=this.states.values;for(this.states.length=t.length,this.states.position=0;this.states.position<this.states.length;this.states.position++)if(n.Row.processIterationSync(this.states,t[this.states.position],this.states.position),this.states.break)return this.states.map;return this.states.map}async iterateStringAsync(){if(!this.states)throw new Error("States not initialized");const t=this.states.values;for(this.states.length=t.length,this.states.position=0;this.states.position<this.states.length;this.states.position++)if(await n.Row.processIterationAsync(this.states,t[this.states.position],this.states.position),this.states.break)return this.states.map;return this.states.map}iterateTrueSync(){if(!this.states)throw new Error("States not initialized");let t=0;for(this.states.length=1/0;;){if(this.states.position=t,n.Row.processIterationSync(this.states,t+1,t),this.states.break)return this.states.map;if(t++,t>Number.MAX_SAFE_INTEGER-1)throw new Error("Infinite iteration detected - no break condition found")}}async iterateTrueAsync(){if(!this.states)throw new Error("States not initialized");let t=0;for(this.states.length=1/0;;){if(this.states.position=t,await n.Row.processIterationAsync(this.states,t+1,t),this.states.break)return this.states.map;if(t++,t>Number.MAX_SAFE_INTEGER-1)throw new Error("Infinite iteration detected - no break condition found")}}}function a(t,s,e,i){return n.createInstance().iterateSync(t,s,e,i,!1)}function r(t,s,e,i){return n.createInstance().iterateSync(t,s,e,i,!0)}async function o(t,s,e,i,n=!1){const r={};let o=0;const c=a(t,(t,e,i)=>new Promise(async a=>{const c=o;o++;const h=i.key,u=n?await s(e,t,i):await s(t,e,i);r[c]={val:u,key:i.mapKey},i.mapKey=h,a(c)}),[]);return await Promise.all(c),a(r,(t,s,e)=>(e.key(t.key),t.val),e,i)}t.Iterate=n,function(t){class s{static createInstance(t){return new s(t)}row;constructor(t){this.row=t}get length(){return this.row.states.length}break(){this.row.states.break=!0}repeat(){this.row.states.position--}skip(){this.row.states.position++}shift(t){this.row.states.position+t<-1&&(t=-(this.row.states.position+1)),this.row.states.position+=t}get mapKey(){return this.row.states.map?this.row.mapKey:void 0}set mapKey(t){this.row.states.map&&(this.row.mapKey=t)}key(t){this.mapKey=t}getStates(){return this.row.states}}t.Controller=s;class e{static createInstance(t,s){return new e(t,s)}states;mapKey;index;constructor(t,s){this.states=t,this.index=s,Array.isArray(this.states.map)?this.mapKey=this.states.position:this.mapKey=s}processMapper(t){return!(!this.states.mapUndefined&&void 0===t||(Array.isArray(this.states.map)?(this.mapKey!==this.states.position&&Number.isInteger(this.mapKey)?this.states.map[this.mapKey]=t:this.states.map.push(t),0):this.states.map instanceof Set?(this.states.map.add(t),0):this.states.map instanceof Map?(this.states.map.set(this.mapKey,t),0):"number"==typeof this.states.map?(this.states.map++,0):"boolean"!=typeof this.states.map||this.states.mapChanged?"object"!=typeof this.states.map||(this.states.map[this.mapKey]=t,0):(this.states.map=!this.states.map,0)))}static processIterationSync(t,i,n){const a=e.createInstance(t,n),r=t.iterateKeys?t.cb(n,i,s.createInstance(a)):t.cb(i,n,s.createInstance(a));a.processMapper(r)}static async processIterationAsync(t,i,n){const a=e.createInstance(t,n),r=t.iterateKeys?await t.cb(n,i,s.createInstance(a)):await t.cb(i,n,s.createInstance(a));a.processMapper(r)}}t.Row=e;class i{static createInstance(t){const s=new i;return Object.assign(s,t),s}isAsync=!1;values;cb;map;mapUndefined=!1;mapChanged=!1;iterateKeys=!1;length=0;position=0;break=!1;getStates(){return this}}t.States=i}(n||(t.Iterate=n={}))})();var n=exports;for(var a in i)n[a]=i[a];i.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})})();