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`

1 lines 25.2 kB
{"version":3,"file":"index.umd.development.cjs","sources":["../src/index.ts"],"sourcesContent":["import { inspect } from 'util';\nimport { toRegexRange, IOptions as IOptionsToRegexRange } from '@bluelovers/to-regex-range2';\n\nexport interface IOptions<V = string | number> extends IOptionsToRegexRange\n{\n /**\n * The increment to use for the range. Can be used with letters or numbers.\n * @example\n * // numbers\n * console.log(fill('1', '10', 2)); //=> [ '1', '3', '5', '7', '9' ]\n * console.log(fill('1', '10', 3)); //=> [ '1', '4', '7', '10' ]\n * console.log(fill('1', '10', 4)); //=> [ '1', '5', '9' ]\n *\n * // letters\n * console.log(fill('a', 'z', 5)); //=> [ 'a', 'f', 'k', 'p', 'u', 'z' ]\n * console.log(fill('a', 'z', 7)); //=> [ 'a', 'h', 'o', 'v' ]\n * console.log(fill('a', 'z', 9)); //=> [ 'a', 'j', 's' ]\n */\n step?: number,\n\n /**\n * By default, null is returned when an invalid range is passed. Enable this option to throw a RangeError on invalid ranges.\n */\n strictRanges?: boolean,\n\n /**\n * Cast all returned values to strings. By default, integers are returned as numbers.\n * @example\n * console.log(fill(1, 5)); //=> [ 1, 2, 3, 4, 5 ]\n * console.log(fill(1, 5, { stringify: true })); //=> [ '1', '2', '3', '4', '5' ]\n *\n */\n stringify?: boolean,\n /**\n * Create a regex-compatible source string, instead of expanding values to an array.\n * @example\n * // alphabetical range\n * console.log(fill('a', 'e', { toRegex: true })); //=> '[a-e]'\n * // alphabetical with step\n * console.log(fill('a', 'z', 3, { toRegex: true })); //=> 'a|d|g|j|m|p|s|v|y'\n * // numerical range\n * console.log(fill('1', '100', { toRegex: true })); //=> '[1-9]|[1-9][0-9]|100'\n * // numerical range with zero padding\n * console.log(fill('000001', '100000', { toRegex: true }));\n * //=> '0{5}[1-9]|0{4}[1-9][0-9]|0{3}[1-9][0-9]{2}|0{2}[1-9][0-9]{3}|0[1-9][0-9]{4}|100000'\n */\n toRegex?: boolean,\n\n /**\n * Customize each value in the returned array (or string). (you can also pass this function as the last argument to fill()).\n * @example\n * // add zero padding\n * console.log(fill(1, 5, value => String(value).padStart(4, '0')));\n * //=> ['0001', '0002', '0003', '0004', '0005']\n */\n transform?(val: number, index?: number): V,\n\n /**\n * set limit size\n */\n limit?: number,\n /**\n * only allow start < stop\n */\n strictOrder?: boolean,\n}\n\ninterface IParts\n{\n negatives: number[],\n positives: number[],\n}\n\nconst enum EnumNegative\n{\n negative = '-',\n none = '',\n}\n\nfunction isObject(val: unknown): val is IOptions {\n return val !== null && typeof val === 'object' && !Array.isArray(val);\n}\n\nconst transform = (toNumber: boolean) => {\n if (toNumber === true) return value => Number(value);\n return value => String(value);\n};\n\nconst isValidValue = (value): value is number | string => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = (num: unknown): num is number => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options: IOptions) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input: any, maxLength: number, toNumber: boolean) => {\n if (maxLength > 0) {\n input = toMaxLen(input, maxLength);\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input: string, _maxLength: number) => {\n let { result, negative, maxLength } = _prefixNegative(input, _maxLength);\n return negative + result.padStart(maxLength, '0')\n};\n\nfunction _partsSort(part: number[])\n{\n part.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n}\n\nfunction _partsCapturePrefix(options: IOptions)\n{\n return options.capture ? '' as const : '?:' as const;\n}\n\nfunction _prefixNegative(input: string, maxLength: number)\n{\n const negative = input[0] === EnumNegative.negative ? EnumNegative.negative : EnumNegative.none;\n\n if (negative === EnumNegative.negative)\n {\n input = input.slice(1);\n maxLength--;\n }\n\n return {\n result: input,\n negative,\n maxLength,\n }\n}\n\nfunction _join(part: (string|number)[])\n{\n return part.join('|')\n}\n\nconst toSequence = (parts: IParts, options: IOptions) => {\n _partsSort(parts.negatives);\n _partsSort(parts.positives);\n\n let prefix = _partsCapturePrefix(options);\n let positives = '';\n let negatives = '';\n let result: string;\n\n if (parts.positives.length) {\n positives = _join(parts.positives);\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${_join(parts.negatives)})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options: IOptions) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n const start = String.fromCharCode(a);\n if (a === b) return start;\n\n const stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options: IOptions): string => {\n if (Array.isArray(start)) {\n const wrap = options.wrap === true;\n const prefix = _partsCapturePrefix(options);\n start = _join(start);\n return wrap ? `(${prefix}${start})` : start;\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n // @ts-ignore\n return new RangeError('Invalid range arguments: ' + inspect(...args));\n};\n\nconst invalidRange = (start, end, options: IOptions): string[] => {\n if (options.strictRanges === true) throw rangeError([start, end], options);\n return [];\n};\n\nconst invalidStep = (step, options: IOptions): string[] => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nfunction _handleLimit(options: IOptions)\n{\n return options.limit > 0 ? options.limit! : Infinity;\n}\n\nfunction _handleStep(step: number)\n{\n return Math.max(Math.abs(step), 1)\n}\n\nfunction _handleOptions(opts: IOptions, clone?: boolean)\n{\n if (clone === true)\n {\n opts = { ...opts };\n }\n if (opts.capture === true) opts.wrap = true;\n return opts;\n}\n\nfunction _handleDescending(start: number, end: number, options: IOptions)\n{\n const descending = start > end;\n\n if (descending === true && options.strictOrder)\n {\n throw rangeError([start, end], options);\n }\n\n return descending\n}\n\nconst fillNumbers = (start, end, step = 1, options: IOptions = {}): string[] | string => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end], options);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n const descending = _handleDescending(a, b, options);\n const startString = String(start);\n const endString = String(end);\n const stepString = String(step);\n step = _handleStep(step);\n\n const padded = zeros(startString) || zeros(endString) || zeros(stepString);\n const maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n const toNumber = padded === false && stringify(start, end, options) === false;\n const format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(String(start), maxLen), toMaxLen(String(end), maxLen), true, options);\n }\n\n const parts: IParts = { negatives: [], positives: [] };\n const push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n const range: any[] = [];\n let index = 0;\n const limit = _handleLimit(options);\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n if (index >= limit) break;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nfunction fillLetters(start, end, step: number, options: IOptions & {\n toRegex: true,\n}): string\nfunction fillLetters<V>(start, end, step?: number, options?: IOptions<V>): V[] | string\nfunction fillLetters(start, end, step = 1, options: IOptions = {}): any[] | string\n{\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1))\n {\n return invalidRange(start, end, options) as any;\n }\n\n const format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n const descending = _handleDescending(a, b, options);\n const min = Math.min(a, b);\n const max = Math.max(a, b);\n\n if (options.toRegex === true && step === 1)\n {\n return toRange(min, max, false, options);\n }\n\n const range: any[] = [];\n let index = 0;\n const limit = _handleLimit(options);\n\n while (descending ? a >= b : a <= b)\n {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n if (index >= limit) break;\n }\n\n if (options.toRegex === true)\n {\n return toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n}\n\nexport function fill<V = number | string>(start: number | string,\n end: number | string,\n step: IOptions<V> & {\n toRegex?: false,\n },\n options?: never\n): V[]\nexport function fill<V = number | string>(start: number | string,\n end: number | string,\n step: number,\n options?: IOptions<V> & {\n toRegex?: false,\n }\n): V[]\nexport function fill<V = number | string>(start: number | string,\n end: number | string,\n step: IOptions<V>[\"transform\"],\n options?: never\n): V[]\nexport function fill(start: number | string,\n end: number | string,\n step: IOptions & {\n toRegex: true,\n },\n options?: IOptions\n): string\nexport function fill(start: number | string,\n end: number | string,\n step: number | IOptions[\"transform\"],\n options: IOptions & {\n toRegex: true,\n }\n): string\nexport function fill<R extends any[] | string = string[] | string>(start: number | string,\n end?: number | string,\n step?: number | IOptions[\"transform\"] | IOptions,\n options?: IOptions\n): R\nexport function fill(start: number | string, end?: number | string, step?: number | IOptions[\"transform\"] | IOptions, options: IOptions = {}): any[] | string\n{\n const _s = isValidValue(start);\n if ((typeof end === 'undefined' || end === null) && _s)\n {\n return [start] as any;\n }\n\n if (!_s || !isValidValue(end))\n {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function')\n {\n //return fill(start, end, 1, { transform: step });\n [step, options] = [1, { transform: step }];\n }\n\n if (isObject(step))\n {\n //return fill(start, end, 0, step);\n [step, options] = [0, step];\n }\n\n let opts: IOptions = options;\n step = step || opts.step || 1;\n\n if (!isNumber(step))\n {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n //return fill(start, end, 1, step as IOptions);\n [step, opts] = [1, opts];\n }\n\n opts = _handleOptions(opts, true);\n\n if (isNumber(start) && isNumber(end))\n {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, _handleStep(step), opts);\n}\n\nObject.defineProperty(fill, '__esModule', { value: true });\nObject.defineProperty(fill, 'fill', { value: fill });\nObject.defineProperty(fill, 'default', { value: fill });\n\nexport default fill;\n"],"names":["EnumNegative","isObject","val","Array","isArray","transform","toNumber","value","Number","String","isValidValue","isNumber","num","isInteger","zeros","input","index","slice","stringify","start","end","options","pad","maxLength","toMaxLen","_maxLength","result","negative","_prefixNegative","padStart","_partsSort","part","sort","a","b","_partsCapturePrefix","capture","_join","join","toSequence","parts","negatives","positives","prefix","length","wrap","toRange","isNumbers","toRegexRange","fromCharCode","stop","toRegex","rangeError","args","RangeError","inspect","invalidRange","strictRanges","invalidStep","step","TypeError","_handleLimit","limit","Infinity","_handleStep","Math","max","abs","_handleOptions","opts","clone","_handleDescending","descending","strictOrder","fillNumbers","startString","endString","stepString","padded","maxLen","format","push","range","fillLetters","charCodeAt","min","fill","_s","Object","defineProperty"],"mappings":"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"}