UNPKG

@bluelovers/fill-range

Version:

Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`

3 lines (2 loc) 3.89 kB
"use strict";var e,t=require("util"),r=require("@bluelovers/to-regex-range2");function isObject(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}!function(e){e.negative="-",e.none=""}(e||(e={}));const isValidValue=e=>"number"==typeof e||"string"==typeof e&&""!==e,isNumber=e=>Number.isInteger(+e),zeros=e=>{let t=`${e}`,r=-1;if("-"===t[0]&&(t=t.slice(1)),"0"===t)return!1;for(;"0"===t[++r];);return r>0},pad=(e,t,r)=>(t>0&&(e=toMaxLen(e,t)),!1===r?String(e):e),toMaxLen=(e,t)=>{let{result:r,negative:n,maxLength:i}=function _prefixNegative(e,t){const r="-"===e[0]?"-":"";return"-"===r&&(e=e.slice(1),t--),{result:e,negative:r,maxLength:t}}(e,t);return n+r.padStart(i,"0")};function _partsSort(e){e.sort(((e,t)=>e<t?-1:e>t?1:0))}function _partsCapturePrefix(e){return e.capture?"":"?:"}function _join(e){return e.join("|")}const toRange=(e,t,n,i)=>{if(n)return r.toRegexRange(e,t,{wrap:!1,...i});const o=String.fromCharCode(e);return e===t?o:`[${o}-${String.fromCharCode(t)}]`},toRegex=(e,t,n)=>{if(Array.isArray(e)){const t=!0===n.wrap,r=_partsCapturePrefix(n);return e=_join(e),t?`(${r}${e})`:e}return r.toRegexRange(e,t,n)},rangeError=(...e)=>new RangeError("Invalid range arguments: "+t.inspect(...e)),invalidRange=(e,t,r)=>{if(!0===r.strictRanges)throw rangeError([e,t],r);return[]};function _handleLimit(e){return e.limit>0?e.limit:Infinity}function _handleStep(e){return Math.max(Math.abs(e),1)}function _handleDescending(e,t,r){const n=e>t;if(!0===n&&r.strictOrder)throw rangeError([e,t],r);return n}function fill(e,t,r,n={}){const i=isValidValue(e);if(null==t&&i)return[e];if(!i||!isValidValue(t))return invalidRange(e,t,n);"function"==typeof r&&([r,n]=[1,{transform:r}]),isObject(r)&&([r,n]=[0,r]);let o=n;if(!isNumber(r=r||o.step||1)){if(null!=r&&!isObject(r))return((e,t)=>{if(!0===t.strictRanges)throw new TypeError(`Expected step "${e}" to be a number`);return[]})(r,o);[r,o]=[1,o]}return o=function _handleOptions(e,t){return!0===t&&(e={...e}),!0===e.capture&&(e.wrap=!0),e}(o,!0),isNumber(e)&&isNumber(t)?((e,t,r=1,n={})=>{let i=Number(e),o=Number(t);if(!Number.isInteger(i)||!Number.isInteger(o)){if(!0===n.strictRanges)throw rangeError([e,t],n);return[]}0===i&&(i=0),0===o&&(o=0);const s=_handleDescending(i,o,n),a=String(e),u=String(t),l=String(r);r=_handleStep(r);const f=zeros(a)||zeros(u)||zeros(l),g=f?Math.max(a.length,u.length,l.length):0,c=!1===f&&!1===((e,t,r)=>"string"==typeof e||"string"==typeof t||!0===r.stringify)(e,t,n),p=n.transform||(e=>!0===e?e=>Number(e):e=>String(e))(c);if(n.toRegex&&1===r)return toRange(toMaxLen(String(e),g),toMaxLen(String(t),g),!0,n);const h={negatives:[],positives:[]},d=[];let m=0;const _=_handleLimit(n);for(;(s?i>=o:i<=o)&&(!0===n.toRegex&&r>1?h[(v=i)<0?"negatives":"positives"].push(Math.abs(v)):d.push(pad(p(i,m),g,c)),i=s?i-r:i+r,m++,!(m>=_)););var v;return!0===n.toRegex?r>1?((e,t)=>{_partsSort(e.negatives),_partsSort(e.positives);let r,n=_partsCapturePrefix(t),i="",o="";return e.positives.length&&(i=_join(e.positives)),e.negatives.length&&(o=`-(${n}${_join(e.negatives)})`),r=i&&o?`${i}|${o}`:i||o,t.wrap?`(${n}${r})`:r})(h,n):toRegex(d,null,{wrap:!1,...n}):d})(e,t,r,o):function fillLetters(e,t,r=1,n={}){if(!isNumber(e)&&e.length>1||!isNumber(t)&&t.length>1)return invalidRange(e,t,n);const i=n.transform||(e=>String.fromCharCode(e));let o=`${e}`.charCodeAt(0),s=`${t}`.charCodeAt(0);const a=_handleDescending(o,s,n),u=Math.min(o,s),l=Math.max(o,s);if(!0===n.toRegex&&1===r)return toRange(u,l,!1,n);const f=[];let g=0;const c=_handleLimit(n);for(;(a?o>=s:o<=s)&&(f.push(i(o,g)),o=a?o-r:o+r,g++,!(g>=c)););return!0===n.toRegex?toRegex(f,null,{wrap:!1,...n}):f}(e,t,_handleStep(r),o)}Object.defineProperty(fill,"__esModule",{value:!0}),Object.defineProperty(fill,"fill",{value:fill}),Object.defineProperty(fill,"default",{value:fill}),module.exports=fill; //# sourceMappingURL=index.cjs.production.min.cjs.map