update socials section
This commit is contained in:
		
							
								
								
									
										21
									
								
								node_modules/to-regex-range/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								node_modules/to-regex-range/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2015-present, Jon Schlinkert. | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in | ||||
| all copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										305
									
								
								node_modules/to-regex-range/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										305
									
								
								node_modules/to-regex-range/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,305 @@ | ||||
| # to-regex-range [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [](https://www.npmjs.com/package/to-regex-range) [](https://npmjs.org/package/to-regex-range) [](https://npmjs.org/package/to-regex-range) [](https://travis-ci.org/micromatch/to-regex-range) | ||||
|  | ||||
| > Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions. | ||||
|  | ||||
| Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. | ||||
|  | ||||
| ## Install | ||||
|  | ||||
| Install with [npm](https://www.npmjs.com/): | ||||
|  | ||||
| ```sh | ||||
| $ npm install --save to-regex-range | ||||
| ``` | ||||
|  | ||||
| <details> | ||||
| <summary><strong>What does this do?</strong></summary> | ||||
|  | ||||
| <br> | ||||
|  | ||||
| This libary generates the `source` string to be passed to `new RegExp()` for matching a range of numbers. | ||||
|  | ||||
| **Example** | ||||
|  | ||||
| ```js | ||||
| const toRegexRange = require('to-regex-range'); | ||||
| const regex = new RegExp(toRegexRange('15', '95')); | ||||
| ``` | ||||
|  | ||||
| A string is returned so that you can do whatever you need with it before passing it to `new RegExp()` (like adding `^` or `$` boundaries, defining flags, or combining it another string). | ||||
|  | ||||
| <br> | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><strong>Why use this library?</strong></summary> | ||||
|  | ||||
| <br> | ||||
|  | ||||
| ### Convenience | ||||
|  | ||||
| Creating regular expressions for matching numbers gets deceptively complicated pretty fast. | ||||
|  | ||||
| For example, let's say you need a validation regex for matching part of a user-id, postal code, social security number, tax id, etc: | ||||
|  | ||||
| * regex for matching `1` => `/1/` (easy enough) | ||||
| * regex for matching `1` through `5` => `/[1-5]/` (not bad...) | ||||
| * regex for matching `1` or `5` => `/(1|5)/` (still easy...) | ||||
| * regex for matching `1` through `50` => `/([1-9]|[1-4][0-9]|50)/` (uh-oh...) | ||||
| * regex for matching `1` through `55` => `/([1-9]|[1-4][0-9]|5[0-5])/` (no prob, I can do this...) | ||||
| * regex for matching `1` through `555` => `/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/` (maybe not...) | ||||
| * regex for matching `0001` through `5555` => `/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/` (okay, I get the point!) | ||||
|  | ||||
| The numbers are contrived, but they're also really basic. In the real world you might need to generate a regex on-the-fly for validation. | ||||
|  | ||||
| **Learn more** | ||||
|  | ||||
| If you're interested in learning more about [character classes](http://www.regular-expressions.info/charclass.html) and other regex features, I personally have always found [regular-expressions.info](http://www.regular-expressions.info/charclass.html) to be pretty useful. | ||||
|  | ||||
| ### Heavily tested | ||||
|  | ||||
| As of April 07, 2019, this library runs [>1m test assertions](./test/test.js) against generated regex-ranges to provide brute-force verification that results are correct. | ||||
|  | ||||
| Tests run in ~280ms on my MacBook Pro, 2.5 GHz Intel Core i7. | ||||
|  | ||||
| ### Optimized | ||||
|  | ||||
| Generated regular expressions are optimized: | ||||
|  | ||||
| * duplicate sequences and character classes are reduced using quantifiers | ||||
| * smart enough to use `?` conditionals when number(s) or range(s) can be positive or negative | ||||
| * uses fragment caching to avoid processing the same exact string more than once | ||||
|  | ||||
| <br> | ||||
|  | ||||
| </details> | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
| Add this library to your javascript application with the following line of code | ||||
|  | ||||
| ```js | ||||
| const toRegexRange = require('to-regex-range'); | ||||
| ``` | ||||
|  | ||||
| The main export is a function that takes two integers: the `min` value and `max` value (formatted as strings or numbers). | ||||
|  | ||||
| ```js | ||||
| const source = toRegexRange('15', '95'); | ||||
| //=> 1[5-9]|[2-8][0-9]|9[0-5] | ||||
|  | ||||
| const regex = new RegExp(`^${source}$`); | ||||
| console.log(regex.test('14')); //=> false | ||||
| console.log(regex.test('50')); //=> true | ||||
| console.log(regex.test('94')); //=> true | ||||
| console.log(regex.test('96')); //=> false | ||||
| ``` | ||||
|  | ||||
| ## Options | ||||
|  | ||||
| ### options.capture | ||||
|  | ||||
| **Type**: `boolean` | ||||
|  | ||||
| **Deafault**: `undefined` | ||||
|  | ||||
| Wrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges. | ||||
|  | ||||
| ```js | ||||
| console.log(toRegexRange('-10', '10')); | ||||
| //=> -[1-9]|-?10|[0-9] | ||||
|  | ||||
| console.log(toRegexRange('-10', '10', { capture: true })); | ||||
| //=> (-[1-9]|-?10|[0-9]) | ||||
| ``` | ||||
|  | ||||
| ### options.shorthand | ||||
|  | ||||
| **Type**: `boolean` | ||||
|  | ||||
| **Deafault**: `undefined` | ||||
|  | ||||
| Use the regex shorthand for `[0-9]`: | ||||
|  | ||||
| ```js | ||||
| console.log(toRegexRange('0', '999999')); | ||||
| //=> [0-9]|[1-9][0-9]{1,5} | ||||
|  | ||||
| console.log(toRegexRange('0', '999999', { shorthand: true })); | ||||
| //=> \d|[1-9]\d{1,5} | ||||
| ``` | ||||
|  | ||||
| ### options.relaxZeros | ||||
|  | ||||
| **Type**: `boolean` | ||||
|  | ||||
| **Default**: `true` | ||||
|  | ||||
| This option relaxes matching for leading zeros when when ranges are zero-padded. | ||||
|  | ||||
| ```js | ||||
| const source = toRegexRange('-0010', '0010'); | ||||
| const regex = new RegExp(`^${source}$`); | ||||
| console.log(regex.test('-10')); //=> true | ||||
| console.log(regex.test('-010')); //=> true | ||||
| console.log(regex.test('-0010')); //=> true | ||||
| console.log(regex.test('10')); //=> true | ||||
| console.log(regex.test('010')); //=> true | ||||
| console.log(regex.test('0010')); //=> true | ||||
| ``` | ||||
|  | ||||
| When `relaxZeros` is false, matching is strict: | ||||
|  | ||||
| ```js | ||||
| const source = toRegexRange('-0010', '0010', { relaxZeros: false }); | ||||
| const regex = new RegExp(`^${source}$`); | ||||
| console.log(regex.test('-10')); //=> false | ||||
| console.log(regex.test('-010')); //=> false | ||||
| console.log(regex.test('-0010')); //=> true | ||||
| console.log(regex.test('10')); //=> false | ||||
| console.log(regex.test('010')); //=> false | ||||
| console.log(regex.test('0010')); //=> true | ||||
| ``` | ||||
|  | ||||
| ## Examples | ||||
|  | ||||
| | **Range**                   | **Result**                                                                      | **Compile time** | | ||||
| | ---                         | ---                                                                             | ---              | | ||||
| | `toRegexRange(-10, 10)`     | `-[1-9]\|-?10\|[0-9]`                                                           | _132μs_          | | ||||
| | `toRegexRange(-100, -10)`   | `-1[0-9]\|-[2-9][0-9]\|-100`                                                    | _50μs_           | | ||||
| | `toRegexRange(-100, 100)`   | `-[1-9]\|-?[1-9][0-9]\|-?100\|[0-9]`                                            | _42μs_           | | ||||
| | `toRegexRange(001, 100)`    | `0{0,2}[1-9]\|0?[1-9][0-9]\|100`                                                | _109μs_          | | ||||
| | `toRegexRange(001, 555)`    | `0{0,2}[1-9]\|0?[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]`                | _51μs_           | | ||||
| | `toRegexRange(0010, 1000)`  | `0{0,2}1[0-9]\|0{0,2}[2-9][0-9]\|0?[1-9][0-9]{2}\|1000`                         | _31μs_           | | ||||
| | `toRegexRange(1, 50)`       | `[1-9]\|[1-4][0-9]\|50`                                                         | _24μs_           | | ||||
| | `toRegexRange(1, 55)`       | `[1-9]\|[1-4][0-9]\|5[0-5]`                                                     | _23μs_           | | ||||
| | `toRegexRange(1, 555)`      | `[1-9]\|[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]`                        | _30μs_           | | ||||
| | `toRegexRange(1, 5555)`     | `[1-9]\|[1-9][0-9]{1,2}\|[1-4][0-9]{3}\|5[0-4][0-9]{2}\|55[0-4][0-9]\|555[0-5]` | _43μs_           | | ||||
| | `toRegexRange(111, 555)`    | `11[1-9]\|1[2-9][0-9]\|[2-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]`                     | _38μs_           | | ||||
| | `toRegexRange(29, 51)`      | `29\|[34][0-9]\|5[01]`                                                          | _24μs_           | | ||||
| | `toRegexRange(31, 877)`     | `3[1-9]\|[4-9][0-9]\|[1-7][0-9]{2}\|8[0-6][0-9]\|87[0-7]`                       | _32μs_           | | ||||
| | `toRegexRange(5, 5)`        | `5`                                                                             | _8μs_            | | ||||
| | `toRegexRange(5, 6)`        | `5\|6`                                                                          | _11μs_           | | ||||
| | `toRegexRange(1, 2)`        | `1\|2`                                                                          | _6μs_            | | ||||
| | `toRegexRange(1, 5)`        | `[1-5]`                                                                         | _15μs_           | | ||||
| | `toRegexRange(1, 10)`       | `[1-9]\|10`                                                                     | _22μs_           | | ||||
| | `toRegexRange(1, 100)`      | `[1-9]\|[1-9][0-9]\|100`                                                        | _25μs_           | | ||||
| | `toRegexRange(1, 1000)`     | `[1-9]\|[1-9][0-9]{1,2}\|1000`                                                  | _31μs_           | | ||||
| | `toRegexRange(1, 10000)`    | `[1-9]\|[1-9][0-9]{1,3}\|10000`                                                 | _34μs_           | | ||||
| | `toRegexRange(1, 100000)`   | `[1-9]\|[1-9][0-9]{1,4}\|100000`                                                | _36μs_           | | ||||
| | `toRegexRange(1, 1000000)`  | `[1-9]\|[1-9][0-9]{1,5}\|1000000`                                               | _42μs_           | | ||||
| | `toRegexRange(1, 10000000)` | `[1-9]\|[1-9][0-9]{1,6}\|10000000`                                              | _42μs_           | | ||||
|  | ||||
| ## Heads up! | ||||
|  | ||||
| **Order of arguments** | ||||
|  | ||||
| When the `min` is larger than the `max`, values will be flipped to create a valid range: | ||||
|  | ||||
| ```js | ||||
| toRegexRange('51', '29'); | ||||
| ``` | ||||
|  | ||||
| Is effectively flipped to: | ||||
|  | ||||
| ```js | ||||
| toRegexRange('29', '51'); | ||||
| //=> 29|[3-4][0-9]|5[0-1] | ||||
| ``` | ||||
|  | ||||
| **Steps / increments** | ||||
|  | ||||
| This library does not support steps (increments). A pr to add support would be welcome. | ||||
|  | ||||
| ## History | ||||
|  | ||||
| ### v2.0.0 - 2017-04-21 | ||||
|  | ||||
| **New features** | ||||
|  | ||||
| Adds support for zero-padding! | ||||
|  | ||||
| ### v1.0.0 | ||||
|  | ||||
| **Optimizations** | ||||
|  | ||||
| Repeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching. | ||||
|  | ||||
| ## Attribution | ||||
|  | ||||
| Inspired by the python library [range-regex](https://github.com/dimka665/range-regex). | ||||
|  | ||||
| ## About | ||||
|  | ||||
| <details> | ||||
| <summary><strong>Contributing</strong></summary> | ||||
|  | ||||
| Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><strong>Running Tests</strong></summary> | ||||
|  | ||||
| Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: | ||||
|  | ||||
| ```sh | ||||
| $ npm install && npm test | ||||
| ``` | ||||
|  | ||||
| </details> | ||||
|  | ||||
| <details> | ||||
| <summary><strong>Building docs</strong></summary> | ||||
|  | ||||
| _(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ | ||||
|  | ||||
| To generate the readme, run the following command: | ||||
|  | ||||
| ```sh | ||||
| $ npm install -g verbose/verb#dev verb-generate-readme && verb | ||||
| ``` | ||||
|  | ||||
| </details> | ||||
|  | ||||
| ### Related projects | ||||
|  | ||||
| You might also be interested in these projects: | ||||
|  | ||||
| * [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by micromatch.") | ||||
| * [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "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`") | ||||
| * [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") | ||||
| * [repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.") | ||||
| * [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") | ||||
|  | ||||
| ### Contributors | ||||
|  | ||||
| | **Commits** | **Contributor** |   | ||||
| | --- | --- |   | ||||
| | 63 | [jonschlinkert](https://github.com/jonschlinkert) |   | ||||
| | 3  | [doowb](https://github.com/doowb) |   | ||||
| | 2  | [realityking](https://github.com/realityking) |   | ||||
|  | ||||
| ### Author | ||||
|  | ||||
| **Jon Schlinkert** | ||||
|  | ||||
| * [GitHub Profile](https://github.com/jonschlinkert) | ||||
| * [Twitter Profile](https://twitter.com/jonschlinkert) | ||||
| * [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) | ||||
|  | ||||
| Please consider supporting me on Patreon, or [start your own Patreon page](https://patreon.com/invite/bxpbvm)! | ||||
|  | ||||
| <a href="https://www.patreon.com/jonschlinkert"> | ||||
| <img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" height="50"> | ||||
| </a> | ||||
|  | ||||
| ### License | ||||
|  | ||||
| Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). | ||||
| Released under the [MIT License](LICENSE). | ||||
|  | ||||
| *** | ||||
|  | ||||
| _This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 07, 2019._ | ||||
							
								
								
									
										288
									
								
								node_modules/to-regex-range/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										288
									
								
								node_modules/to-regex-range/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,288 @@ | ||||
| /*! | ||||
|  * to-regex-range <https://github.com/micromatch/to-regex-range> | ||||
|  * | ||||
|  * Copyright (c) 2015-present, Jon Schlinkert. | ||||
|  * Released under the MIT License. | ||||
|  */ | ||||
|  | ||||
| 'use strict'; | ||||
|  | ||||
| const isNumber = require('is-number'); | ||||
|  | ||||
| const toRegexRange = (min, max, options) => { | ||||
|   if (isNumber(min) === false) { | ||||
|     throw new TypeError('toRegexRange: expected the first argument to be a number'); | ||||
|   } | ||||
|  | ||||
|   if (max === void 0 || min === max) { | ||||
|     return String(min); | ||||
|   } | ||||
|  | ||||
|   if (isNumber(max) === false) { | ||||
|     throw new TypeError('toRegexRange: expected the second argument to be a number.'); | ||||
|   } | ||||
|  | ||||
|   let opts = { relaxZeros: true, ...options }; | ||||
|   if (typeof opts.strictZeros === 'boolean') { | ||||
|     opts.relaxZeros = opts.strictZeros === false; | ||||
|   } | ||||
|  | ||||
|   let relax = String(opts.relaxZeros); | ||||
|   let shorthand = String(opts.shorthand); | ||||
|   let capture = String(opts.capture); | ||||
|   let wrap = String(opts.wrap); | ||||
|   let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; | ||||
|  | ||||
|   if (toRegexRange.cache.hasOwnProperty(cacheKey)) { | ||||
|     return toRegexRange.cache[cacheKey].result; | ||||
|   } | ||||
|  | ||||
|   let a = Math.min(min, max); | ||||
|   let b = Math.max(min, max); | ||||
|  | ||||
|   if (Math.abs(a - b) === 1) { | ||||
|     let result = min + '|' + max; | ||||
|     if (opts.capture) { | ||||
|       return `(${result})`; | ||||
|     } | ||||
|     if (opts.wrap === false) { | ||||
|       return result; | ||||
|     } | ||||
|     return `(?:${result})`; | ||||
|   } | ||||
|  | ||||
|   let isPadded = hasPadding(min) || hasPadding(max); | ||||
|   let state = { min, max, a, b }; | ||||
|   let positives = []; | ||||
|   let negatives = []; | ||||
|  | ||||
|   if (isPadded) { | ||||
|     state.isPadded = isPadded; | ||||
|     state.maxLen = String(state.max).length; | ||||
|   } | ||||
|  | ||||
|   if (a < 0) { | ||||
|     let newMin = b < 0 ? Math.abs(b) : 1; | ||||
|     negatives = splitToPatterns(newMin, Math.abs(a), state, opts); | ||||
|     a = state.a = 0; | ||||
|   } | ||||
|  | ||||
|   if (b >= 0) { | ||||
|     positives = splitToPatterns(a, b, state, opts); | ||||
|   } | ||||
|  | ||||
|   state.negatives = negatives; | ||||
|   state.positives = positives; | ||||
|   state.result = collatePatterns(negatives, positives, opts); | ||||
|  | ||||
|   if (opts.capture === true) { | ||||
|     state.result = `(${state.result})`; | ||||
|   } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { | ||||
|     state.result = `(?:${state.result})`; | ||||
|   } | ||||
|  | ||||
|   toRegexRange.cache[cacheKey] = state; | ||||
|   return state.result; | ||||
| }; | ||||
|  | ||||
| function collatePatterns(neg, pos, options) { | ||||
|   let onlyNegative = filterPatterns(neg, pos, '-', false, options) || []; | ||||
|   let onlyPositive = filterPatterns(pos, neg, '', false, options) || []; | ||||
|   let intersected = filterPatterns(neg, pos, '-?', true, options) || []; | ||||
|   let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); | ||||
|   return subpatterns.join('|'); | ||||
| } | ||||
|  | ||||
| function splitToRanges(min, max) { | ||||
|   let nines = 1; | ||||
|   let zeros = 1; | ||||
|  | ||||
|   let stop = countNines(min, nines); | ||||
|   let stops = new Set([max]); | ||||
|  | ||||
|   while (min <= stop && stop <= max) { | ||||
|     stops.add(stop); | ||||
|     nines += 1; | ||||
|     stop = countNines(min, nines); | ||||
|   } | ||||
|  | ||||
|   stop = countZeros(max + 1, zeros) - 1; | ||||
|  | ||||
|   while (min < stop && stop <= max) { | ||||
|     stops.add(stop); | ||||
|     zeros += 1; | ||||
|     stop = countZeros(max + 1, zeros) - 1; | ||||
|   } | ||||
|  | ||||
|   stops = [...stops]; | ||||
|   stops.sort(compare); | ||||
|   return stops; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Convert a range to a regex pattern | ||||
|  * @param {Number} `start` | ||||
|  * @param {Number} `stop` | ||||
|  * @return {String} | ||||
|  */ | ||||
|  | ||||
| function rangeToPattern(start, stop, options) { | ||||
|   if (start === stop) { | ||||
|     return { pattern: start, count: [], digits: 0 }; | ||||
|   } | ||||
|  | ||||
|   let zipped = zip(start, stop); | ||||
|   let digits = zipped.length; | ||||
|   let pattern = ''; | ||||
|   let count = 0; | ||||
|  | ||||
|   for (let i = 0; i < digits; i++) { | ||||
|     let [startDigit, stopDigit] = zipped[i]; | ||||
|  | ||||
|     if (startDigit === stopDigit) { | ||||
|       pattern += startDigit; | ||||
|  | ||||
|     } else if (startDigit !== '0' || stopDigit !== '9') { | ||||
|       pattern += toCharacterClass(startDigit, stopDigit, options); | ||||
|  | ||||
|     } else { | ||||
|       count++; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (count) { | ||||
|     pattern += options.shorthand === true ? '\\d' : '[0-9]'; | ||||
|   } | ||||
|  | ||||
|   return { pattern, count: [count], digits }; | ||||
| } | ||||
|  | ||||
| function splitToPatterns(min, max, tok, options) { | ||||
|   let ranges = splitToRanges(min, max); | ||||
|   let tokens = []; | ||||
|   let start = min; | ||||
|   let prev; | ||||
|  | ||||
|   for (let i = 0; i < ranges.length; i++) { | ||||
|     let max = ranges[i]; | ||||
|     let obj = rangeToPattern(String(start), String(max), options); | ||||
|     let zeros = ''; | ||||
|  | ||||
|     if (!tok.isPadded && prev && prev.pattern === obj.pattern) { | ||||
|       if (prev.count.length > 1) { | ||||
|         prev.count.pop(); | ||||
|       } | ||||
|  | ||||
|       prev.count.push(obj.count[0]); | ||||
|       prev.string = prev.pattern + toQuantifier(prev.count); | ||||
|       start = max + 1; | ||||
|       continue; | ||||
|     } | ||||
|  | ||||
|     if (tok.isPadded) { | ||||
|       zeros = padZeros(max, tok, options); | ||||
|     } | ||||
|  | ||||
|     obj.string = zeros + obj.pattern + toQuantifier(obj.count); | ||||
|     tokens.push(obj); | ||||
|     start = max + 1; | ||||
|     prev = obj; | ||||
|   } | ||||
|  | ||||
|   return tokens; | ||||
| } | ||||
|  | ||||
| function filterPatterns(arr, comparison, prefix, intersection, options) { | ||||
|   let result = []; | ||||
|  | ||||
|   for (let ele of arr) { | ||||
|     let { string } = ele; | ||||
|  | ||||
|     // only push if _both_ are negative... | ||||
|     if (!intersection && !contains(comparison, 'string', string)) { | ||||
|       result.push(prefix + string); | ||||
|     } | ||||
|  | ||||
|     // or _both_ are positive | ||||
|     if (intersection && contains(comparison, 'string', string)) { | ||||
|       result.push(prefix + string); | ||||
|     } | ||||
|   } | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Zip strings | ||||
|  */ | ||||
|  | ||||
| function zip(a, b) { | ||||
|   let arr = []; | ||||
|   for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); | ||||
|   return arr; | ||||
| } | ||||
|  | ||||
| function compare(a, b) { | ||||
|   return a > b ? 1 : b > a ? -1 : 0; | ||||
| } | ||||
|  | ||||
| function contains(arr, key, val) { | ||||
|   return arr.some(ele => ele[key] === val); | ||||
| } | ||||
|  | ||||
| function countNines(min, len) { | ||||
|   return Number(String(min).slice(0, -len) + '9'.repeat(len)); | ||||
| } | ||||
|  | ||||
| function countZeros(integer, zeros) { | ||||
|   return integer - (integer % Math.pow(10, zeros)); | ||||
| } | ||||
|  | ||||
| function toQuantifier(digits) { | ||||
|   let [start = 0, stop = ''] = digits; | ||||
|   if (stop || start > 1) { | ||||
|     return `{${start + (stop ? ',' + stop : '')}}`; | ||||
|   } | ||||
|   return ''; | ||||
| } | ||||
|  | ||||
| function toCharacterClass(a, b, options) { | ||||
|   return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; | ||||
| } | ||||
|  | ||||
| function hasPadding(str) { | ||||
|   return /^-?(0+)\d/.test(str); | ||||
| } | ||||
|  | ||||
| function padZeros(value, tok, options) { | ||||
|   if (!tok.isPadded) { | ||||
|     return value; | ||||
|   } | ||||
|  | ||||
|   let diff = Math.abs(tok.maxLen - String(value).length); | ||||
|   let relax = options.relaxZeros !== false; | ||||
|  | ||||
|   switch (diff) { | ||||
|     case 0: | ||||
|       return ''; | ||||
|     case 1: | ||||
|       return relax ? '0?' : '0'; | ||||
|     case 2: | ||||
|       return relax ? '0{0,2}' : '00'; | ||||
|     default: { | ||||
|       return relax ? `0{0,${diff}}` : `0{${diff}}`; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Cache | ||||
|  */ | ||||
|  | ||||
| toRegexRange.cache = {}; | ||||
| toRegexRange.clearCache = () => (toRegexRange.cache = {}); | ||||
|  | ||||
| /** | ||||
|  * Expose `toRegexRange` | ||||
|  */ | ||||
|  | ||||
| module.exports = toRegexRange; | ||||
							
								
								
									
										88
									
								
								node_modules/to-regex-range/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								node_modules/to-regex-range/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| { | ||||
|   "name": "to-regex-range", | ||||
|   "description": "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.", | ||||
|   "version": "5.0.1", | ||||
|   "homepage": "https://github.com/micromatch/to-regex-range", | ||||
|   "author": "Jon Schlinkert (https://github.com/jonschlinkert)", | ||||
|   "contributors": [ | ||||
|     "Jon Schlinkert (http://twitter.com/jonschlinkert)", | ||||
|     "Rouven Weßling (www.rouvenwessling.de)" | ||||
|   ], | ||||
|   "repository": "micromatch/to-regex-range", | ||||
|   "bugs": { | ||||
|     "url": "https://github.com/micromatch/to-regex-range/issues" | ||||
|   }, | ||||
|   "license": "MIT", | ||||
|   "files": [ | ||||
|     "index.js" | ||||
|   ], | ||||
|   "main": "index.js", | ||||
|   "engines": { | ||||
|     "node": ">=8.0" | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "test": "mocha" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "is-number": "^7.0.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "fill-range": "^6.0.0", | ||||
|     "gulp-format-md": "^2.0.0", | ||||
|     "mocha": "^6.0.2", | ||||
|     "text-table": "^0.2.0", | ||||
|     "time-diff": "^0.3.1" | ||||
|   }, | ||||
|   "keywords": [ | ||||
|     "bash", | ||||
|     "date", | ||||
|     "expand", | ||||
|     "expansion", | ||||
|     "expression", | ||||
|     "glob", | ||||
|     "match", | ||||
|     "match date", | ||||
|     "match number", | ||||
|     "match numbers", | ||||
|     "match year", | ||||
|     "matches", | ||||
|     "matching", | ||||
|     "number", | ||||
|     "numbers", | ||||
|     "numerical", | ||||
|     "range", | ||||
|     "ranges", | ||||
|     "regex", | ||||
|     "regexp", | ||||
|     "regular", | ||||
|     "regular expression", | ||||
|     "sequence" | ||||
|   ], | ||||
|   "verb": { | ||||
|     "layout": "default", | ||||
|     "toc": false, | ||||
|     "tasks": [ | ||||
|       "readme" | ||||
|     ], | ||||
|     "plugins": [ | ||||
|       "gulp-format-md" | ||||
|     ], | ||||
|     "lint": { | ||||
|       "reflinks": true | ||||
|     }, | ||||
|     "helpers": { | ||||
|       "examples": { | ||||
|         "displayName": "examples" | ||||
|       } | ||||
|     }, | ||||
|     "related": { | ||||
|       "list": [ | ||||
|         "expand-range", | ||||
|         "fill-range", | ||||
|         "micromatch", | ||||
|         "repeat-element", | ||||
|         "repeat-string" | ||||
|       ] | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user