pax_global_header00006660000000000000000000000064136206211030014504gustar00rootroot0000000000000052 comment=6e7982f23a0f2a378dad80de6a9acb435154e652 node-semver-7.1.3/000077500000000000000000000000001362062110300137405ustar00rootroot00000000000000node-semver-7.1.3/.github/000077500000000000000000000000001362062110300153005ustar00rootroot00000000000000node-semver-7.1.3/.github/settings.yml000066400000000000000000000000601362062110300176570ustar00rootroot00000000000000--- _extends: 'open-source-project-boilerplate' node-semver-7.1.3/.gitignore000066400000000000000000000000621362062110300157260ustar00rootroot00000000000000/node_modules .*.swp coverage/ .nyc_output/ .idea node-semver-7.1.3/.travis.yml000066400000000000000000000002111362062110300160430ustar00rootroot00000000000000language: node_js node_js: - node - 12 - 10 os: - linux cache: directories: - $HOME/.npm notifications: email: false node-semver-7.1.3/CHANGELOG.md000066400000000000000000000031331362062110300155510ustar00rootroot00000000000000# changes log ## 7.1.0 * Add `require('semver/preload')` to load the entire module without using lazy getter methods. ## 7.0.0 * Refactor module into separate files for better tree-shaking * Drop support for very old node versions, use const/let, `=>` functions, and classes. ## 6.3.0 * Expose the token enum on the exports ## 6.2.0 * Coerce numbers to strings when passed to semver.coerce() * Add `rtl` option to coerce from right to left ## 6.1.3 * Handle X-ranges properly in includePrerelease mode ## 6.1.2 * Do not throw when testing invalid version strings ## 6.1.1 * Add options support for semver.coerce() * Handle undefined version passed to Range.test ## 6.1.0 * Add semver.compareBuild function * Support `*` in semver.intersects ## 6.0 * Fix `intersects` logic. This is technically a bug fix, but since it is also a change to behavior that may require users updating their code, it is marked as a major version increment. ## 5.7 * Add `minVersion` method ## 5.6 * Move boolean `loose` param to an options object, with backwards-compatibility protection. * Add ability to opt out of special prerelease version handling with the `includePrerelease` option flag. ## 5.5 * Add version coercion capabilities ## 5.4 * Add intersection checking ## 5.3 * Add `minSatisfying` method ## 5.2 * Add `prerelease(v)` that returns prerelease components ## 5.1 * Add Backus-Naur for ranges * Remove excessively cute inspection methods ## 5.0 * Remove AMD/Browserified build artifacts * Fix ltr and gtr when using the `*` range * Fix for range `*` with a prerelease identifier node-semver-7.1.3/CONTRIBUTING.md000066400000000000000000000001161362062110300161670ustar00rootroot00000000000000Please consider signing [the neveragain.tech pledge](http://neveragain.tech/) node-semver-7.1.3/LICENSE000066400000000000000000000013751362062110300147530ustar00rootroot00000000000000The ISC License Copyright (c) Isaac Z. Schlueter and Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. node-semver-7.1.3/README.md000066400000000000000000000514571362062110300152330ustar00rootroot00000000000000semver(1) -- The semantic versioner for npm =========================================== ## Install ```bash npm install semver ```` ## Usage As a node module: ```js const semver = require('semver') semver.valid('1.2.3') // '1.2.3' semver.valid('a.b.c') // null semver.clean(' =v1.2.3 ') // '1.2.3' semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true semver.gt('1.2.3', '9.8.7') // false semver.lt('1.2.3', '9.8.7') // true semver.minVersion('>=1.0.0') // '1.0.0' semver.valid(semver.coerce('v2')) // '2.0.0' semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' ``` You can also just load the module for the function that you care about, if you'd like to minimize your footprint. ```js // load the whole API at once in a single object const semver = require('semver') // or just load the bits you need // all of them listed here, just pick and choose what you want // classes const SemVer = require('semver/classes/semver') const Comparator = require('semver/classes/comparator') const Range = require('semver/classes/range') // functions for working with versions const semverParse = require('semver/functions/parse') const semverValid = require('semver/functions/valid') const semverClean = require('semver/functions/clean') const semverInc = require('semver/functions/inc') const semverDiff = require('semver/functions/diff') const semverMajor = require('semver/functions/major') const semverMinor = require('semver/functions/minor') const semverPatch = require('semver/functions/patch') const semverPrerelease = require('semver/functions/prerelease') const semverCompare = require('semver/functions/compare') const semverRcompare = require('semver/functions/rcompare') const semverCompareLoose = require('semver/functions/compare-loose') const semverCompareBuild = require('semver/functions/compare-build') const semverSort = require('semver/functions/sort') const semverRsort = require('semver/functions/rsort') // low-level comparators between versions const semverGt = require('semver/functions/gt') const semverLt = require('semver/functions/lt') const semverEq = require('semver/functions/eq') const semverNeq = require('semver/functions/neq') const semverGte = require('semver/functions/gte') const semverLte = require('semver/functions/lte') const semverCmp = require('semver/functions/cmp') const semverCoerce = require('semver/functions/coerce') // working with ranges const semverSatisfies = require('semver/functions/satisfies') const semverMaxSatisfying = require('semver/ranges/max-satisfying') const semverMinSatisfying = require('semver/ranges/min-satisfying') const semverToComparators = require('semver/ranges/to-comparators') const semverMinVersion = require('semver/ranges/min-version') const semverValidRange = require('semver/ranges/valid') const semverOutside = require('semver/ranges/outside') const semverGtr = require('semver/ranges/gtr') const semverLtr = require('semver/ranges/ltr') const semverIntersects = require('semver/ranges/intersects') ``` As a command-line utility: ``` $ semver -h A JavaScript implementation of the https://semver.org/ specification Copyright Isaac Z. Schlueter Usage: semver [options] [ [...]] Prints valid versions sorted by SemVer precedence Options: -r --range Print versions that match the specified range. -i --increment [] Increment a version by the specified level. Level can be one of: major, minor, patch, premajor, preminor, prepatch, or prerelease. Default level is 'patch'. Only one version may be specified. --preid Identifier to be used to prefix premajor, preminor, prepatch or prerelease version increments. -l --loose Interpret versions and ranges loosely -p --include-prerelease Always include prerelease versions in range matching -c --coerce Coerce a string into SemVer if possible (does not imply --loose) --rtl Coerce version strings right to left --ltr Coerce version strings left to right (default) Program exits successfully if any valid version satisfies all supplied ranges, and prints all satisfying versions. If no satisfying versions are found, then exits failure. Versions are printed in ascending order, so supplying multiple versions to the utility will just sort them. ``` ## Versions A "version" is described by the `v2.0.0` specification found at . A leading `"="` or `"v"` character is stripped off and ignored. ## Ranges A `version range` is a set of `comparators` which specify versions that satisfy the range. A `comparator` is composed of an `operator` and a `version`. The set of primitive `operators` is: * `<` Less than * `<=` Less than or equal to * `>` Greater than * `>=` Greater than or equal to * `=` Equal. If no operator is specified, then equality is assumed, so this operator is optional, but MAY be included. For example, the comparator `>=1.2.7` would match the versions `1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` or `1.1.0`. Comparators can be joined by whitespace to form a `comparator set`, which is satisfied by the **intersection** of all of the comparators it includes. A range is composed of one or more comparator sets, joined by `||`. A version matches a range if and only if every comparator in at least one of the `||`-separated comparator sets is satisfied by the version. For example, the range `>=1.2.7 <1.3.0` would match the versions `1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, or `1.1.0`. The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, `1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. ### Prerelease Tags If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then it will only be allowed to satisfy comparator sets if at least one comparator with the same `[major, minor, patch]` tuple also has a prerelease tag. For example, the range `>1.2.3-alpha.3` would be allowed to match the version `1.2.3-alpha.7`, but it would *not* be satisfied by `3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater than" `1.2.3-alpha.3` according to the SemVer sort rules. The version range only accepts prerelease tags on the `1.2.3` version. The version `3.4.5` *would* satisfy the range, because it does not have a prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. The purpose for this behavior is twofold. First, prerelease versions frequently are updated very quickly, and contain many breaking changes that are (by the author's design) not yet fit for public consumption. Therefore, by default, they are excluded from range matching semantics. Second, a user who has opted into using a prerelease version has clearly indicated the intent to use *that specific* set of alpha/beta/rc versions. By including a prerelease tag in the range, the user is indicating that they are aware of the risk. However, it is still not appropriate to assume that they have opted into taking a similar risk on the *next* set of prerelease versions. Note that this behavior can be suppressed (treating all prerelease versions as if they were normal versions, for the purpose of range matching) by setting the `includePrerelease` flag on the options object to any [functions](https://github.com/npm/node-semver#functions) that do range matching. #### Prerelease Identifiers The method `.inc` takes an additional `identifier` string argument that will append the value of the string as a prerelease identifier: ```javascript semver.inc('1.2.3', 'prerelease', 'beta') // '1.2.4-beta.0' ``` command-line example: ```bash $ semver 1.2.3 -i prerelease --preid beta 1.2.4-beta.0 ``` Which then can be used to increment further: ```bash $ semver 1.2.4-beta.0 -i prerelease 1.2.4-beta.1 ``` ### Advanced Range Syntax Advanced range syntax desugars to primitive comparators in deterministic ways. Advanced ranges may be combined in the same way as primitive comparators using white space or `||`. #### Hyphen Ranges `X.Y.Z - A.B.C` Specifies an inclusive set. * `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` If a partial version is provided as the first version in the inclusive range, then the missing pieces are replaced with zeroes. * `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` If a partial version is provided as the second version in the inclusive range, then all versions that start with the supplied parts of the tuple are accepted, but nothing that would be greater than the provided tuple parts. * `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` * `1.2.3 - 2` := `>=1.2.3 <3.0.0` #### X-Ranges `1.2.x` `1.X` `1.2.*` `*` Any of `X`, `x`, or `*` may be used to "stand in" for one of the numeric values in the `[major, minor, patch]` tuple. * `*` := `>=0.0.0` (Any version satisfies) * `1.x` := `>=1.0.0 <2.0.0` (Matching major version) * `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) A partial version range is treated as an X-Range, so the special character is in fact optional. * `""` (empty string) := `*` := `>=0.0.0` * `1` := `1.x.x` := `>=1.0.0 <2.0.0` * `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` #### Tilde Ranges `~1.2.3` `~1.2` `~1` Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not. * `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` * `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) * `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) * `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` * `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) * `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) * `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in the `1.2.3` version will be allowed, if they are greater than or equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but `1.2.4-beta.2` would not, because it is a prerelease of a different `[major, minor, patch]` tuple. #### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` Allows changes that do not modify the left-most non-zero element in the `[major, minor, patch]` tuple. In other words, this allows patch and minor updates for versions `1.0.0` and above, patch updates for versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. Many authors treat a `0.x` version as if the `x` were the major "breaking-change" indicator. Caret ranges are ideal when an author may make breaking changes between `0.2.4` and `0.3.0` releases, which is a common practice. However, it presumes that there will *not* be breaking changes between `0.2.4` and `0.2.5`. It allows for changes that are presumed to be additive (but non-breaking), according to commonly observed practices. * `^1.2.3` := `>=1.2.3 <2.0.0` * `^0.2.3` := `>=0.2.3 <0.3.0` * `^0.0.3` := `>=0.0.3 <0.0.4` * `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in the `1.2.3` version will be allowed, if they are greater than or equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but `1.2.4-beta.2` would not, because it is a prerelease of a different `[major, minor, patch]` tuple. * `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the `0.0.3` version *only* will be allowed, if they are greater than or equal to `beta`. So, `0.0.3-pr.2` would be allowed. When parsing caret ranges, a missing `patch` value desugars to the number `0`, but will allow flexibility within that value, even if the major and minor versions are both `0`. * `^1.2.x` := `>=1.2.0 <2.0.0` * `^0.0.x` := `>=0.0.0 <0.1.0` * `^0.0` := `>=0.0.0 <0.1.0` A missing `minor` and `patch` values will desugar to zero, but also allow flexibility within those values, even if the major version is zero. * `^1.x` := `>=1.0.0 <2.0.0` * `^0.x` := `>=0.0.0 <1.0.0` ### Range Grammar Putting all this together, here is a Backus-Naur grammar for ranges, for the benefit of parser authors: ```bnf range-set ::= range ( logical-or range ) * logical-or ::= ( ' ' ) * '||' ( ' ' ) * range ::= hyphen | simple ( ' ' simple ) * | '' hyphen ::= partial ' - ' partial simple ::= primitive | partial | tilde | caret primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? xr ::= 'x' | 'X' | '*' | nr nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * tilde ::= '~' partial caret ::= '^' partial qualifier ::= ( '-' pre )? ( '+' build )? pre ::= parts build ::= parts parts ::= part ( '.' part ) * part ::= nr | [-0-9A-Za-z]+ ``` ## Functions All methods and classes take a final `options` object argument. All options in this object are `false` by default. The options supported are: - `loose` Be more forgiving about not-quite-valid semver strings. (Any resulting output will always be 100% strict compliant, of course.) For backwards compatibility reasons, if the `options` argument is a boolean value instead of an object, it is interpreted to be the `loose` param. - `includePrerelease` Set to suppress the [default behavior](https://github.com/npm/node-semver#prerelease-tags) of excluding prerelease tagged versions from ranges unless they are explicitly opted into. Strict-mode Comparators and Ranges will be strict about the SemVer strings that they parse. * `valid(v)`: Return the parsed version, or null if it's not valid. * `inc(v, release)`: Return the version incremented by the release type (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), or null if it's not valid * `premajor` in one call will bump the version up to the next major version and down to a prerelease of that major version. `preminor`, and `prepatch` work the same way. * If called from a non-prerelease version, the `prerelease` will work the same as `prepatch`. It increments the patch version, then makes a prerelease. If the input version is already a prerelease it simply increments it. * `prerelease(v)`: Returns an array of prerelease components, or null if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` * `major(v)`: Return the major version number. * `minor(v)`: Return the minor version number. * `patch(v)`: Return the patch version number. * `intersects(r1, r2, loose)`: Return true if the two supplied ranges or comparators intersect. * `parse(v)`: Attempt to parse a string as a semantic version, returning either a `SemVer` object or `null`. ### Comparison * `gt(v1, v2)`: `v1 > v2` * `gte(v1, v2)`: `v1 >= v2` * `lt(v1, v2)`: `v1 < v2` * `lte(v1, v2)`: `v1 <= v2` * `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, even if they're not the exact same string. You already know how to compare strings. * `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. * `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call the corresponding function above. `"==="` and `"!=="` do simple string comparison, but are included for completeness. Throws if an invalid comparison string is provided. * `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. * `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions in descending order when passed to `Array.sort()`. * `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions are equal. Sorts in ascending order if passed to `Array.sort()`. `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. * `diff(v1, v2)`: Returns difference between two versions by the release type (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), or null if the versions are the same. ### Comparators * `intersects(comparator)`: Return true if the comparators intersect ### Ranges * `validRange(range)`: Return the valid range or null if it's not valid * `satisfies(version, range)`: Return true if the version satisfies the range. * `maxSatisfying(versions, range)`: Return the highest version in the list that satisfies the range, or `null` if none of them do. * `minSatisfying(versions, range)`: Return the lowest version in the list that satisfies the range, or `null` if none of them do. * `minVersion(range)`: Return the lowest version that can possibly match the given range. * `gtr(version, range)`: Return `true` if version is greater than all the versions possible in the range. * `ltr(version, range)`: Return `true` if version is less than all the versions possible in the range. * `outside(version, range, hilo)`: Return true if the version is outside the bounds of the range in either the high or low direction. The `hilo` argument must be either the string `'>'` or `'<'`. (This is the function called by `gtr` and `ltr`.) * `intersects(range)`: Return true if any of the ranges comparators intersect Note that, since ranges may be non-contiguous, a version might not be greater than a range, less than a range, *or* satisfy a range! For example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` until `2.0.0`, so the version `1.2.10` would not be greater than the range (because `2.0.1` satisfies, which is higher), nor less than the range (since `1.2.8` satisfies, which is lower), and it also does not satisfy the range. If you want to know if a version satisfies or does not satisfy a range, use the `satisfies(version, range)` function. ### Coercion * `coerce(version, options)`: Coerces a string to semver if possible This aims to provide a very forgiving translation of a non-semver string to semver. It looks for the first digit in a string, and consumes all remaining characters which satisfy at least a partial semver (e.g., `1`, `1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes `3.4.0`). Only text which lacks digits will fail coercion (`version one` is not valid). The maximum length for any semver component considered for coercion is 16 characters; longer components will be ignored (`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value components are invalid (`9999999999999999.4.7.4` is likely invalid). If the `options.rtl` flag is set, then `coerce` will return the right-most coercible tuple that does not share an ending index with a longer coercible tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not `4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of any other overlapping SemVer tuple. ### Clean * `clean(version)`: Clean a string to be a valid semver if possible This will return a cleaned and trimmed semver version. If the provided version is not valid a null will be returned. This does not work for ranges. ex. * `s.clean(' = v 2.1.5foo')`: `null` * `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` * `s.clean(' = v 2.1.5-foo')`: `null` * `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` * `s.clean('=v2.1.5')`: `'2.1.5'` * `s.clean(' =v2.1.5')`: `2.1.5` * `s.clean(' 2.1.5 ')`: `'2.1.5'` * `s.clean('~1.0.0')`: `null` ## Exported Modules You may pull in just the part of this semver utility that you need, if you are sensitive to packing and tree-shaking concerns. The main `require('semver')` export uses getter functions to lazily load the parts of the API that are used. The following modules are available: * `require('semver')` * `require('semver/classes')` * `require('semver/classes/comparator')` * `require('semver/classes/range')` * `require('semver/classes/semver')` * `require('semver/functions/clean')` * `require('semver/functions/cmp')` * `require('semver/functions/coerce')` * `require('semver/functions/compare')` * `require('semver/functions/compare-build')` * `require('semver/functions/compare-loose')` * `require('semver/functions/diff')` * `require('semver/functions/eq')` * `require('semver/functions/gt')` * `require('semver/functions/gte')` * `require('semver/functions/inc')` * `require('semver/functions/lt')` * `require('semver/functions/lte')` * `require('semver/functions/major')` * `require('semver/functions/minor')` * `require('semver/functions/neq')` * `require('semver/functions/parse')` * `require('semver/functions/patch')` * `require('semver/functions/prerelease')` * `require('semver/functions/rcompare')` * `require('semver/functions/rsort')` * `require('semver/functions/satisfies')` * `require('semver/functions/sort')` * `require('semver/functions/valid')` * `require('semver/ranges/gtr')` * `require('semver/ranges/intersects')` * `require('semver/ranges/ltr')` * `require('semver/ranges/max-satisfying')` * `require('semver/ranges/min-satisfying')` * `require('semver/ranges/min-version')` * `require('semver/ranges/outside')` * `require('semver/ranges/to-comparators')` * `require('semver/ranges/valid')` node-semver-7.1.3/bin/000077500000000000000000000000001362062110300145105ustar00rootroot00000000000000node-semver-7.1.3/bin/semver.js000077500000000000000000000104131362062110300163510ustar00rootroot00000000000000#!/usr/bin/env node // Standalone semver comparison program. // Exits successfully and prints matching version(s) if // any supplied version is valid and passes all tests. const argv = process.argv.slice(2) let versions = [] const range = [] let inc = null const version = require('../package.json').version let loose = false let includePrerelease = false let coerce = false let rtl = false let identifier const semver = require('../') let reverse = false const options = {} const main = () => { if (!argv.length) return help() while (argv.length) { let a = argv.shift() const indexOfEqualSign = a.indexOf('=') if (indexOfEqualSign !== -1) { a = a.slice(0, indexOfEqualSign) argv.unshift(a.slice(indexOfEqualSign + 1)) } switch (a) { case '-rv': case '-rev': case '--rev': case '--reverse': reverse = true break case '-l': case '--loose': loose = true break case '-p': case '--include-prerelease': includePrerelease = true break case '-v': case '--version': versions.push(argv.shift()) break case '-i': case '--inc': case '--increment': switch (argv[0]) { case 'major': case 'minor': case 'patch': case 'prerelease': case 'premajor': case 'preminor': case 'prepatch': inc = argv.shift() break default: inc = 'patch' break } break case '--preid': identifier = argv.shift() break case '-r': case '--range': range.push(argv.shift()) break case '-c': case '--coerce': coerce = true break case '--rtl': rtl = true break case '--ltr': rtl = false break case '-h': case '--help': case '-?': return help() default: versions.push(a) break } } const options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl } versions = versions.map((v) => { return coerce ? (semver.coerce(v, options) || { version: v }).version : v }).filter((v) => { return semver.valid(v) }) if (!versions.length) return fail() if (inc && (versions.length !== 1 || range.length)) { return failInc() } for (let i = 0, l = range.length; i < l; i++) { versions = versions.filter((v) => { return semver.satisfies(v, range[i], options) }) if (!versions.length) return fail() } return success(versions) } const failInc = () => { console.error('--inc can only be used on a single version with no range') fail() } const fail = () => process.exit(1) const success = () => { const compare = reverse ? 'rcompare' : 'compare' versions.sort((a, b) => { return semver[compare](a, b, options) }).map((v) => { return semver.clean(v, options) }).map((v) => { return inc ? semver.inc(v, inc, options, identifier) : v }).forEach((v, i, _) => { console.log(v) }) } const help = () => console.log( `SemVer ${version} A JavaScript implementation of the https://semver.org/ specification Copyright Isaac Z. Schlueter Usage: semver [options] [ [...]] Prints valid versions sorted by SemVer precedence Options: -r --range Print versions that match the specified range. -i --increment [] Increment a version by the specified level. Level can be one of: major, minor, patch, premajor, preminor, prepatch, or prerelease. Default level is 'patch'. Only one version may be specified. --preid Identifier to be used to prefix premajor, preminor, prepatch or prerelease version increments. -l --loose Interpret versions and ranges loosely -p --include-prerelease Always include prerelease versions in range matching -c --coerce Coerce a string into SemVer if possible (does not imply --loose) --rtl Coerce version strings right to left --ltr Coerce version strings left to right (default) Program exits successfully if any valid version satisfies all supplied ranges, and prints all satisfying versions. If no satisfying versions are found, then exits failure. Versions are printed in ascending order, so supplying multiple versions to the utility will just sort them.`) main() node-semver-7.1.3/classes/000077500000000000000000000000001362062110300153755ustar00rootroot00000000000000node-semver-7.1.3/classes/comparator.js000066400000000000000000000071061362062110300201060ustar00rootroot00000000000000const ANY = Symbol('SemVer ANY') // hoisted class for cyclic dependency class Comparator { static get ANY () { return ANY } constructor (comp, options) { if (!options || typeof options !== 'object') { options = { loose: !!options, includePrerelease: false } } if (comp instanceof Comparator) { if (comp.loose === !!options.loose) { return comp } else { comp = comp.value } } debug('comparator', comp, options) this.options = options this.loose = !!options.loose this.parse(comp) if (this.semver === ANY) { this.value = '' } else { this.value = this.operator + this.semver.version } debug('comp', this) } parse (comp) { const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] const m = comp.match(r) if (!m) { throw new TypeError(`Invalid comparator: ${comp}`) } this.operator = m[1] !== undefined ? m[1] : '' if (this.operator === '=') { this.operator = '' } // if it literally is just '>' or '' then allow anything. if (!m[2]) { this.semver = ANY } else { this.semver = new SemVer(m[2], this.options.loose) } } toString () { return this.value } test (version) { debug('Comparator.test', version, this.options.loose) if (this.semver === ANY || version === ANY) { return true } if (typeof version === 'string') { try { version = new SemVer(version, this.options) } catch (er) { return false } } return cmp(version, this.operator, this.semver, this.options) } intersects (comp, options) { if (!(comp instanceof Comparator)) { throw new TypeError('a Comparator is required') } if (!options || typeof options !== 'object') { options = { loose: !!options, includePrerelease: false } } if (this.operator === '') { if (this.value === '') { return true } return new Range(comp.value, options).test(this.value) } else if (comp.operator === '') { if (comp.value === '') { return true } return new Range(this.value, options).test(comp.semver) } const sameDirectionIncreasing = (this.operator === '>=' || this.operator === '>') && (comp.operator === '>=' || comp.operator === '>') const sameDirectionDecreasing = (this.operator === '<=' || this.operator === '<') && (comp.operator === '<=' || comp.operator === '<') const sameSemVer = this.semver.version === comp.semver.version const differentDirectionsInclusive = (this.operator === '>=' || this.operator === '<=') && (comp.operator === '>=' || comp.operator === '<=') const oppositeDirectionsLessThan = cmp(this.semver, '<', comp.semver, options) && (this.operator === '>=' || this.operator === '>') && (comp.operator === '<=' || comp.operator === '<') const oppositeDirectionsGreaterThan = cmp(this.semver, '>', comp.semver, options) && (this.operator === '<=' || this.operator === '<') && (comp.operator === '>=' || comp.operator === '>') return ( sameDirectionIncreasing || sameDirectionDecreasing || (sameSemVer && differentDirectionsInclusive) || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan ) } } module.exports = Comparator const {re, t} = require('../internal/re') const cmp = require('../functions/cmp') const debug = require('../internal/debug') const SemVer = require('./semver') const Range = require('./range') node-semver-7.1.3/classes/index.js000066400000000000000000000002001362062110300170320ustar00rootroot00000000000000module.exports = { SemVer: require('./semver.js'), Range: require('./range.js'), Comparator: require('./comparator.js') } node-semver-7.1.3/classes/range.js000066400000000000000000000270631362062110300170370ustar00rootroot00000000000000// hoisted class for cyclic dependency class Range { constructor (range, options) { if (!options || typeof options !== 'object') { options = { loose: !!options, includePrerelease: false } } if (range instanceof Range) { if ( range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease ) { return range } else { return new Range(range.raw, options) } } if (range instanceof Comparator) { // just put it in the set and return this.raw = range.value this.set = [[range]] this.format() return this } this.options = options this.loose = !!options.loose this.includePrerelease = !!options.includePrerelease // First, split based on boolean or || this.raw = range this.set = range .split(/\s*\|\|\s*/) // map the range to a 2d array of comparators .map(range => this.parseRange(range.trim())) // throw out any comparator lists that are empty // this generally means that it was not a valid range, which is allowed // in loose mode, but will still throw if the WHOLE range is invalid. .filter(c => c.length) if (!this.set.length) { throw new TypeError(`Invalid SemVer Range: ${range}`) } this.format() } format () { this.range = this.set .map((comps) => { return comps.join(' ').trim() }) .join('||') .trim() return this.range } toString () { return this.range } parseRange (range) { const loose = this.options.loose range = range.trim() // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] range = range.replace(hr, hyphenReplace) debug('hyphen replace', range) // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) debug('comparator trim', range, re[t.COMPARATORTRIM]) // `~ 1.2.3` => `~1.2.3` range = range.replace(re[t.TILDETRIM], tildeTrimReplace) // `^ 1.2.3` => `^1.2.3` range = range.replace(re[t.CARETTRIM], caretTrimReplace) // normalize spaces range = range.split(/\s+/).join(' ') // At this point, the range is completely trimmed and // ready to be split into comparators. const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] return range .split(' ') .map(comp => parseComparator(comp, this.options)) .join(' ') .split(/\s+/) // in loose mode, throw out any that are not valid comparators .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) .map(comp => new Comparator(comp, this.options)) } intersects (range, options) { if (!(range instanceof Range)) { throw new TypeError('a Range is required') } return this.set.some((thisComparators) => { return ( isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => { return ( isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => { return rangeComparators.every((rangeComparator) => { return thisComparator.intersects(rangeComparator, options) }) }) ) }) ) }) } // if ANY of the sets match ALL of its comparators, then pass test (version) { if (!version) { return false } if (typeof version === 'string') { try { version = new SemVer(version, this.options) } catch (er) { return false } } for (let i = 0; i < this.set.length; i++) { if (testSet(this.set[i], version, this.options)) { return true } } return false } } module.exports = Range const Comparator = require('./comparator') const debug = require('../internal/debug') const SemVer = require('./semver') const { re, t, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = require('../internal/re') // take a set of comparators and determine whether there // exists a version which can satisfy it const isSatisfiable = (comparators, options) => { let result = true const remainingComparators = comparators.slice() let testComparator = remainingComparators.pop() while (result && remainingComparators.length) { result = remainingComparators.every((otherComparator) => { return testComparator.intersects(otherComparator, options) }) testComparator = remainingComparators.pop() } return result } // comprised of xranges, tildes, stars, and gtlt's at this point. // already replaced the hyphen ranges // turn into a set of JUST comparators. const parseComparator = (comp, options) => { debug('comp', comp, options) comp = replaceCarets(comp, options) debug('caret', comp) comp = replaceTildes(comp, options) debug('tildes', comp) comp = replaceXRanges(comp, options) debug('xrange', comp) comp = replaceStars(comp, options) debug('stars', comp) return comp } const isX = id => !id || id.toLowerCase() === 'x' || id === '*' // ~, ~> --> * (any, kinda silly) // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 const replaceTildes = (comp, options) => comp.trim().split(/\s+/).map((comp) => { return replaceTilde(comp, options) }).join(' ') const replaceTilde = (comp, options) => { const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] return comp.replace(r, (_, M, m, p, pr) => { debug('tilde', comp, _, M, m, p, pr) let ret if (isX(M)) { ret = '' } else if (isX(m)) { ret = `>=${M}.0.0 <${+M + 1}.0.0` } else if (isX(p)) { // ~1.2 == >=1.2.0 <1.3.0 ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0` } else if (pr) { debug('replaceTilde pr', pr) ret = `>=${M}.${m}.${p}-${pr } <${M}.${+m + 1}.0` } else { // ~1.2.3 == >=1.2.3 <1.3.0 ret = `>=${M}.${m}.${p } <${M}.${+m + 1}.0` } debug('tilde return', ret) return ret }) } // ^ --> * (any, kinda silly) // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 // ^1.2.3 --> >=1.2.3 <2.0.0 // ^1.2.0 --> >=1.2.0 <2.0.0 const replaceCarets = (comp, options) => comp.trim().split(/\s+/).map((comp) => { return replaceCaret(comp, options) }).join(' ') const replaceCaret = (comp, options) => { debug('caret', comp, options) const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] return comp.replace(r, (_, M, m, p, pr) => { debug('caret', comp, _, M, m, p, pr) let ret if (isX(M)) { ret = '' } else if (isX(m)) { ret = `>=${M}.0.0 <${+M + 1}.0.0` } else if (isX(p)) { if (M === '0') { ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0` } else { ret = `>=${M}.${m}.0 <${+M + 1}.0.0` } } else if (pr) { debug('replaceCaret pr', pr) if (M === '0') { if (m === '0') { ret = `>=${M}.${m}.${p}-${pr } <${M}.${m}.${+p + 1}` } else { ret = `>=${M}.${m}.${p}-${pr } <${M}.${+m + 1}.0` } } else { ret = `>=${M}.${m}.${p}-${pr } <${+M + 1}.0.0` } } else { debug('no pr') if (M === '0') { if (m === '0') { ret = `>=${M}.${m}.${p } <${M}.${m}.${+p + 1}` } else { ret = `>=${M}.${m}.${p } <${M}.${+m + 1}.0` } } else { ret = `>=${M}.${m}.${p } <${+M + 1}.0.0` } } debug('caret return', ret) return ret }) } const replaceXRanges = (comp, options) => { debug('replaceXRanges', comp, options) return comp.split(/\s+/).map((comp) => { return replaceXRange(comp, options) }).join(' ') } const replaceXRange = (comp, options) => { comp = comp.trim() const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] return comp.replace(r, (ret, gtlt, M, m, p, pr) => { debug('xRange', comp, ret, gtlt, M, m, p, pr) const xM = isX(M) const xm = xM || isX(m) const xp = xm || isX(p) const anyX = xp if (gtlt === '=' && anyX) { gtlt = '' } // if we're including prereleases in the match, then we need // to fix this to -0, the lowest possible prerelease value pr = options.includePrerelease ? '-0' : '' if (xM) { if (gtlt === '>' || gtlt === '<') { // nothing is allowed ret = '<0.0.0-0' } else { // nothing is forbidden ret = '*' } } else if (gtlt && anyX) { // we know patch is an x, because we have any x at all. // replace X with 0 if (xm) { m = 0 } p = 0 if (gtlt === '>') { // >1 => >=2.0.0 // >1.2 => >=1.3.0 gtlt = '>=' if (xm) { M = +M + 1 m = 0 p = 0 } else { m = +m + 1 p = 0 } } else if (gtlt === '<=') { // <=0.7.x is actually <0.8.0, since any 0.7.x should // pass. Similarly, <=7.x is actually <8.0.0, etc. gtlt = '<' if (xm) { M = +M + 1 } else { m = +m + 1 } } ret = `${gtlt + M}.${m}.${p}${pr}` } else if (xm) { ret = `>=${M}.0.0${pr} <${+M + 1}.0.0${pr}` } else if (xp) { ret = `>=${M}.${m}.0${pr } <${M}.${+m + 1}.0${pr}` } debug('xRange return', ret) return ret }) } // Because * is AND-ed with everything else in the comparator, // and '' means "any version", just remove the *s entirely. const replaceStars = (comp, options) => { debug('replaceStars', comp, options) // Looseness is ignored here. star is always as loose as it gets! return comp.trim().replace(re[t.STAR], '') } // This function is passed to string.replace(re[t.HYPHENRANGE]) // M, m, patch, prerelease, build // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 // 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do // 1.2 - 3.4 => >=1.2.0 <3.5.0 const hyphenReplace = ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) => { if (isX(fM)) { from = '' } else if (isX(fm)) { from = `>=${fM}.0.0` } else if (isX(fp)) { from = `>=${fM}.${fm}.0` } else { from = `>=${from}` } if (isX(tM)) { to = '' } else if (isX(tm)) { to = `<${+tM + 1}.0.0` } else if (isX(tp)) { to = `<${tM}.${+tm + 1}.0` } else if (tpr) { to = `<=${tM}.${tm}.${tp}-${tpr}` } else { to = `<=${to}` } return (`${from} ${to}`).trim() } const testSet = (set, version, options) => { for (let i = 0; i < set.length; i++) { if (!set[i].test(version)) { return false } } if (version.prerelease.length && !options.includePrerelease) { // Find the set of versions that are allowed to have prereleases // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 // That should allow `1.2.3-pr.2` to pass. // However, `1.2.4-alpha.notready` should NOT be allowed, // even though it's within the range set by the comparators. for (let i = 0; i < set.length; i++) { debug(set[i].semver) if (set[i].semver === Comparator.ANY) { continue } if (set[i].semver.prerelease.length > 0) { const allowed = set[i].semver if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) { return true } } } // Version has a -pre, but it's not one of the ones we like. return false } return true } node-semver-7.1.3/classes/semver.js000066400000000000000000000175401362062110300172430ustar00rootroot00000000000000const debug = require('../internal/debug') const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') const { re, t } = require('../internal/re') const { compareIdentifiers } = require('../internal/identifiers') class SemVer { constructor (version, options) { if (!options || typeof options !== 'object') { options = { loose: !!options, includePrerelease: false } } if (version instanceof SemVer) { if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) { return version } else { version = version.version } } else if (typeof version !== 'string') { throw new TypeError(`Invalid Version: ${version}`) } if (version.length > MAX_LENGTH) { throw new TypeError( `version is longer than ${MAX_LENGTH} characters` ) } debug('SemVer', version, options) this.options = options this.loose = !!options.loose // this isn't actually relevant for versions, but keep it so that we // don't run into trouble passing this.options around. this.includePrerelease = !!options.includePrerelease const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) if (!m) { throw new TypeError(`Invalid Version: ${version}`) } this.raw = version // these are actually numbers this.major = +m[1] this.minor = +m[2] this.patch = +m[3] if (this.major > MAX_SAFE_INTEGER || this.major < 0) { throw new TypeError('Invalid major version') } if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { throw new TypeError('Invalid minor version') } if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { throw new TypeError('Invalid patch version') } // numberify any prerelease numeric ids if (!m[4]) { this.prerelease = [] } else { this.prerelease = m[4].split('.').map((id) => { if (/^[0-9]+$/.test(id)) { const num = +id if (num >= 0 && num < MAX_SAFE_INTEGER) { return num } } return id }) } this.build = m[5] ? m[5].split('.') : [] this.format() } format () { this.version = `${this.major}.${this.minor}.${this.patch}` if (this.prerelease.length) { this.version += `-${this.prerelease.join('.')}` } return this.version } toString () { return this.version } compare (other) { debug('SemVer.compare', this.version, this.options, other) if (!(other instanceof SemVer)) { if (typeof other === 'string' && other === this.version) { return 0 } other = new SemVer(other, this.options) } if (other.version === this.version) { return 0 } return this.compareMain(other) || this.comparePre(other) } compareMain (other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options) } return ( compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch) ) } comparePre (other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options) } // NOT having a prerelease is > having one if (this.prerelease.length && !other.prerelease.length) { return -1 } else if (!this.prerelease.length && other.prerelease.length) { return 1 } else if (!this.prerelease.length && !other.prerelease.length) { return 0 } let i = 0 do { const a = this.prerelease[i] const b = other.prerelease[i] debug('prerelease compare', i, a, b) if (a === undefined && b === undefined) { return 0 } else if (b === undefined) { return 1 } else if (a === undefined) { return -1 } else if (a === b) { continue } else { return compareIdentifiers(a, b) } } while (++i) } compareBuild (other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options) } let i = 0 do { const a = this.build[i] const b = other.build[i] debug('prerelease compare', i, a, b) if (a === undefined && b === undefined) { return 0 } else if (b === undefined) { return 1 } else if (a === undefined) { return -1 } else if (a === b) { continue } else { return compareIdentifiers(a, b) } } while (++i) } // preminor will bump the version up to the next minor release, and immediately // down to pre-release. premajor and prepatch work the same way. inc (release, identifier) { switch (release) { case 'premajor': this.prerelease.length = 0 this.patch = 0 this.minor = 0 this.major++ this.inc('pre', identifier) break case 'preminor': this.prerelease.length = 0 this.patch = 0 this.minor++ this.inc('pre', identifier) break case 'prepatch': // If this is already a prerelease, it will bump to the next version // drop any prereleases that might already exist, since they are not // relevant at this point. this.prerelease.length = 0 this.inc('patch', identifier) this.inc('pre', identifier) break // If the input is a non-prerelease version, this acts the same as // prepatch. case 'prerelease': if (this.prerelease.length === 0) { this.inc('patch', identifier) } this.inc('pre', identifier) break case 'major': // If this is a pre-major version, bump up to the same major version. // Otherwise increment major. // 1.0.0-5 bumps to 1.0.0 // 1.1.0 bumps to 2.0.0 if ( this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0 ) { this.major++ } this.minor = 0 this.patch = 0 this.prerelease = [] break case 'minor': // If this is a pre-minor version, bump up to the same minor version. // Otherwise increment minor. // 1.2.0-5 bumps to 1.2.0 // 1.2.1 bumps to 1.3.0 if (this.patch !== 0 || this.prerelease.length === 0) { this.minor++ } this.patch = 0 this.prerelease = [] break case 'patch': // If this is not a pre-release version, it will increment the patch. // If it is a pre-release it will bump up to the same patch version. // 1.2.0-5 patches to 1.2.0 // 1.2.0 patches to 1.2.1 if (this.prerelease.length === 0) { this.patch++ } this.prerelease = [] break // This probably shouldn't be used publicly. // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. case 'pre': if (this.prerelease.length === 0) { this.prerelease = [0] } else { let i = this.prerelease.length while (--i >= 0) { if (typeof this.prerelease[i] === 'number') { this.prerelease[i]++ i = -2 } } if (i === -1) { // didn't increment anything this.prerelease.push(0) } } if (identifier) { // 1.2.0-beta.1 bumps to 1.2.0-beta.2, // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 if (this.prerelease[0] === identifier) { if (isNaN(this.prerelease[1])) { this.prerelease = [identifier, 0] } } else { this.prerelease = [identifier, 0] } } break default: throw new Error(`invalid increment argument: ${release}`) } this.format() this.raw = this.version return this } } module.exports = SemVer node-semver-7.1.3/functions/000077500000000000000000000000001362062110300157505ustar00rootroot00000000000000node-semver-7.1.3/functions/clean.js000066400000000000000000000002771362062110300173760ustar00rootroot00000000000000const parse = require('./parse') const clean = (version, options) => { const s = parse(version.trim().replace(/^[=v]+/, ''), options) return s ? s.version : null } module.exports = clean node-semver-7.1.3/functions/cmp.js000066400000000000000000000016131362062110300170660ustar00rootroot00000000000000const eq = require('./eq') const neq = require('./neq') const gt = require('./gt') const gte = require('./gte') const lt = require('./lt') const lte = require('./lte') const cmp = (a, op, b, loose) => { switch (op) { case '===': if (typeof a === 'object') a = a.version if (typeof b === 'object') b = b.version return a === b case '!==': if (typeof a === 'object') a = a.version if (typeof b === 'object') b = b.version return a !== b case '': case '=': case '==': return eq(a, b, loose) case '!=': return neq(a, b, loose) case '>': return gt(a, b, loose) case '>=': return gte(a, b, loose) case '<': return lt(a, b, loose) case '<=': return lte(a, b, loose) default: throw new TypeError(`Invalid operator: ${op}`) } } module.exports = cmp node-semver-7.1.3/functions/coerce.js000066400000000000000000000027311362062110300175510ustar00rootroot00000000000000const SemVer = require('../classes/semver') const parse = require('./parse') const {re, t} = require('../internal/re') const coerce = (version, options) => { if (version instanceof SemVer) { return version } if (typeof version === 'number') { version = String(version) } if (typeof version !== 'string') { return null } options = options || {} let match = null if (!options.rtl) { match = version.match(re[t.COERCE]) } else { // Find the right-most coercible string that does not share // a terminus with a more left-ward coercible string. // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' // // Walk through the string checking with a /g regexp // Manually set the index so as to pick up overlapping matches. // Stop when we get a match that ends at the string end, since no // coercible string can be more right-ward without the same terminus. let next while ((next = re[t.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length) ) { if (!match || next.index + next[0].length !== match.index + match[0].length) { match = next } re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length } // leave it in a clean state re[t.COERCERTL].lastIndex = -1 } if (match === null) return null return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) } module.exports = coerce node-semver-7.1.3/functions/compare-build.js000066400000000000000000000004131362062110300210270ustar00rootroot00000000000000const SemVer = require('../classes/semver') const compareBuild = (a, b, loose) => { const versionA = new SemVer(a, loose) const versionB = new SemVer(b, loose) return versionA.compare(versionB) || versionA.compareBuild(versionB) } module.exports = compareBuild node-semver-7.1.3/functions/compare-loose.js000066400000000000000000000001661362062110300210560ustar00rootroot00000000000000const compare = require('./compare') const compareLoose = (a, b) => compare(a, b, true) module.exports = compareLoose node-semver-7.1.3/functions/compare.js000066400000000000000000000002341362062110300177330ustar00rootroot00000000000000const SemVer = require('../classes/semver') const compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose)) module.exports = compare node-semver-7.1.3/functions/diff.js000066400000000000000000000011721362062110300172170ustar00rootroot00000000000000const parse = require('./parse') const eq = require('./eq') const diff = (version1, version2) => { if (eq(version1, version2)) { return null } else { const v1 = parse(version1) const v2 = parse(version2) const hasPre = v1.prerelease.length || v2.prerelease.length const prefix = hasPre ? 'pre' : '' const defaultResult = hasPre ? 'prerelease' : '' for (const key in v1) { if (key === 'major' || key === 'minor' || key === 'patch') { if (v1[key] !== v2[key]) { return prefix + key } } } return defaultResult // may be undefined } } module.exports = diff node-semver-7.1.3/functions/eq.js000066400000000000000000000001601362062110300167100ustar00rootroot00000000000000const compare = require('./compare') const eq = (a, b, loose) => compare(a, b, loose) === 0 module.exports = eq node-semver-7.1.3/functions/gt.js000066400000000000000000000001561362062110300167220ustar00rootroot00000000000000const compare = require('./compare') const gt = (a, b, loose) => compare(a, b, loose) > 0 module.exports = gt node-semver-7.1.3/functions/gte.js000066400000000000000000000001611362062110300170630ustar00rootroot00000000000000const compare = require('./compare') const gte = (a, b, loose) => compare(a, b, loose) >= 0 module.exports = gte node-semver-7.1.3/functions/inc.js000066400000000000000000000005201362062110300170540ustar00rootroot00000000000000const SemVer = require('../classes/semver') const inc = (version, release, options, identifier) => { if (typeof (options) === 'string') { identifier = options options = undefined } try { return new SemVer(version, options).inc(release, identifier).version } catch (er) { return null } } module.exports = inc node-semver-7.1.3/functions/lt.js000066400000000000000000000001561362062110300167270ustar00rootroot00000000000000const compare = require('./compare') const lt = (a, b, loose) => compare(a, b, loose) < 0 module.exports = lt node-semver-7.1.3/functions/lte.js000066400000000000000000000001611362062110300170700ustar00rootroot00000000000000const compare = require('./compare') const lte = (a, b, loose) => compare(a, b, loose) <= 0 module.exports = lte node-semver-7.1.3/functions/major.js000066400000000000000000000001721362062110300174160ustar00rootroot00000000000000const SemVer = require('../classes/semver') const major = (a, loose) => new SemVer(a, loose).major module.exports = major node-semver-7.1.3/functions/minor.js000066400000000000000000000001721362062110300174320ustar00rootroot00000000000000const SemVer = require('../classes/semver') const minor = (a, loose) => new SemVer(a, loose).minor module.exports = minor node-semver-7.1.3/functions/neq.js000066400000000000000000000001621362062110300170700ustar00rootroot00000000000000const compare = require('./compare') const neq = (a, b, loose) => compare(a, b, loose) !== 0 module.exports = neq node-semver-7.1.3/functions/parse.js000066400000000000000000000012721362062110300174220ustar00rootroot00000000000000const {MAX_LENGTH} = require('../internal/constants') const { re, t } = require('../internal/re') const SemVer = require('../classes/semver') const parse = (version, options) => { if (!options || typeof options !== 'object') { options = { loose: !!options, includePrerelease: false } } if (version instanceof SemVer) { return version } if (typeof version !== 'string') { return null } if (version.length > MAX_LENGTH) { return null } const r = options.loose ? re[t.LOOSE] : re[t.FULL] if (!r.test(version)) { return null } try { return new SemVer(version, options) } catch (er) { return null } } module.exports = parse node-semver-7.1.3/functions/patch.js000066400000000000000000000001721362062110300174050ustar00rootroot00000000000000const SemVer = require('../classes/semver') const patch = (a, loose) => new SemVer(a, loose).patch module.exports = patch node-semver-7.1.3/functions/prerelease.js000066400000000000000000000003341362062110300204350ustar00rootroot00000000000000const parse = require('./parse') const prerelease = (version, options) => { const parsed = parse(version, options) return (parsed && parsed.prerelease.length) ? parsed.prerelease : null } module.exports = prerelease node-semver-7.1.3/functions/rcompare.js000066400000000000000000000001661362062110300201210ustar00rootroot00000000000000const compare = require('./compare') const rcompare = (a, b, loose) => compare(b, a, loose) module.exports = rcompare node-semver-7.1.3/functions/rsort.js000066400000000000000000000002251362062110300174560ustar00rootroot00000000000000const compareBuild = require('./compare-build') const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) module.exports = rsort node-semver-7.1.3/functions/satisfies.js000066400000000000000000000003511362062110300202770ustar00rootroot00000000000000const Range = require('../classes/range') const satisfies = (version, range, options) => { try { range = new Range(range, options) } catch (er) { return false } return range.test(version) } module.exports = satisfies node-semver-7.1.3/functions/sort.js000066400000000000000000000002231362062110300172720ustar00rootroot00000000000000const compareBuild = require('./compare-build') const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) module.exports = sort node-semver-7.1.3/functions/valid.js000066400000000000000000000002421362062110300174030ustar00rootroot00000000000000const parse = require('./parse') const valid = (version, options) => { const v = parse(version, options) return v ? v.version : null } module.exports = valid node-semver-7.1.3/index.js000066400000000000000000000035511362062110300154110ustar00rootroot00000000000000// just pre-load all the stuff that index.js lazily exports const internalRe = require('./internal/re') module.exports = { re: internalRe.re, src: internalRe.src, tokens: internalRe.t, SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION, SemVer: require('./classes/semver'), compareIdentifiers: require('./internal/identifiers').compareIdentifiers, rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers, parse: require('./functions/parse'), valid: require('./functions/valid'), clean: require('./functions/clean'), inc: require('./functions/inc'), diff: require('./functions/diff'), major: require('./functions/major'), minor: require('./functions/minor'), patch: require('./functions/patch'), prerelease: require('./functions/prerelease'), compare: require('./functions/compare'), rcompare: require('./functions/rcompare'), compareLoose: require('./functions/compare-loose'), compareBuild: require('./functions/compare-build'), sort: require('./functions/sort'), rsort: require('./functions/rsort'), gt: require('./functions/gt'), lt: require('./functions/lt'), eq: require('./functions/eq'), neq: require('./functions/neq'), gte: require('./functions/gte'), lte: require('./functions/lte'), cmp: require('./functions/cmp'), coerce: require('./functions/coerce'), Comparator: require('./classes/comparator'), Range: require('./classes/range'), satisfies: require('./functions/satisfies'), toComparators: require('./ranges/to-comparators'), maxSatisfying: require('./ranges/max-satisfying'), minSatisfying: require('./ranges/min-satisfying'), minVersion: require('./ranges/min-version'), validRange: require('./ranges/valid'), outside: require('./ranges/outside'), gtr: require('./ranges/gtr'), ltr: require('./ranges/ltr'), intersects: require('./ranges/intersects'), } node-semver-7.1.3/internal/000077500000000000000000000000001362062110300155545ustar00rootroot00000000000000node-semver-7.1.3/internal/constants.js000066400000000000000000000007241362062110300201310ustar00rootroot00000000000000// Note: this is the semver.org version of the spec that it implements // Not necessarily the package version of this code. const SEMVER_SPEC_VERSION = '2.0.0' const MAX_LENGTH = 256 const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */ 9007199254740991 // Max safe segment length for coercion. const MAX_SAFE_COMPONENT_LENGTH = 16 module.exports = { SEMVER_SPEC_VERSION, MAX_LENGTH, MAX_SAFE_INTEGER, MAX_SAFE_COMPONENT_LENGTH } node-semver-7.1.3/internal/debug.js000066400000000000000000000003421362062110300171770ustar00rootroot00000000000000const debug = ( typeof process === 'object' && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ) ? (...args) => console.error('SEMVER', ...args) : () => {} module.exports = debug node-semver-7.1.3/internal/identifiers.js000066400000000000000000000006311362062110300204170ustar00rootroot00000000000000const numeric = /^[0-9]+$/ const compareIdentifiers = (a, b) => { const anum = numeric.test(a) const bnum = numeric.test(b) if (anum && bnum) { a = +a b = +b } return a === b ? 0 : (anum && !bnum) ? -1 : (bnum && !anum) ? 1 : a < b ? -1 : 1 } const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) module.exports = { compareIdentifiers, rcompareIdentifiers } node-semver-7.1.3/internal/re.js000066400000000000000000000146111362062110300165230ustar00rootroot00000000000000const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants') const debug = require('./debug') exports = module.exports = {} // The actual regexps go on exports.re const re = exports.re = [] const src = exports.src = [] const t = exports.t = {} let R = 0 const createToken = (name, value, isGlobal) => { const index = R++ debug(index, value) t[name] = index src[index] = value re[index] = new RegExp(value, isGlobal ? 'g' : undefined) } // The following Regular Expressions can be used for tokenizing, // validating, and parsing SemVer version strings. // ## Numeric Identifier // A single `0`, or a non-zero digit followed by zero or more digits. createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') // ## Non-numeric Identifier // Zero or more digits, followed by a letter or hyphen, and then zero or // more letters, digits, or hyphens. createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') // ## Main Version // Three dot-separated numeric identifiers. createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})`) createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) // ## Pre-release Version Identifier // A numeric identifier, or a non-numeric identifier. createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] }|${src[t.NONNUMERICIDENTIFIER]})`) createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] }|${src[t.NONNUMERICIDENTIFIER]})`) // ## Pre-release Version // Hyphen, followed by one or more dot-separated pre-release version // identifiers. createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) // ## Build Metadata Identifier // Any combination of digits, letters, or hyphens. createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') // ## Build Metadata // Plus sign, followed by one or more period-separated build metadata // identifiers. createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] }(?:\\.${src[t.BUILDIDENTIFIER]})*))`) // ## Full Version String // A main version, followed optionally by a pre-release version and // build metadata. // Note that the only major, minor, patch, and pre-release sections of // the version string are capturing groups. The build metadata is not a // capturing group, because it should not ever be used in version // comparison. createToken('FULLPLAIN', `v?${src[t.MAINVERSION] }${src[t.PRERELEASE]}?${ src[t.BUILD]}?`) createToken('FULL', `^${src[t.FULLPLAIN]}$`) // like full, but allows v1.2.3 and =1.2.3, which people do sometimes. // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty // common in the npm registry. createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] }${src[t.PRERELEASELOOSE]}?${ src[t.BUILD]}?`) createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) createToken('GTLT', '((?:<|>)?=?)') // Something like "2.*" or "1.2.x". // Note that "x.x" is a valid xRange identifer, meaning "any version" // Only the first item is strictly required. createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:${src[t.PRERELEASE]})?${ src[t.BUILD]}?` + `)?)?`) createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:${src[t.PRERELEASELOOSE]})?${ src[t.BUILD]}?` + `)?)?`) createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) // Coercion. // Extract anything that could conceivably be a part of a valid semver createToken('COERCE', `${'(^|[^\\d])' + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:$|[^\\d])`) createToken('COERCERTL', src[t.COERCE], true) // Tilde ranges. // Meaning is "reasonably at or greater than" createToken('LONETILDE', '(?:~>?)') createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) exports.tildeTrimReplace = '$1~' createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) // Caret ranges. // Meaning is "at least and backwards compatible with" createToken('LONECARET', '(?:\\^)') createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) exports.caretTrimReplace = '$1^' createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) // A simple gt/lt/eq thing, or just "" to indicate "any version" createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) // An expression to strip any whitespace between the gtlt and the thing // it modifies, so that `> 1.2.3` ==> `>1.2.3` createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) exports.comparatorTrimReplace = '$1$2$3' // Something like `1.2.3 - 1.2.4` // Note that these all use the loose form, because they'll be // checked against either the strict or loose comparator form // later. createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAIN]})` + `\\s*$`) createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAINLOOSE]})` + `\\s*$`) // Star ranges basically just allow anything at all. createToken('STAR', '(<|>)?=?\\s*\\*') node-semver-7.1.3/map.js000066400000000000000000000000741362062110300150540ustar00rootroot00000000000000module.exports = testFile => testFile.replace(/test\//, '') node-semver-7.1.3/package-lock.json000066400000000000000000003524701362062110300171670ustar00rootroot00000000000000{ "name": "semver", "version": "7.1.3", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/generator": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", "dev": true, "requires": { "@babel/types": "^7.7.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/helper-function-name": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.7.4", "@babel/template": "^7.7.4", "@babel/types": "^7.7.4" } }, "@babel/helper-get-function-arity": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", "dev": true, "requires": { "@babel/types": "^7.7.4" } }, "@babel/helper-split-export-declaration": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", "dev": true, "requires": { "@babel/types": "^7.7.4" } }, "@babel/highlight": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { "version": "7.7.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", "dev": true }, "@babel/runtime": { "version": "7.7.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.6.tgz", "integrity": "sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" } }, "@babel/template": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.4", "@babel/types": "^7.7.4" } }, "@babel/traverse": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", "@babel/generator": "^7.7.4", "@babel/helper-function-name": "^7.7.4", "@babel/helper-split-export-declaration": "^7.7.4", "@babel/parser": "^7.7.4", "@babel/types": "^7.7.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "append-transform": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { "default-require-extensions": "^2.0.0" } }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "arg": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", "dev": true }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { "safer-buffer": "~2.1.0" } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "async-hook-domain": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz", "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==", "dev": true, "requires": { "source-map-support": "^0.5.11" } }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, "aws4": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", "dev": true }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, "bind-obj-methods": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "caching-transform": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", "dev": true, "requires": { "hasha": "^3.0.0", "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" }, "dependencies": { "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } } } }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "chokidar": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", "fsevents": "~2.1.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.2.0" } }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" } }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "optional": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "coveralls": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", "dev": true, "requires": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.0", "request": "^2.88.0" } }, "cp-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "make-dir": "^2.0.0", "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" } }, "cross-spawn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" }, "dependencies": { "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "default-require-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { "strip-bom": "^3.0.0" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "diff": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", "dev": true }, "diff-frag": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/diff-frag/-/diff-frag-1.0.1.tgz", "integrity": "sha512-6/v2PC/6UTGcWPPetb9acL8foberUg/CtPdALeJUdD1B/weHNvzftoo00gYznqHGRhHEbykUGzqfG9RWOSr5yw==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "events-to-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "findit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", "dev": true }, "flow-parser": { "version": "0.114.0", "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.114.0.tgz", "integrity": "sha512-Qt9HT3v507bCerJfp4FX4N5E7ysinBzxjpK1rL7bJ/Bw12puF6lva2MAIXYS1d83bV7BT/F7EDk+faJQY5MpRA==", "dev": true }, "flow-remove-types": { "version": "2.114.0", "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.114.0.tgz", "integrity": "sha512-ckon8RO7tFcVGW3Ll0jAWgULVrNa/cEN0JXp2I7XmzWT/GCQghSb+0312NjtAb+y3W9iXpPxkVMI86+SDU0E0Q==", "dev": true, "requires": { "flow-parser": "^0.114.0", "pirates": "^3.0.2", "vlq": "^0.2.1" } }, "foreground-child": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "fs-exists-cached": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fsevents": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", "dev": true, "optional": true }, "function-loop": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "graceful-fs": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, "handlebars": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", "dev": true, "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" } }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "hasha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", "dev": true, "requires": { "is-stream": "^1.0.1" } }, "hosted-git-info": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "istanbul-lib-coverage": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-hook": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { "@babel/generator": "^7.4.0", "@babel/parser": "^7.4.3", "@babel/template": "^7.4.0", "@babel/traverse": "^7.4.3", "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "istanbul-lib-processinfo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz", "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", "dev": true, "requires": { "archy": "^1.0.0", "cross-spawn": "^6.0.5", "istanbul-lib-coverage": "^2.0.3", "rimraf": "^2.6.3", "uuid": "^3.3.2" }, "dependencies": { "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "istanbul-lib-report": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "supports-color": "^6.1.0" }, "dependencies": { "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "istanbul-lib-source-maps": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" } }, "istanbul-reports": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { "handlebars": "^4.1.2" } }, "jackspeak": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz", "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", "dev": true, "requires": { "cliui": "^4.1.0" } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" } }, "lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", "dev": true }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { "source-map": "^0.6.1" } }, "mime-db": { "version": "1.42.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", "dev": true }, "mime-types": { "version": "2.1.25", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", "dev": true, "requires": { "mime-db": "1.42.0" } }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, "minipass": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", "dev": true, "requires": { "yallist": "^4.0.0" }, "dependencies": { "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "nyc": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "requires": { "archy": "^1.0.0", "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", "cp-file": "^6.2.0", "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-hook": "^2.0.7", "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", "istanbul-reports": "^2.2.4", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", "test-exclude": "^5.2.3", "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" } }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "opener": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", "dev": true }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true } } }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "own-or": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", "dev": true }, "own-or-env": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", "dev": true, "requires": { "own-or": "^1.0.0" } }, "p-limit": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", "dev": true, "requires": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" } }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, "picomatch": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" } }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" } }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "optional": true }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "psl": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==", "dev": true }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "react": { "version": "16.12.0", "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" } }, "react-is": { "version": "16.12.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", "dev": true }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "read-pkg-up": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" } }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true } } }, "readdirp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", "dev": true, "requires": { "picomatch": "^2.0.4" } }, "regenerator-runtime": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { "es6-error": "^4.0.1" } }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.0", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", "dev": true, "requires": { "path-parse": "^1.0.6" } }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" } }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "spawn-wrap": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", "os-homedir": "^1.0.1", "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" }, "dependencies": { "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true } } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "tap": { "version": "14.10.2", "resolved": "https://registry.npmjs.org/tap/-/tap-14.10.2.tgz", "integrity": "sha512-JeUDsVrMFmR6b3p9hO9yIT/jibrK6LI7nFza5cqDGsxJyCp7yU3enRgS5nekuoAOzewbrU7P+9QDRDT01urROA==", "dev": true, "requires": { "async-hook-domain": "^1.1.3", "bind-obj-methods": "^2.0.0", "browser-process-hrtime": "^1.0.0", "chokidar": "^3.3.0", "color-support": "^1.1.0", "coveralls": "^3.0.8", "diff": "^4.0.1", "esm": "^3.2.25", "findit": "^2.0.0", "flow-remove-types": "^2.112.0", "foreground-child": "^1.3.3", "fs-exists-cached": "^1.0.0", "function-loop": "^1.0.2", "glob": "^7.1.6", "import-jsx": "^3.0.0", "ink": "^2.5.0", "isexe": "^2.0.0", "istanbul-lib-processinfo": "^1.0.0", "jackspeak": "^1.4.0", "minipass": "^3.1.1", "mkdirp": "^0.5.1", "nyc": "^14.1.1", "opener": "^1.5.1", "own-or": "^1.0.0", "own-or-env": "^1.0.1", "react": "^16.12.0", "rimraf": "^2.7.1", "signal-exit": "^3.0.0", "source-map-support": "^0.5.16", "stack-utils": "^1.0.2", "tap-mocha-reporter": "^5.0.0", "tap-parser": "^10.0.1", "tap-yaml": "^1.0.0", "tcompare": "^3.0.0", "treport": "^1.0.0", "trivial-deferred": "^1.0.1", "ts-node": "^8.5.2", "typescript": "^3.7.2", "which": "^2.0.2", "write-file-atomic": "^3.0.1", "yaml": "^1.7.2", "yapool": "^1.0.0" }, "dependencies": { "@babel/code-frame": { "version": "7.5.5", "bundled": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/core": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.5.5", "@babel/generator": "^7.7.4", "@babel/helpers": "^7.7.4", "@babel/parser": "^7.7.4", "@babel/template": "^7.7.4", "@babel/traverse": "^7.7.4", "@babel/types": "^7.7.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "json5": "^2.1.0", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "@babel/generator": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.7.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.7.4", "@babel/template": "^7.7.4", "@babel/types": "^7.7.4" } }, "@babel/helper-get-function-arity": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.7.4" } }, "@babel/helper-split-export-declaration": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.7.4" } }, "@babel/parser": { "version": "7.7.4", "bundled": true, "dev": true }, "@babel/template": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.4", "@babel/types": "^7.7.4" } }, "@babel/traverse": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.5.5", "@babel/generator": "^7.7.4", "@babel/helper-function-name": "^7.7.4", "@babel/helper-split-export-declaration": "^7.7.4", "@babel/parser": "^7.7.4", "@babel/types": "^7.7.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "convert-source-map": { "version": "1.7.0", "bundled": true, "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, "debug": { "version": "4.1.1", "bundled": true, "dev": true, "requires": { "ms": "^2.1.1" } }, "ms": { "version": "2.1.2", "bundled": true, "dev": true }, "safe-buffer": { "version": "5.1.2", "bundled": true, "dev": true }, "source-map": { "version": "0.5.7", "bundled": true, "dev": true } } }, "@babel/generator": { "version": "7.7.2", "bundled": true, "requires": { "@babel/types": "^7.7.2", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "bundled": true } } }, "@babel/helper-builder-react-jsx": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.7.4", "esutils": "^2.0.0" }, "dependencies": { "@babel/types": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-plugin-utils": { "version": "7.0.0", "bundled": true, "dev": true }, "@babel/helpers": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/template": "^7.7.4", "@babel/traverse": "^7.7.4", "@babel/types": "^7.7.4" }, "dependencies": { "@babel/generator": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.7.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.7.4", "@babel/template": "^7.7.4", "@babel/types": "^7.7.4" } }, "@babel/helper-get-function-arity": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.7.4" } }, "@babel/helper-split-export-declaration": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.7.4" } }, "@babel/parser": { "version": "7.7.4", "bundled": true, "dev": true }, "@babel/template": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.4", "@babel/types": "^7.7.4" } }, "@babel/traverse": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.5.5", "@babel/generator": "^7.7.4", "@babel/helper-function-name": "^7.7.4", "@babel/helper-split-export-declaration": "^7.7.4", "@babel/parser": "^7.7.4", "@babel/types": "^7.7.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "debug": { "version": "4.1.1", "bundled": true, "dev": true, "requires": { "ms": "^2.1.1" } }, "ms": { "version": "2.1.2", "bundled": true, "dev": true }, "source-map": { "version": "0.5.7", "bundled": true, "dev": true } } }, "@babel/highlight": { "version": "7.5.0", "bundled": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^4.0.0" }, "dependencies": { "js-tokens": { "version": "4.0.0", "bundled": true } } }, "@babel/parser": { "version": "7.7.3", "bundled": true }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.7.4" } }, "@babel/plugin-syntax-jsx": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-destructuring": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-react-jsx": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "@babel/helper-builder-react-jsx": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.7.4" } }, "@babel/runtime": { "version": "7.7.4", "bundled": true, "dev": true, "requires": { "regenerator-runtime": "^0.13.2" } }, "@babel/template": { "version": "7.7.0", "bundled": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.0", "@babel/types": "^7.7.0" } }, "@babel/types": { "version": "7.7.2", "bundled": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "@types/color-name": { "version": "1.1.1", "bundled": true, "dev": true }, "@types/prop-types": { "version": "15.7.3", "bundled": true, "dev": true }, "@types/react": { "version": "16.9.13", "bundled": true, "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "ansi-escapes": { "version": "4.3.0", "bundled": true, "dev": true, "requires": { "type-fest": "^0.8.1" } }, "ansi-regex": { "version": "2.1.1", "bundled": true }, "ansi-styles": { "version": "3.2.1", "bundled": true, "requires": { "color-convert": "^1.9.0" } }, "ansicolors": { "version": "0.3.2", "bundled": true, "dev": true }, "arrify": { "version": "1.0.1", "bundled": true, "dev": true }, "astral-regex": { "version": "1.0.0", "bundled": true, "dev": true }, "auto-bind": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "@types/react": "^16.8.12" } }, "caller-callsite": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "callsites": "^2.0.0" } }, "caller-path": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "caller-callsite": "^2.0.0" } }, "callsites": { "version": "2.0.0", "bundled": true, "dev": true }, "cardinal": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" } }, "chalk": { "version": "2.4.2", "bundled": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "ci-info": { "version": "2.0.0", "bundled": true, "dev": true }, "cli-cursor": { "version": "2.1.0", "bundled": true, "dev": true, "requires": { "restore-cursor": "^2.0.0" } }, "cli-truncate": { "version": "1.1.0", "bundled": true, "dev": true, "requires": { "slice-ansi": "^1.0.0", "string-width": "^2.0.0" } }, "color-convert": { "version": "1.9.3", "bundled": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "bundled": true }, "csstype": { "version": "2.6.7", "bundled": true, "dev": true }, "debug": { "version": "2.6.9", "bundled": true, "requires": { "ms": "2.0.0" } }, "emoji-regex": { "version": "7.0.3", "bundled": true, "dev": true }, "escape-string-regexp": { "version": "1.0.5", "bundled": true }, "esprima": { "version": "4.0.1", "bundled": true, "dev": true }, "esutils": { "version": "2.0.3", "bundled": true }, "events-to-array": { "version": "1.1.2", "bundled": true, "dev": true }, "globals": { "version": "11.12.0", "bundled": true, "dev": true }, "has-flag": { "version": "3.0.0", "bundled": true }, "import-jsx": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { "@babel/core": "^7.5.5", "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-transform-destructuring": "^7.5.0", "@babel/plugin-transform-react-jsx": "^7.3.0", "caller-path": "^2.0.0", "resolve-from": "^3.0.0" } }, "ink": { "version": "2.5.0", "bundled": true, "dev": true, "requires": { "@types/react": "^16.8.6", "ansi-escapes": "^4.2.1", "arrify": "^1.0.1", "auto-bind": "^2.0.0", "chalk": "^2.4.1", "cli-cursor": "^2.1.0", "cli-truncate": "^1.1.0", "is-ci": "^2.0.0", "lodash.throttle": "^4.1.1", "log-update": "^3.0.0", "prop-types": "^15.6.2", "react-reconciler": "^0.21.0", "scheduler": "^0.15.0", "signal-exit": "^3.0.2", "slice-ansi": "^1.0.0", "string-length": "^2.0.0", "widest-line": "^2.0.0", "wrap-ansi": "^5.0.0", "yoga-layout-prebuilt": "^1.9.3" } }, "is-ci": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "ci-info": "^2.0.0" } }, "is-fullwidth-code-point": { "version": "2.0.0", "bundled": true, "dev": true }, "js-tokens": { "version": "3.0.2", "bundled": true, "dev": true }, "jsesc": { "version": "2.5.2", "bundled": true }, "json5": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "minimist": "^1.2.0" } }, "lodash": { "version": "4.17.15", "bundled": true }, "lodash.throttle": { "version": "4.1.1", "bundled": true, "dev": true }, "log-update": { "version": "3.3.0", "bundled": true, "dev": true, "requires": { "ansi-escapes": "^3.2.0", "cli-cursor": "^2.1.0", "wrap-ansi": "^5.0.0" }, "dependencies": { "ansi-escapes": { "version": "3.2.0", "bundled": true, "dev": true } } }, "loose-envify": { "version": "1.4.0", "bundled": true, "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "mimic-fn": { "version": "1.2.0", "bundled": true, "dev": true }, "minimist": { "version": "1.2.0", "bundled": true, "dev": true }, "minipass": { "version": "3.1.1", "bundled": true, "dev": true, "requires": { "yallist": "^4.0.0" }, "dependencies": { "yallist": { "version": "4.0.0", "bundled": true, "dev": true } } }, "ms": { "version": "2.0.0", "bundled": true }, "object-assign": { "version": "4.1.1", "bundled": true, "dev": true }, "onetime": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "mimic-fn": "^1.0.0" } }, "path-parse": { "version": "1.0.6", "bundled": true, "dev": true }, "prop-types": { "version": "15.7.2", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "punycode": { "version": "2.1.1", "bundled": true, "dev": true }, "react-is": { "version": "16.10.2", "bundled": true, "dev": true }, "react-reconciler": { "version": "0.21.0", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", "scheduler": "^0.15.0" } }, "redeyed": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "esprima": "~4.0.0" } }, "regenerator-runtime": { "version": "0.13.3", "bundled": true, "dev": true }, "resolve": { "version": "1.12.0", "bundled": true, "dev": true, "requires": { "path-parse": "^1.0.6" } }, "resolve-from": { "version": "3.0.0", "bundled": true, "dev": true }, "restore-cursor": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "scheduler": { "version": "0.15.0", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "semver": { "version": "5.7.1", "bundled": true, "dev": true }, "signal-exit": { "version": "3.0.2", "bundled": true, "dev": true }, "slice-ansi": { "version": "1.0.0", "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0" } }, "source-map": { "version": "0.6.1", "bundled": true }, "string-length": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "astral-regex": "^1.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "bundled": true, "dev": true }, "strip-ansi": { "version": "4.0.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, "string-width": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "bundled": true, "dev": true }, "strip-ansi": { "version": "4.0.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { "ansi-regex": "^2.0.0" } }, "supports-color": { "version": "5.5.0", "bundled": true, "requires": { "has-flag": "^3.0.0" } }, "tap-parser": { "version": "10.0.1", "bundled": true, "dev": true, "requires": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" } }, "tap-yaml": { "version": "1.0.0", "bundled": true, "dev": true, "requires": { "yaml": "^1.5.0" } }, "to-fast-properties": { "version": "2.0.0", "bundled": true }, "treport": { "version": "1.0.0", "bundled": true, "dev": true, "requires": { "cardinal": "^2.1.1", "chalk": "^3.0.0", "import-jsx": "^3.0.0", "ink": "^2.5.0", "ms": "^2.1.2", "string-length": "^3.1.0", "tap-parser": "^10.0.1", "unicode-length": "^2.0.2" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "bundled": true, "dev": true }, "ansi-styles": { "version": "4.2.0", "bundled": true, "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "bundled": true, "dev": true }, "has-flag": { "version": "4.0.0", "bundled": true, "dev": true }, "ms": { "version": "2.1.2", "bundled": true, "dev": true }, "string-length": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "astral-regex": "^1.0.0", "strip-ansi": "^5.2.0" } }, "strip-ansi": { "version": "5.2.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "supports-color": { "version": "7.1.0", "bundled": true, "dev": true, "requires": { "has-flag": "^4.0.0" } }, "unicode-length": { "version": "2.0.2", "bundled": true, "dev": true, "requires": { "punycode": "^2.0.0", "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "bundled": true, "dev": true }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, "requires": { "ansi-regex": "^2.0.0" } } } } } }, "type-fest": { "version": "0.8.1", "bundled": true, "dev": true }, "widest-line": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "string-width": "^2.1.1" } }, "wrap-ansi": { "version": "5.1.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "bundled": true, "dev": true }, "string-width": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "yaml": { "version": "1.7.2", "bundled": true, "dev": true, "requires": { "@babel/runtime": "^7.6.3" } }, "yoga-layout-prebuilt": { "version": "1.9.3", "bundled": true, "dev": true } } }, "tap-mocha-reporter": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.0.tgz", "integrity": "sha512-8HlAtdmYGlDZuW83QbF/dc46L7cN+AGhLZcanX3I9ILvxUAl+G2/mtucNPSXecTlG/4iP1hv6oMo0tMhkn3Tsw==", "dev": true, "requires": { "color-support": "^1.1.0", "debug": "^2.1.3", "diff": "^1.3.2", "escape-string-regexp": "^1.0.3", "glob": "^7.0.5", "readable-stream": "^2.1.5", "tap-parser": "^10.0.0", "tap-yaml": "^1.0.0", "unicode-length": "^1.0.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "diff": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "tap-parser": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.1.tgz", "integrity": "sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg==", "dev": true, "requires": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" } }, "tap-yaml": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", "dev": true, "requires": { "yaml": "^1.5.0" } }, "tcompare": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-3.0.4.tgz", "integrity": "sha512-Q3TitMVK59NyKgQyFh+857wTAUE329IzLDehuPgU4nF5e8g+EUQ+yUbjUy1/6ugiNnXztphT+NnqlCXolv9P3A==", "dev": true, "requires": { "diff-frag": "^1.0.1" } }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "requires": { "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.0.0" } }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" }, "dependencies": { "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true } } }, "trivial-deferred": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", "dev": true }, "ts-node": { "version": "8.5.4", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", "integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==", "dev": true, "requires": { "arg": "^4.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.6", "yn": "^3.0.0" } }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz", "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==", "dev": true }, "uglify-js": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.2.tgz", "integrity": "sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==", "dev": true, "optional": true, "requires": { "commander": "~2.20.3", "source-map": "~0.6.1" } }, "unicode-length": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", "dev": true, "requires": { "punycode": "^1.3.2", "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } } } }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "uuid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yaml": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", "dev": true, "requires": { "@babel/runtime": "^7.6.3" } }, "yapool": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", "dev": true }, "yargs": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.1" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" } } } }, "yargs-parser": { "version": "13.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true } } } node-semver-7.1.3/package.json000066400000000000000000000013261362062110300162300ustar00rootroot00000000000000{ "name": "semver", "version": "7.1.3", "description": "The semantic version parser used by npm.", "main": "index.js", "scripts": { "test": "tap", "snap": "tap", "preversion": "npm test", "postversion": "npm publish", "postpublish": "git push origin --follow-tags" }, "devDependencies": { "tap": "^14.10.2" }, "license": "ISC", "repository": "https://github.com/npm/node-semver", "bin": { "semver": "./bin/semver.js" }, "files": [ "bin", "range.bnf", "classes", "functions", "internal", "ranges", "index.js", "preload.js" ], "tap": { "check-coverage": true, "coverage-map": "map.js" }, "engines": { "node": ">=10" } } node-semver-7.1.3/preload.js000066400000000000000000000001051362062110300157200ustar00rootroot00000000000000// XXX remove in v8 or beyond module.exports = require('./index.js') node-semver-7.1.3/range.bnf000066400000000000000000000011531362062110300155230ustar00rootroot00000000000000range-set ::= range ( logical-or range ) * logical-or ::= ( ' ' ) * '||' ( ' ' ) * range ::= hyphen | simple ( ' ' simple ) * | '' hyphen ::= partial ' - ' partial simple ::= primitive | partial | tilde | caret primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? xr ::= 'x' | 'X' | '*' | nr nr ::= '0' | [1-9] ( [0-9] ) * tilde ::= '~' partial caret ::= '^' partial qualifier ::= ( '-' pre )? ( '+' build )? pre ::= parts build ::= parts parts ::= part ( '.' part ) * part ::= nr | [-0-9A-Za-z]+ node-semver-7.1.3/ranges/000077500000000000000000000000001362062110300152175ustar00rootroot00000000000000node-semver-7.1.3/ranges/gtr.js000066400000000000000000000003311362062110300163460ustar00rootroot00000000000000// Determine if version is greater than all the versions possible in the range. const outside = require('./outside') const gtr = (version, range, options) => outside(version, range, '>', options) module.exports = gtr node-semver-7.1.3/ranges/intersects.js000066400000000000000000000003111362062110300177330ustar00rootroot00000000000000const Range = require('../classes/range') const intersects = (r1, r2, options) => { r1 = new Range(r1, options) r2 = new Range(r2, options) return r1.intersects(r2) } module.exports = intersects node-semver-7.1.3/ranges/ltr.js000066400000000000000000000003251362062110300163560ustar00rootroot00000000000000const outside = require('./outside') // Determine if version is less than all the versions possible in the range const ltr = (version, range, options) => outside(version, range, '<', options) module.exports = ltr node-semver-7.1.3/ranges/max-satisfying.js000066400000000000000000000011031362062110300205130ustar00rootroot00000000000000const SemVer = require('../classes/semver') const Range = require('../classes/range') const maxSatisfying = (versions, range, options) => { let max = null let maxSV = null let rangeObj = null try { rangeObj = new Range(range, options) } catch (er) { return null } versions.forEach((v) => { if (rangeObj.test(v)) { // satisfies(v, range, options) if (!max || maxSV.compare(v) === -1) { // compare(max, v, true) max = v maxSV = new SemVer(max, options) } } }) return max } module.exports = maxSatisfying node-semver-7.1.3/ranges/min-satisfying.js000066400000000000000000000011011362062110300205070ustar00rootroot00000000000000const SemVer = require('../classes/semver') const Range = require('../classes/range') const minSatisfying = (versions, range, options) => { let min = null let minSV = null let rangeObj = null try { rangeObj = new Range(range, options) } catch (er) { return null } versions.forEach((v) => { if (rangeObj.test(v)) { // satisfies(v, range, options) if (!min || minSV.compare(v) === 1) { // compare(min, v, true) min = v minSV = new SemVer(min, options) } } }) return min } module.exports = minSatisfying node-semver-7.1.3/ranges/min-version.js000066400000000000000000000025651362062110300200330ustar00rootroot00000000000000const SemVer = require('../classes/semver') const Range = require('../classes/range') const gt = require('../functions/gt') const minVersion = (range, loose) => { range = new Range(range, loose) let minver = new SemVer('0.0.0') if (range.test(minver)) { return minver } minver = new SemVer('0.0.0-0') if (range.test(minver)) { return minver } minver = null for (let i = 0; i < range.set.length; ++i) { const comparators = range.set[i] comparators.forEach((comparator) => { // Clone to avoid manipulating the comparator's semver object. const compver = new SemVer(comparator.semver.version) switch (comparator.operator) { case '>': if (compver.prerelease.length === 0) { compver.patch++ } else { compver.prerelease.push(0) } compver.raw = compver.format() /* fallthrough */ case '': case '>=': if (!minver || gt(minver, compver)) { minver = compver } break case '<': case '<=': /* Ignore maximum versions */ break /* istanbul ignore next */ default: throw new Error(`Unexpected operation: ${comparator.operator}`) } }) } if (minver && range.test(minver)) { return minver } return null } module.exports = minVersion node-semver-7.1.3/ranges/outside.js000066400000000000000000000042141362062110300172320ustar00rootroot00000000000000const SemVer = require('../classes/semver') const Comparator = require('../classes/comparator') const {ANY} = Comparator const Range = require('../classes/range') const satisfies = require('../functions/satisfies') const gt = require('../functions/gt') const lt = require('../functions/lt') const lte = require('../functions/lte') const gte = require('../functions/gte') const outside = (version, range, hilo, options) => { version = new SemVer(version, options) range = new Range(range, options) let gtfn, ltefn, ltfn, comp, ecomp switch (hilo) { case '>': gtfn = gt ltefn = lte ltfn = lt comp = '>' ecomp = '>=' break case '<': gtfn = lt ltefn = gte ltfn = gt comp = '<' ecomp = '<=' break default: throw new TypeError('Must provide a hilo val of "<" or ">"') } // If it satisifes the range it is not outside if (satisfies(version, range, options)) { return false } // From now on, variable terms are as if we're in "gtr" mode. // but note that everything is flipped for the "ltr" function. for (let i = 0; i < range.set.length; ++i) { const comparators = range.set[i] let high = null let low = null comparators.forEach((comparator) => { if (comparator.semver === ANY) { comparator = new Comparator('>=0.0.0') } high = high || comparator low = low || comparator if (gtfn(comparator.semver, high.semver, options)) { high = comparator } else if (ltfn(comparator.semver, low.semver, options)) { low = comparator } }) // If the edge version comparator has a operator then our version // isn't outside it if (high.operator === comp || high.operator === ecomp) { return false } // If the lowest version comparator has an operator and our version // is less than it then it isn't higher than the range if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) { return false } else if (low.operator === ecomp && ltfn(version, low.semver)) { return false } } return true } module.exports = outside node-semver-7.1.3/ranges/to-comparators.js000066400000000000000000000004141362062110300205260ustar00rootroot00000000000000const Range = require('../classes/range') // Mostly just for testing and legacy API reasons const toComparators = (range, options) => new Range(range, options).set .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) module.exports = toComparators node-semver-7.1.3/ranges/valid.js000066400000000000000000000004701362062110300166550ustar00rootroot00000000000000const Range = require('../classes/range') const validRange = (range, options) => { try { // Return '*' instead of '' so that truthiness works. // This will throw if it's invalid anyway return new Range(range, options).range || '*' } catch (er) { return null } } module.exports = validRange node-semver-7.1.3/tap-snapshots/000077500000000000000000000000001362062110300165445ustar00rootroot00000000000000node-semver-7.1.3/tap-snapshots/test-bin-semver.js-TAP.test.js000066400000000000000000000232341362062110300241450ustar00rootroot00000000000000/* IMPORTANT * This snapshot file is auto-generated, but designed for humans. * It should be checked into source control and tracked carefully. * Re-generate by setting TAP_SNAPSHOT=1 and running tests. * Make sure to inspect the output below. Do not ignore changes! */ 'use strict' exports[`test/bin/semver.js TAP coercing > 1.2.3.4.5.6 -c --rtl --ltr 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n", "signal": null, } ` exports[`test/bin/semver.js TAP coercing > 1.2.3.4.5.6 -c --rtl 1`] = ` Object { "code": 0, "err": "", "out": "4.5.6\\n", "signal": null, } ` exports[`test/bin/semver.js TAP coercing > 1.2.3.4.5.6 -c 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n", "signal": null, } ` exports[`test/bin/semver.js TAP coercing > not a version -c 1`] = ` Object { "code": 1, "err": "", "out": "", "signal": null, } ` exports[`test/bin/semver.js TAP coercing > not a version 1.2.3 -c 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n", "signal": null, } ` exports[`test/bin/semver.js TAP help output > (no args) 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/bin/semver.js TAP help output > --help 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/bin/semver.js TAP help output > -? 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/bin/semver.js TAP help output > -h 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/bin/semver.js TAP inc tests > -i 1.2.3 1`] = ` Object { "code": 0, "err": "", "out": "1.2.4\\n", "signal": null, } ` exports[`test/bin/semver.js TAP inc tests > -i major 1.0.0 1`] = ` Object { "code": 0, "err": "", "out": "2.0.0\\n", "signal": null, } ` exports[`test/bin/semver.js TAP inc tests > -i major 1.0.0 1.0.1 1`] = ` Object { "code": 1, "err": "--inc can only be used on a single version with no range\\n", "out": "", "signal": null, } ` exports[`test/bin/semver.js TAP inc tests > -i premajor 1.0.0 --preid=beta 1`] = ` Object { "code": 0, "err": "", "out": "2.0.0-0\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 -v 3.2.1 --version 2.3.4 -rv 1`] = ` Object { "code": 0, "err": "", "out": "3.2.1\\n2.3.4\\n1.2.3\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 -v 3.2.1 --version 2.3.4 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n2.3.4\\n3.2.1\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 3.2.1 -r 2.x 1`] = ` Object { "code": 1, "err": "", "out": "", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 3.2.1 -r 2.x 2.3.4 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n2.3.4\\n3.2.1\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 2.3.4-beta 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n2.3.4-beta\\n2.3.4\\n3.2.1\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 2.3.4-beta 2.0.0asdf -r 2.x -p 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4-beta\\n2.3.4\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 2.3.4-beta 2.0.0asdf -r 2.x 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3foo 1.2.3-bar -l 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3-bar\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 1.2.3foo 1.2.3-bar 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3-bar\\n", "signal": null, } ` exports[`test/bin/semver.js TAP sorting and filtering > 3.2.1 2.3.4 2.3.4-beta 2.0.0asdf -r 2.x -p -l 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4-beta\\n2.3.4\\n", "signal": null, } ` node-semver-7.1.3/tap-snapshots/test-cli.js-TAP.test.js000066400000000000000000000227641362062110300226540ustar00rootroot00000000000000/* IMPORTANT * This snapshot file is auto-generated, but designed for humans. * It should be checked into source control and tracked carefully. * Re-generate by setting TAP_SNAPSHOT=1 and running tests. * Make sure to inspect the output below. Do not ignore changes! */ 'use strict' exports[`test/cli.js TAP coercing > 1.2.3.4.5.6 -c --rtl --ltr 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n", "signal": null, } ` exports[`test/cli.js TAP coercing > 1.2.3.4.5.6 -c --rtl 1`] = ` Object { "code": 0, "err": "", "out": "4.5.6\\n", "signal": null, } ` exports[`test/cli.js TAP coercing > 1.2.3.4.5.6 -c 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n", "signal": null, } ` exports[`test/cli.js TAP coercing > not a version -c 1`] = ` Object { "code": 1, "err": "", "out": "", "signal": null, } ` exports[`test/cli.js TAP coercing > not a version 1.2.3 -c 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n", "signal": null, } ` exports[`test/cli.js TAP help output > (no args) 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/cli.js TAP help output > --help 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/cli.js TAP help output > -? 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/cli.js TAP help output > -h 1`] = ` Object { "code": 0, "err": "", "out": "SemVer @@VERSION@@\\n\\nA JavaScript implementation of the https://semver.org/ specification\\nCopyright Isaac Z. Schlueter\\n\\nUsage: semver [options] [ [...]]\\nPrints valid versions sorted by SemVer precedence\\n\\nOptions:\\n-r --range \\n Print versions that match the specified range.\\n\\n-i --increment []\\n Increment a version by the specified level. Level can\\n be one of: major, minor, patch, premajor, preminor,\\n prepatch, or prerelease. Default level is 'patch'.\\n Only one version may be specified.\\n\\n--preid \\n Identifier to be used to prefix premajor, preminor,\\n prepatch or prerelease version increments.\\n\\n-l --loose\\n Interpret versions and ranges loosely\\n\\n-p --include-prerelease\\n Always include prerelease versions in range matching\\n\\n-c --coerce\\n Coerce a string into SemVer if possible\\n (does not imply --loose)\\n\\n--rtl\\n Coerce version strings right to left\\n\\n--ltr\\n Coerce version strings left to right (default)\\n\\nProgram exits successfully if any valid version satisfies\\nall supplied ranges, and prints all satisfying versions.\\n\\nIf no satisfying versions are found, then exits failure.\\n\\nVersions are printed in ascending order, so supplying\\nmultiple versions to the utility will just sort them.\\n", "signal": null, } ` exports[`test/cli.js TAP inc tests > -i 1.2.3 1`] = ` Object { "code": 0, "err": "", "out": "1.2.4\\n", "signal": null, } ` exports[`test/cli.js TAP inc tests > -i major 1.0.0 1`] = ` Object { "code": 0, "err": "", "out": "2.0.0\\n", "signal": null, } ` exports[`test/cli.js TAP inc tests > -i major 1.0.0 1.0.1 1`] = ` Object { "code": 1, "err": "--inc can only be used on a single version with no range\\n", "out": "", "signal": null, } ` exports[`test/cli.js TAP inc tests > -i premajor 1.0.0 --preid=beta 1`] = ` Object { "code": 0, "err": "", "out": "2.0.0-0\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 -v 3.2.1 --version 2.3.4 -rv 1`] = ` Object { "code": 0, "err": "", "out": "3.2.1\\n2.3.4\\n1.2.3\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 -v 3.2.1 --version 2.3.4 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n2.3.4\\n3.2.1\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 3.2.1 -r 2.x 1`] = ` Object { "code": 1, "err": "", "out": "", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 3.2.1 -r 2.x 2.3.4 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n2.3.4\\n3.2.1\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 2.3.4-beta 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3\\n2.3.4-beta\\n2.3.4\\n3.2.1\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 2.3.4-beta 2.0.0asdf -r 2.x -p 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4-beta\\n2.3.4\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3 3.2.1 2.3.4 2.3.4-beta 2.0.0asdf -r 2.x 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3foo 1.2.3-bar -l 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3-bar\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 1.2.3foo 1.2.3-bar 1`] = ` Object { "code": 0, "err": "", "out": "1.2.3-bar\\n", "signal": null, } ` exports[`test/cli.js TAP sorting and filtering > 3.2.1 2.3.4 2.3.4-beta 2.0.0asdf -r 2.x -p -l 1`] = ` Object { "code": 0, "err": "", "out": "2.3.4-beta\\n2.3.4\\n", "signal": null, } ` node-semver-7.1.3/test/000077500000000000000000000000001362062110300147175ustar00rootroot00000000000000node-semver-7.1.3/test/bin/000077500000000000000000000000001362062110300154675ustar00rootroot00000000000000node-semver-7.1.3/test/bin/semver.js000066400000000000000000000040161362062110300173270ustar00rootroot00000000000000'use strict' const t = require('tap') const thisVersion = require('../../package.json').version t.cleanSnapshot = str => str.split(thisVersion).join('@@VERSION@@') const spawn = require('child_process').spawn const bin = require.resolve('../../bin/semver') const run = args => new Promise((resolve, reject) => { const c = spawn(process.execPath, [bin].concat(args)) c.on('error', reject) const out = [] const err = [] c.stdout.setEncoding('utf-8') c.stdout.on('data', chunk => out.push(chunk)) c.stderr.setEncoding('utf-8') c.stderr.on('data', chunk => err.push(chunk)) c.on('close', (code, signal) => { resolve({ out: out.join(''), err: err.join(''), code: code, signal: signal }) }) }) t.test('inc tests', t => Promise.all([ ['-i', 'major', '1.0.0'], ['-i', 'major', '1.0.0', '1.0.1'], ['-i', 'premajor', '1.0.0', '--preid=beta'], ['-i', '1.2.3'] ].map(args => t.resolveMatchSnapshot(run(args), args.join(' '))))) t.test('help output', t => Promise.all([ ['-h'], ['-?'], ['--help'], [] ].map(h => t.resolveMatchSnapshot(run(h), h[0] || '(no args)')))) t.test('sorting and filtering', t => Promise.all([ ['1.2.3', '3.2.1', '2.3.4'], ['1.2.3', '3.2.1', '2.3.4', '2.3.4-beta'], ['1.2.3', '-v', '3.2.1', '--version', '2.3.4'], ['1.2.3', '-v', '3.2.1', '--version', '2.3.4', '-rv'], ['1.2.3foo', '1.2.3-bar'], ['1.2.3foo', '1.2.3-bar', '-l'], ['1.2.3', '3.2.1', '-r', '2.x', '2.3.4'], ['1.2.3', '3.2.1', '2.3.4', '2.3.4-beta', '2.0.0asdf', '-r', '2.x'], ['1.2.3', '3.2.1', '2.3.4', '2.3.4-beta', '2.0.0asdf', '-r', '2.x', '-p'], ['3.2.1', '2.3.4', '2.3.4-beta', '2.0.0asdf', '-r', '2.x', '-p', '-l'], ['1.2.3', '3.2.1', '-r', '2.x'] ].map(args => t.resolveMatchSnapshot(run(args), args.join(' '))))) t.test('coercing', t => Promise.all([ ['1.2.3.4.5.6', '-c'], ['1.2.3.4.5.6', '-c', '--rtl'], ['1.2.3.4.5.6', '-c', '--rtl', '--ltr'], ['not a version', '1.2.3', '-c'], ['not a version', '-c'] ].map(args => t.resolveMatchSnapshot(run(args), args.join(' '))))) node-semver-7.1.3/test/classes/000077500000000000000000000000001362062110300163545ustar00rootroot00000000000000node-semver-7.1.3/test/classes/comparator.js000066400000000000000000000033341362062110300210640ustar00rootroot00000000000000const { test } = require('tap') const Comparator = require('../../classes/comparator') const comparatorIntersection = require('../fixtures/comparator-intersection.js') test('comparator testing', t => { const c = new Comparator('>=1.2.3') t.ok(c.test('1.2.4')) const c2 = new Comparator(c) t.ok(c2.test('1.2.4')) const c3 = new Comparator(c, true) t.ok(c3.test('1.2.4')) // test an invalid version, should not throw const c4 = new Comparator(c) t.notOk(c4.test('not a version string')) t.end() }) test('tostrings', (t) => { t.equal(new Comparator('>= v1.2.3').toString(), '>=1.2.3') t.end() }) test('intersect comparators', (t) => { t.plan(comparatorIntersection.length) comparatorIntersection.forEach(([c0, c1, expect]) => t.test(`${c0} ${c1} ${expect}`, t => { const comp0 = new Comparator(c0) const comp1 = new Comparator(c1) t.equal(comp0.intersects(comp1, false), expect, `${c0} intersects ${c1}`) t.equal(comp1.intersects(comp0, { loose: false }), expect, `${c1} intersects ${c0}`) t.end() })) }) test('intersect demands another comparator', t => { const c = new Comparator('>=1.2.3') t.throws(() => c.intersects(), new TypeError('a Comparator is required')) t.end() }) test('ANY matches anything', t => { const c = new Comparator('') t.ok(c.test('1.2.3'), 'ANY matches anything') const c1 = new Comparator('>=1.2.3') const ANY = Comparator.ANY t.ok(c.test(ANY), 'anything matches ANY') t.end() }) test('invalid comparator parse throws', t => { t.throws(() => new Comparator('foo bar baz'), new TypeError('Invalid comparator: foo bar baz')) t.end() }) test('= is ignored', t => { t.match(new Comparator('=1.2.3'), new Comparator('1.2.3')) t.end() }) node-semver-7.1.3/test/classes/index.js000066400000000000000000000003551362062110300200240ustar00rootroot00000000000000const t = require('tap') t.same(require('../../classes'), { SemVer: require('../../classes/semver'), Range: require('../../classes/range'), Comparator: require('../../classes/comparator') }, 'export all classes at semver/classes') node-semver-7.1.3/test/classes/range.js000066400000000000000000000062561362062110300200170ustar00rootroot00000000000000const { test } = require('tap') const Range = require('../../classes/range') const Comparator = require('../../classes/comparator') const rangeIntersection = require('../fixtures/range-intersection.js') const rangeInclude = require('../fixtures/range-include.js') const rangeExclude = require('../fixtures/range-exclude.js') const rangeParse = require('../fixtures/range-parse.js') test('range tests', t => { t.plan(rangeInclude.length) rangeInclude.forEach(([range, ver, options]) => { const r = new Range(range, options) t.ok(r.test(ver), `${range} satisfied by ${ver}`) }) }) test('range parsing', t => { t.plan(rangeParse.length) rangeParse.forEach(([range, expect, options]) => t.test(`${range} ${expect}`, t => { if (expect === null) t.throws(() => new Range(range), TypeError, `invalid range: ${range}`) else { t.equal(new Range(range, options).range || '*', expect, `${range} => ${expect}`) t.equal(new Range(range, options).range, new Range(expect).range, 'parsing both yields same result') } t.end() })) }) test('throw for empty comparator set, even in loose mode', t => { t.throws(() => new Range('sadf||asdf', { loose: true }), TypeError('Invalid SemVer Range: sadf||asdf')) t.end() }) test('convert comparator to range', t => { const c = new Comparator('>=1.2.3') const r = new Range(c) t.equal(r.raw, c.value, 'created range from comparator') t.end() }) test('range as argument to range ctor', t => { const loose = new Range('1.2.3', { loose: true }) t.equal(new Range(loose, { loose: true }), loose, 'loose option') t.equal(new Range(loose, true), loose, 'loose boolean') t.notEqual(new Range(loose), loose, 'created new range if not matched') const incPre = new Range('1.2.3', {includePrerelease: true}) t.equal(new Range(incPre, {includePrerelease: true}), incPre, 'include prerelease, option match returns argument') t.notEqual(new Range(incPre), incPre, 'include prerelease, option mismatch does not return argument') t.end() }) test('negative range tests', t => { t.plan(rangeExclude.length) rangeExclude.forEach(([range, ver, options]) => { const r = new Range(range, options) t.notOk(r.test(ver), `${range} not satisfied by ${ver}`) }) }) test('strict vs loose ranges', (t) => { [ ['>=01.02.03', '>=1.2.3'], ['~1.02.03beta', '>=1.2.3-beta <1.3.0'] ].forEach(([loose, comps]) => { t.throws(() => new Range(loose)) t.equal(new Range(loose, true).range, comps) }) t.end() }) test('tostrings', (t) => { t.equal(new Range('>= v1.2.3').toString(), '>=1.2.3') t.end() }) test('ranges intersect', (t) => { rangeIntersection.forEach(([r0, r1, expect]) => { t.test(`${r0} <~> ${r1}`, t => { const range0 = new Range(r0) const range1 = new Range(r1) t.equal(range0.intersects(range1), expect, `${r0} <~> ${r1} objects`) t.equal(range1.intersects(range0), expect, `${r1} <~> ${r0} objects`) t.end() }) }) t.end() }) test('missing range parameter in range intersect', (t) => { t.throws(() => { new Range('1.0.0').intersects() }, new TypeError('a Range is required'), 'throws type error') t.end() }) node-semver-7.1.3/test/classes/semver.js000066400000000000000000000076401362062110300202220ustar00rootroot00000000000000const { test } = require('tap') const SemVer = require('../../classes/semver') const increments = require('../fixtures/increments.js') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') const invalidVersions = require('../fixtures/invalid-versions') test('comparisons', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, opt]) => t.test(`${v0} ${v1}`, t => { const s0 = new SemVer(v0, opt) const s1 = new SemVer(v1, opt) t.equal(s0.compare(s1), 1) t.equal(s0.compare(v1), 1) t.equal(s1.compare(s0), -1) t.equal(s1.compare(v0), -1) t.equal(s0.compare(v0), 0) t.equal(s1.compare(v1), 0) t.end() })) }) test('equality', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { const s0 = new SemVer(v0, loose) const s1 = new SemVer(v1, loose) t.equal(s0.compare(s1), 0) t.equal(s1.compare(s0), 0) t.equal(s0.compare(v1), 0) t.equal(s1.compare(v0), 0) t.equal(s0.compare(s0), 0) t.equal(s1.compare(s1), 0) t.equal(s0.comparePre(s1), 0, 'comparePre just to hit that code path') t.end() })) }) test('toString equals parsed version', t => { t.equal(String(new SemVer('v1.2.3')), '1.2.3') t.end() }) test('throws when presented with garbage', t => { t.plan(invalidVersions.length) invalidVersions.forEach(([v, msg, opts]) => t.throws(() => new SemVer(v, opts), msg)) }) test('return SemVer arg to ctor if options match', t => { const s = new SemVer('1.2.3', { loose: true, includePrerelease: true }) t.equal(new SemVer(s, {loose: true, includePrerelease: true}), s, 'get same object when options match') t.notEqual(new SemVer(s), s, 'get new object when options match') t.end() }) test('really big numeric prerelease value', (t) => { const r = new SemVer(`1.2.3-beta.${Number.MAX_SAFE_INTEGER}0`) t.strictSame(r.prerelease, [ 'beta', '90071992547409910' ]) t.end() }) test('invalid version numbers', (t) => { ['1.2.3.4', 'NOT VALID', 1.2, null, 'Infinity.NaN.Infinity' ].forEach((v) => { t.throws(() => { new SemVer(v) // eslint-disable-line no-new }, { name: 'TypeError', message: `Invalid Version: ${v}` }) }) t.end() }) test('incrementing', t => { t.plan(increments.length) increments.forEach(([ version, inc, expect, options, id, ]) => t.test(`${version} ${inc} ${id || ''}`.trim(), t => { t.plan(1) if (expect === null) t.throws(() => new SemVer(version, options).inc(inc, id)) else t.equal(new SemVer(version, options).inc(inc, id).version, expect) })) }) test('compare main vs pre', (t) => { const s = new SemVer('1.2.3') t.equal(s.compareMain('2.3.4'), -1) t.equal(s.compareMain('1.2.4'), -1) t.equal(s.compareMain('0.1.2'), 1) t.equal(s.compareMain('1.2.2'), 1) t.equal(s.compareMain('1.2.3-pre'), 0) const p = new SemVer('1.2.3-alpha.0.pr.1') t.equal(p.comparePre('9.9.9-alpha.0.pr.1'), 0) t.equal(p.comparePre('1.2.3'), -1) t.equal(p.comparePre('1.2.3-alpha.0.pr.2'), -1) t.equal(p.comparePre('1.2.3-alpha.0.2'), 1) t.end() }) test('invalid version numbers', (t) => { ['1.2.3.4', 'NOT VALID', 1.2, null, 'Infinity.NaN.Infinity' ].forEach((v) => { t.throws(() => { new SemVer(v) // eslint-disable-line no-new }, { name: 'TypeError', message: `Invalid Version: ${v}` }) }) t.end() }) test('compareBuild', (t) => { const noBuild = new SemVer('1.0.0') const build0 = new SemVer('1.0.0+0') const build1 = new SemVer('1.0.0+1') const build10 = new SemVer('1.0.0+1.0') t.equal(noBuild.compareBuild(build0), -1) t.equal(build0.compareBuild(build0), 0) t.equal(build0.compareBuild(noBuild), 1) t.equal(build0.compareBuild('1.0.0+0.0'), -1) t.equal(build0.compareBuild(build1), -1) t.equal(build1.compareBuild(build0), 1) t.equal(build10.compareBuild(build1), 1) t.end() }) node-semver-7.1.3/test/fixtures/000077500000000000000000000000001362062110300165705ustar00rootroot00000000000000node-semver-7.1.3/test/fixtures/comparator-intersection.js000066400000000000000000000020701362062110300240000ustar00rootroot00000000000000// c0, c1, expected interesection module.exports = [ // One is a Version ['1.3.0', '>=1.3.0', true], ['1.3.0', '>1.3.0', false], ['>=1.3.0', '1.3.0', true], ['>1.3.0', '1.3.0', false], // Same direction increasing ['>1.3.0', '>1.2.0', true], ['>1.2.0', '>1.3.0', true], ['>=1.2.0', '>1.3.0', true], ['>1.2.0', '>=1.3.0', true], // Same direction decreasing ['<1.3.0', '<1.2.0', true], ['<1.2.0', '<1.3.0', true], ['<=1.2.0', '<1.3.0', true], ['<1.2.0', '<=1.3.0', true], // Different directions, same semver and inclusive operator ['>=1.3.0', '<=1.3.0', true], ['>=v1.3.0', '<=1.3.0', true], ['>=1.3.0', '>=1.3.0', true], ['<=1.3.0', '<=1.3.0', true], ['<=1.3.0', '<=v1.3.0', true], ['>1.3.0', '<=1.3.0', false], ['>=1.3.0', '<1.3.0', false], // Opposite matching directions ['>1.0.0', '<2.0.0', true], ['>=1.0.0', '<2.0.0', true], ['>=1.0.0', '<=2.0.0', true], ['>1.0.0', '<=2.0.0', true], ['<=2.0.0', '>1.0.0', true], ['<=1.0.0', '>=2.0.0', false], ['', '', true], ['', '>1.0.0', true], ['<=2.0.0', '', true], ] node-semver-7.1.3/test/fixtures/comparisons.js000066400000000000000000000020461362062110300214650ustar00rootroot00000000000000// [version1, version2] // version1 should be greater than version2 // used by the cmp, eq, gt, lt, and neq tests module.exports = [ ['0.0.0', '0.0.0-foo'], ['0.0.1', '0.0.0'], ['1.0.0', '0.9.9'], ['0.10.0', '0.9.0'], ['0.99.0', '0.10.0', {}], ['2.0.0', '1.2.3', { loose: false }], ['v0.0.0', '0.0.0-foo', true], ['v0.0.1', '0.0.0', { loose: true }], ['v1.0.0', '0.9.9', true], ['v0.10.0', '0.9.0', true], ['v0.99.0', '0.10.0', true], ['v2.0.0', '1.2.3', true], ['0.0.0', 'v0.0.0-foo', true], ['0.0.1', 'v0.0.0', true], ['1.0.0', 'v0.9.9', true], ['0.10.0', 'v0.9.0', true], ['0.99.0', 'v0.10.0', true], ['2.0.0', 'v1.2.3', true], ['1.2.3', '1.2.3-asdf'], ['1.2.3', '1.2.3-4'], ['1.2.3', '1.2.3-4-foo'], ['1.2.3-5-foo', '1.2.3-5'], ['1.2.3-5', '1.2.3-4'], ['1.2.3-5-foo', '1.2.3-5-Foo'], ['3.0.0', '2.7.2+asdf'], ['1.2.3-a.10', '1.2.3-a.5'], ['1.2.3-a.b', '1.2.3-a.5'], ['1.2.3-a.b', '1.2.3-a'], ['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100'], ['1.2.3-r2', '1.2.3-r100'], ['1.2.3-r100', '1.2.3-R2'] ] node-semver-7.1.3/test/fixtures/equality.js000066400000000000000000000026251362062110300207700ustar00rootroot00000000000000// [version1, version2] // version1 should be equivalent to version2 module.exports = [ ['1.2.3', 'v1.2.3', true], ['1.2.3', '=1.2.3', true], ['1.2.3', 'v 1.2.3', true], ['1.2.3', '= 1.2.3', true], ['1.2.3', ' v1.2.3', true], ['1.2.3', ' =1.2.3', true], ['1.2.3', ' v 1.2.3', true], ['1.2.3', ' = 1.2.3', true], ['1.2.3-0', 'v1.2.3-0', true], ['1.2.3-0', '=1.2.3-0', true], ['1.2.3-0', 'v 1.2.3-0', true], ['1.2.3-0', '= 1.2.3-0', true], ['1.2.3-0', ' v1.2.3-0', true], ['1.2.3-0', ' =1.2.3-0', true], ['1.2.3-0', ' v 1.2.3-0', true], ['1.2.3-0', ' = 1.2.3-0', true], ['1.2.3-1', 'v1.2.3-1', true], ['1.2.3-1', '=1.2.3-1', true], ['1.2.3-1', 'v 1.2.3-1', true], ['1.2.3-1', '= 1.2.3-1', true], ['1.2.3-1', ' v1.2.3-1', true], ['1.2.3-1', ' =1.2.3-1', true], ['1.2.3-1', ' v 1.2.3-1', true], ['1.2.3-1', ' = 1.2.3-1', true], ['1.2.3-beta', 'v1.2.3-beta', true], ['1.2.3-beta', '=1.2.3-beta', true], ['1.2.3-beta', 'v 1.2.3-beta', true], ['1.2.3-beta', '= 1.2.3-beta', true], ['1.2.3-beta', ' v1.2.3-beta', true], ['1.2.3-beta', ' =1.2.3-beta', true], ['1.2.3-beta', ' v 1.2.3-beta', true], ['1.2.3-beta', ' = 1.2.3-beta', true], ['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild', true], ['1.2.3+build', ' = 1.2.3+otherbuild', true], ['1.2.3-beta+build', '1.2.3-beta+otherbuild'], ['1.2.3+build', '1.2.3+otherbuild'], [' v1.2.3+build', '1.2.3+otherbuild'] ] node-semver-7.1.3/test/fixtures/increments.js000066400000000000000000000104601362062110300212760ustar00rootroot00000000000000// [version, inc, result, options, identifier] // inc(version, inc) -> result module.exports = [ ['1.2.3', 'major', '2.0.0'], ['1.2.3', 'minor', '1.3.0'], ['1.2.3', 'patch', '1.2.4'], ['1.2.3tag', 'major', '2.0.0', true], ['1.2.3-tag', 'major', '2.0.0'], ['1.2.3', 'fake', null], ['1.2.0-0', 'patch', '1.2.0'], ['fake', 'major', null], ['1.2.3-4', 'major', '2.0.0'], ['1.2.3-4', 'minor', '1.3.0'], ['1.2.3-4', 'patch', '1.2.3'], ['1.2.3-alpha.0.beta', 'major', '2.0.0'], ['1.2.3-alpha.0.beta', 'minor', '1.3.0'], ['1.2.3-alpha.0.beta', 'patch', '1.2.3'], ['1.2.4', 'prerelease', '1.2.5-0'], ['1.2.3-0', 'prerelease', '1.2.3-1'], ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'], ['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'], ['1.2.3-alpha.2', 'prerelease', '1.2.3-alpha.3'], ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta'], ['1.2.3-alpha.1.beta', 'prerelease', '1.2.3-alpha.2.beta'], ['1.2.3-alpha.2.beta', 'prerelease', '1.2.3-alpha.3.beta'], ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta'], ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta'], ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta'], ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1'], ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2'], ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'], ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'], ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'], ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'], ['1.2.0', 'prepatch', '1.2.1-0'], ['1.2.0-1', 'prepatch', '1.2.1-0'], ['1.2.0', 'preminor', '1.3.0-0'], ['1.2.3-1', 'preminor', '1.3.0-0'], ['1.2.0', 'premajor', '2.0.0-0'], ['1.2.3-1', 'premajor', '2.0.0-0'], ['1.2.0-1', 'minor', '1.2.0'], ['1.0.0-1', 'major', '1.0.0'], ['1.2.3', 'major', '2.0.0', false, 'dev'], ['1.2.3', 'minor', '1.3.0', false, 'dev'], ['1.2.3', 'patch', '1.2.4', false, 'dev'], ['1.2.3tag', 'major', '2.0.0', true, 'dev'], ['1.2.3-tag', 'major', '2.0.0', false, 'dev'], ['1.2.3', 'fake', null, false, 'dev'], ['1.2.0-0', 'patch', '1.2.0', false, 'dev'], ['fake', 'major', null, false, 'dev'], ['1.2.3-4', 'major', '2.0.0', false, 'dev'], ['1.2.3-4', 'minor', '1.3.0', false, 'dev'], ['1.2.3-4', 'patch', '1.2.3', false, 'dev'], ['1.2.3-alpha.0.beta', 'major', '2.0.0', false, 'dev'], ['1.2.3-alpha.0.beta', 'minor', '1.3.0', false, 'dev'], ['1.2.3-alpha.0.beta', 'patch', '1.2.3', false, 'dev'], ['1.2.4', 'prerelease', '1.2.5-dev.0', false, 'dev'], ['1.2.3-0', 'prerelease', '1.2.3-dev.0', false, 'dev'], ['1.2.3-alpha.0', 'prerelease', '1.2.3-dev.0', false, 'dev'], ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1', false, 'alpha'], ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta', false, 'alpha'], ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta', false, 'alpha'], ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta', false, 'alpha'], ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta', false, 'alpha'], ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-dev.0', false, 'dev'], ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1', false, 'alpha'], ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2', false, 'alpha'], ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3', false, 'alpha'], ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'], ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta', false, 'alpha'], ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta', false, 'alpha'], ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta', false, 'alpha'], ['1.2.0', 'prepatch', '1.2.1-dev.0', false, 'dev'], ['1.2.0-1', 'prepatch', '1.2.1-dev.0', false, 'dev'], ['1.2.0', 'preminor', '1.3.0-dev.0', false, 'dev'], ['1.2.3-1', 'preminor', '1.3.0-dev.0', false, 'dev'], ['1.2.0', 'premajor', '2.0.0-dev.0', false, 'dev'], ['1.2.3-1', 'premajor', '2.0.0-dev.0', false, 'dev'], ['1.2.0-1', 'minor', '1.2.0', false, 'dev'], ['1.0.0-1', 'major', '1.0.0', 'dev'], ['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev'], ] node-semver-7.1.3/test/fixtures/invalid-versions.js000066400000000000000000000012251362062110300224220ustar00rootroot00000000000000// none of these are semvers // [value, reason, opt] const {MAX_LENGTH, MAX_SAFE_INTEGER} = require('../../internal/constants') module.exports = [ [ new Array(MAX_LENGTH).join('1') + '.0.0', 'too long'], [ `${MAX_SAFE_INTEGER}0.0.0`, 'too big'], [ `0.${MAX_SAFE_INTEGER}0.0`, 'too big'], [ `0.0.${MAX_SAFE_INTEGER}0`, 'too big'], [ 'hello, world', 'not a version'], [ 'hello, world', true, 'even loose, its still junk'], [ 'xyz', 'even loose as an opt, same', , { loose: true }], [ /a regexp/, 'regexp is not a string'], [ /1.2.3/, 'semver-ish regexp is not a string'], [ {toString: () => '1.2.3'}, 'obj with a tostring is not a string'], ] node-semver-7.1.3/test/fixtures/range-exclude.js000066400000000000000000000043501362062110300216530ustar00rootroot00000000000000// [range, version, options] // version should not be included by range module.exports = [ ['1.0.0 - 2.0.0', '2.2.3'], ['1.2.3+asdf - 2.4.3+asdf', '1.2.3-pre.2'], ['1.2.3+asdf - 2.4.3+asdf', '2.4.3-alpha'], ['^1.2.3+build', '2.0.0'], ['^1.2.3+build', '1.2.0'], ['^1.2.3', '1.2.3-pre'], ['^1.2', '1.2.0-pre'], ['>1.2', '1.3.0-beta'], ['<=1.2.3', '1.2.3-beta'], ['^1.2.3', '1.2.3-beta'], ['=0.7.x', '0.7.0-asdf'], ['>=0.7.x', '0.7.0-asdf'], ['1', '1.0.0beta', { loose: 420 }], ['<1', '1.0.0beta', true], ['< 1', '1.0.0beta', true], ['1.0.0', '1.0.1'], ['>=1.0.0', '0.0.0'], ['>=1.0.0', '0.0.1'], ['>=1.0.0', '0.1.0'], ['>1.0.0', '0.0.1'], ['>1.0.0', '0.1.0'], ['<=2.0.0', '3.0.0'], ['<=2.0.0', '2.9999.9999'], ['<=2.0.0', '2.2.9'], ['<2.0.0', '2.9999.9999'], ['<2.0.0', '2.2.9'], ['>=0.1.97', 'v0.1.93', true], ['>=0.1.97', '0.1.93'], ['0.1.20 || 1.2.4', '1.2.3'], ['>=0.2.3 || <0.0.1', '0.0.3'], ['>=0.2.3 || <0.0.1', '0.2.2'], ['2.x.x', '1.1.3', { loose: NaN }], ['2.x.x', '3.1.3'], ['1.2.x', '1.3.3'], ['1.2.x || 2.x', '3.1.3'], ['1.2.x || 2.x', '1.1.3'], ['2.*.*', '1.1.3'], ['2.*.*', '3.1.3'], ['1.2.*', '1.3.3'], ['1.2.* || 2.*', '3.1.3'], ['1.2.* || 2.*', '1.1.3'], ['2', '1.1.2'], ['2.3', '2.4.1'], ['~0.0.1', '0.1.0-alpha'], ['~0.0.1', '0.1.0'], ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 ['~2.4', '2.3.9'], ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0 ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0 ['~1', '0.2.3'], // >=1.0.0 <2.0.0 ['~>1', '2.2.3'], ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0 ['<1', '1.0.0'], ['>=1.2', '1.1.1'], ['1', '2.0.0beta', true], ['~v0.5.4-beta', '0.5.4-alpha'], ['=0.7.x', '0.8.2'], ['>=0.7.x', '0.6.2'], ['<0.7.x', '0.7.2'], ['<1.2.3', '1.2.3-beta'], ['=1.2.3', '1.2.3-beta'], ['>1.2', '1.2.8'], ['^0.0.1', '0.0.2-alpha'], ['^0.0.1', '0.0.2'], ['^1.2.3', '2.0.0-alpha'], ['^1.2.3', '1.2.2'], ['^1.2', '1.1.9'], ['*', 'v1.2.3-foo', true], // invalid versions never satisfy, but shouldn't throw ['*', 'not a version'], ['>=2', 'glorp'], ['>=2', false], ['2.x', '3.0.0-pre.0', { includePrerelease: true }], ['^1.0.0', '1.0.0-rc1', { includePrerelease: true }], ['^1.2.3-rc2', '2.0.0', { includePrerelease: true }], ] node-semver-7.1.3/test/fixtures/range-include.js000066400000000000000000000070321362062110300216450ustar00rootroot00000000000000// [range, version, options] // version should be included by range module.exports = [ ['1.0.0 - 2.0.0', '1.2.3'], ['^1.2.3+build', '1.2.3'], ['^1.2.3+build', '1.3.0'], ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3'], ['1.2.3pre+asdf - 2.4.3-pre+asdf', '1.2.3', true], ['1.2.3-pre+asdf - 2.4.3pre+asdf', '1.2.3', true], ['1.2.3pre+asdf - 2.4.3pre+asdf', '1.2.3', true], ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3-pre.2'], ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '2.4.3-alpha'], ['1.2.3+asdf - 2.4.3+asdf', '1.2.3'], ['1.0.0', '1.0.0'], ['>=*', '0.2.4'], ['', '1.0.0'], ['*', '1.2.3', {}], ['*', 'v1.2.3', { loose: 123 }], ['>=1.0.0', '1.0.0', /asdf/], ['>=1.0.0', '1.0.1', { loose: null }], ['>=1.0.0', '1.1.0', { loose: 0 }], ['>1.0.0', '1.0.1', { loose: undefined }], ['>1.0.0', '1.1.0'], ['<=2.0.0', '2.0.0'], ['<=2.0.0', '1.9999.9999'], ['<=2.0.0', '0.2.9'], ['<2.0.0', '1.9999.9999'], ['<2.0.0', '0.2.9'], ['>= 1.0.0', '1.0.0'], ['>= 1.0.0', '1.0.1'], ['>= 1.0.0', '1.1.0'], ['> 1.0.0', '1.0.1'], ['> 1.0.0', '1.1.0'], ['<= 2.0.0', '2.0.0'], ['<= 2.0.0', '1.9999.9999'], ['<= 2.0.0', '0.2.9'], ['< 2.0.0', '1.9999.9999'], ['<\t2.0.0', '0.2.9'], ['>=0.1.97', 'v0.1.97', true], ['>=0.1.97', '0.1.97'], ['0.1.20 || 1.2.4', '1.2.4'], ['>=0.2.3 || <0.0.1', '0.0.0'], ['>=0.2.3 || <0.0.1', '0.2.3'], ['>=0.2.3 || <0.0.1', '0.2.4'], ['||', '1.3.4'], ['2.x.x', '2.1.3'], ['1.2.x', '1.2.3'], ['1.2.x || 2.x', '2.1.3'], ['1.2.x || 2.x', '1.2.3'], ['x', '1.2.3'], ['2.*.*', '2.1.3'], ['1.2.*', '1.2.3'], ['1.2.* || 2.*', '2.1.3'], ['1.2.* || 2.*', '1.2.3'], ['*', '1.2.3'], ['2', '2.1.2'], ['2.3', '2.3.1'], ['~0.0.1', '0.0.1'], ['~0.0.1', '0.0.2'], ['~x', '0.0.9'], // >=2.4.0 <2.5.0 ['~2', '2.0.9'], // >=2.4.0 <2.5.0 ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 ['~2.4', '2.4.5'], ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0, ['~1', '1.2.3'], // >=1.0.0 <2.0.0 ['~>1', '1.2.3'], ['~> 1', '1.2.3'], ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0, ['~ 1.0', '1.0.2'], ['~ 1.0.3', '1.0.12'], ['~ 1.0.3alpha', '1.0.12', { loose: true }], ['>=1', '1.0.0'], ['>= 1', '1.0.0'], ['<1.2', '1.1.1'], ['< 1.2', '1.1.1'], ['~v0.5.4-pre', '0.5.5'], ['~v0.5.4-pre', '0.5.4'], ['=0.7.x', '0.7.2'], ['<=0.7.x', '0.7.2'], ['>=0.7.x', '0.7.2'], ['<=0.7.x', '0.6.2'], ['~1.2.1 >=1.2.3', '1.2.3'], ['~1.2.1 =1.2.3', '1.2.3'], ['~1.2.1 1.2.3', '1.2.3'], ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'], ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'], ['~1.2.1 1.2.3', '1.2.3'], ['>=1.2.1 1.2.3', '1.2.3'], ['1.2.3 >=1.2.1', '1.2.3'], ['>=1.2.3 >=1.2.1', '1.2.3'], ['>=1.2.1 >=1.2.3', '1.2.3'], ['>=1.2', '1.2.8'], ['^1.2.3', '1.8.1'], ['^0.1.2', '0.1.2'], ['^0.1', '0.1.2'], ['^0.0.1', '0.0.1'], ['^1.2', '1.4.2'], ['^1.2 ^1', '1.4.2'], ['^1.2.3-alpha', '1.2.3-pre'], ['^1.2.0-alpha', '1.2.0-pre'], ['^0.0.1-alpha', '0.0.1-beta'], ['^0.0.1-alpha', '0.0.1'], ['^0.1.1-alpha', '0.1.1-beta'], ['^x', '1.2.3'], ['x - 1.0.0', '0.9.7'], ['x - 1.x', '0.9.7'], ['1.0.0 - x', '1.9.7'], ['1.x - x', '1.9.7'], ['<=7.x', '7.9.9'], ['2.x', '2.0.0-pre.0', { includePrerelease: true }], ['2.x', '2.1.0-pre.0', { includePrerelease: true }], ['*', '1.0.0-rc1', { includePrerelease: true }], ['^1.0.0', '2.0.0-rc1', { includePrerelease: true }], ['^1.0.0-0', '1.0.1-rc1', { includePrerelease: true }], ['^1.0.0-rc2', '1.0.1-rc1', { includePrerelease: true }], ['^1.0.0', '1.0.1-rc1', { includePrerelease: true }], ['^1.0.0', '1.1.0-rc1', { includePrerelease: true }], ] node-semver-7.1.3/test/fixtures/range-intersection.js000066400000000000000000000036161362062110300227340ustar00rootroot00000000000000// r0, r1, expected intersection module.exports = [ ['1.3.0 || <1.0.0 >2.0.0', '1.3.0 || <1.0.0 >2.0.0', true], ['<1.0.0 >2.0.0', '>0.0.0', false], ['>0.0.0', '<1.0.0 >2.0.0', false], ['<1.0.0 >2.0.0', '>1.4.0 <1.6.0', false], ['<1.0.0 >2.0.0', '>1.4.0 <1.6.0 || 2.0.0', false], ['>1.0.0 <=2.0.0', '2.0.0', true], ['<1.0.0 >=2.0.0', '2.1.0', false], ['<1.0.0 >=2.0.0', '>1.4.0 <1.6.0 || 2.0.0', false], ['1.5.x', '<1.5.0 || >=1.6.0', false], ['<1.5.0 || >=1.6.0', '1.5.x', false], ['<1.6.16 || >=1.7.0 <1.7.11 || >=1.8.0 <1.8.2', '>=1.6.16 <1.7.0 || >=1.7.11 <1.8.0 || >=1.8.2', false], ['<=1.6.16 || >=1.7.0 <1.7.11 || >=1.8.0 <1.8.2', '>=1.6.16 <1.7.0 || >=1.7.11 <1.8.0 || >=1.8.2', true], ['>=1.0.0', '<=1.0.0', true], ['>1.0.0 <1.0.0', '<=0.0.0', false], ['*', '0.0.1', true], ['*', '>=1.0.0', true], ['*', '>1.0.0', true], ['*', '~1.0.0', true], ['*', '<1.6.0', true], ['*', '<=1.6.0', true], ['1.*', '0.0.1', false], ['1.*', '2.0.0', false], ['1.*', '1.0.0', true], ['1.*', '<2.0.0', true], ['1.*', '>1.0.0', true], ['1.*', '<=1.0.0', true], ['1.*', '^1.0.0', true], ['1.0.*', '0.0.1', false], ['1.0.*', '<0.0.1', false], ['1.0.*', '>0.0.1', true], ['*', '1.3.0 || <1.0.0 >2.0.0', true], ['1.3.0 || <1.0.0 >2.0.0', '*', true], ['1.*', '1.3.0 || <1.0.0 >2.0.0', true], ['x', '0.0.1', true], ['x', '>=1.0.0', true], ['x', '>1.0.0', true], ['x', '~1.0.0', true], ['x', '<1.6.0', true], ['x', '<=1.6.0', true], ['1.x', '0.0.1', false], ['1.x', '2.0.0', false], ['1.x', '1.0.0', true], ['1.x', '<2.0.0', true], ['1.x', '>1.0.0', true], ['1.x', '<=1.0.0', true], ['1.x', '^1.0.0', true], ['1.0.x', '0.0.1', false], ['1.0.x', '<0.0.1', false], ['1.0.x', '>0.0.1', true], ['x', '1.3.0 || <1.0.0 >2.0.0', true], ['1.3.0 || <1.0.0 >2.0.0', 'x', true], ['1.x', '1.3.0 || <1.0.0 >2.0.0', true], ['*', '*', true], ['x', '', true] ] node-semver-7.1.3/test/fixtures/range-parse.js000066400000000000000000000047711362062110300213430ustar00rootroot00000000000000// [range, canonical result, options] // null result means it's not a valid range // '*' is the return value from functions.validRange(), but // new Range().range will be '' in those cases module.exports = [ ['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'], ['1.0.0', '1.0.0', { loose: false }], ['>=*', '*'], ['', '*'], ['*', '*'], ['*', '*'], ['>=1.0.0', '>=1.0.0'], ['>1.0.0', '>1.0.0'], ['<=2.0.0', '<=2.0.0'], ['1', '>=1.0.0 <2.0.0'], ['<=2.0.0', '<=2.0.0'], ['<=2.0.0', '<=2.0.0'], ['<2.0.0', '<2.0.0'], ['<2.0.0', '<2.0.0'], ['>= 1.0.0', '>=1.0.0'], ['>= 1.0.0', '>=1.0.0'], ['>= 1.0.0', '>=1.0.0'], ['> 1.0.0', '>1.0.0'], ['> 1.0.0', '>1.0.0'], ['<= 2.0.0', '<=2.0.0'], ['<= 2.0.0', '<=2.0.0'], ['<= 2.0.0', '<=2.0.0'], ['< 2.0.0', '<2.0.0'], ['<\t2.0.0', '<2.0.0'], ['>=0.1.97', '>=0.1.97'], ['>=0.1.97', '>=0.1.97'], ['0.1.20 || 1.2.4', '0.1.20||1.2.4'], ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], ['||', '||'], ['2.x.x', '>=2.0.0 <3.0.0'], ['1.2.x', '>=1.2.0 <1.3.0'], ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], ['x', '*'], ['2.*.*', '>=2.0.0 <3.0.0'], ['1.2.*', '>=1.2.0 <1.3.0'], ['1.2.* || 2.*', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'], ['*', '*'], ['2', '>=2.0.0 <3.0.0'], ['2.3', '>=2.3.0 <2.4.0'], ['~2.4', '>=2.4.0 <2.5.0'], ['~2.4', '>=2.4.0 <2.5.0'], ['~>3.2.1', '>=3.2.1 <3.3.0'], ['~1', '>=1.0.0 <2.0.0'], ['~>1', '>=1.0.0 <2.0.0'], ['~> 1', '>=1.0.0 <2.0.0'], ['~1.0', '>=1.0.0 <1.1.0'], ['~ 1.0', '>=1.0.0 <1.1.0'], ['^0', '>=0.0.0 <1.0.0'], ['^ 1', '>=1.0.0 <2.0.0'], ['^0.1', '>=0.1.0 <0.2.0'], ['^1.0', '>=1.0.0 <2.0.0'], ['^1.2', '>=1.2.0 <2.0.0'], ['^0.0.1', '>=0.0.1 <0.0.2'], ['^0.0.1-beta', '>=0.0.1-beta <0.0.2'], ['^0.1.2', '>=0.1.2 <0.2.0'], ['^1.2.3', '>=1.2.3 <2.0.0'], ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0'], ['<1', '<1.0.0'], ['< 1', '<1.0.0'], ['>=1', '>=1.0.0'], ['>= 1', '>=1.0.0'], ['<1.2', '<1.2.0'], ['< 1.2', '<1.2.0'], ['1', '>=1.0.0 <2.0.0'], ['>01.02.03', '>1.2.3', true], ['>01.02.03', null], ['~1.2.3beta', '>=1.2.3-beta <1.3.0', { loose: true }], ['~1.2.3beta', null], ['^ 1.2 ^ 1', '>=1.2.0 <2.0.0 >=1.0.0 <2.0.0'], ['1.2 - 3.4.5', '>=1.2.0 <=3.4.5'], ['1.2.3 - 3.4', '>=1.2.3 <3.5.0'], ['1.2 - 3.4', '>=1.2.0 <3.5.0'], ['>1', '>=2.0.0'], ['>1.2', '>=1.3.0'], ['>X', '<0.0.0-0'], ['=2.4.0 <2.5.0 ['~2.4', '2.5.5'], ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0 ['~1', '2.2.3'], // >=1.0.0 <2.0.0 ['~>1', '2.2.4'], ['~> 1', '3.2.3'], ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0 ['~ 1.0', '1.1.0'], ['<1.2', '1.2.0'], ['< 1.2', '1.2.1'], ['1', '2.0.0beta', true], ['~v0.5.4-pre', '0.6.0'], ['~v0.5.4-pre', '0.6.1-pre'], ['=0.7.x', '0.8.0'], ['=0.7.x', '0.8.0-asdf'], ['<0.7.x', '0.7.0'], ['~1.2.2', '1.3.0'], ['1.0.0 - 2.0.0', '2.2.3'], ['1.0.0', '1.0.1'], ['<=2.0.0', '3.0.0'], ['<=2.0.0', '2.9999.9999'], ['<=2.0.0', '2.2.9'], ['<2.0.0', '2.9999.9999'], ['<2.0.0', '2.2.9'], ['2.x.x', '3.1.3'], ['1.2.x', '1.3.3'], ['1.2.x || 2.x', '3.1.3'], ['2.*.*', '3.1.3'], ['1.2.*', '1.3.3'], ['1.2.* || 2.*', '3.1.3'], ['2', '3.1.2'], ['2.3', '2.4.1'], ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0 ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0 ['~1', '2.2.3'], // >=1.0.0 <2.0.0 ['~>1', '2.2.3'], ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0 ['<1', '1.0.0'], ['1', '2.0.0beta', true], ['<1', '1.0.0beta', true], ['< 1', '1.0.0beta', true], ['=0.7.x', '0.8.2'], ['<0.7.x', '0.7.2'] ] node-semver-7.1.3/test/fixtures/version-lt-range.js000066400000000000000000000034351362062110300223270ustar00rootroot00000000000000// [range, version, loose] // Version should be less than range module.exports = [ ['~1.2.2', '1.2.1'], ['~0.6.1-1', '0.6.1-0'], ['1.0.0 - 2.0.0', '0.0.1'], ['1.0.0-beta.2', '1.0.0-beta.1'], ['1.0.0', '0.0.0'], ['>=2.0.0', '1.1.1'], ['>=2.0.0', '1.2.9'], ['>2.0.0', '2.0.0'], ['0.1.20 || 1.2.4', '0.1.5'], ['2.x.x', '1.0.0'], ['1.2.x', '1.1.0'], ['1.2.x || 2.x', '1.0.0'], ['2.*.*', '1.0.1'], ['1.2.*', '1.1.3'], ['1.2.* || 2.*', '1.1.9999'], ['2', '1.0.0'], ['2.3', '2.2.2'], ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0 ['~2.4', '2.3.5'], ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0 ['~1', '0.2.3'], // >=1.0.0 <2.0.0 ['~>1', '0.2.4'], ['~> 1', '0.2.3'], ['~1.0', '0.1.2'], // >=1.0.0 <1.1.0 ['~ 1.0', '0.1.0'], ['>1.2', '1.2.0'], ['> 1.2', '1.2.1'], ['1', '0.0.0beta', true], ['~v0.5.4-pre', '0.5.4-alpha'], ['~v0.5.4-pre', '0.5.4-alpha'], ['=0.7.x', '0.6.0'], ['=0.7.x', '0.6.0-asdf'], ['>=0.7.x', '0.6.0'], ['~1.2.2', '1.2.1'], ['1.0.0 - 2.0.0', '0.2.3'], ['1.0.0', '0.0.1'], ['>=2.0.0', '1.0.0'], ['>=2.0.0', '1.9999.9999'], ['>=2.0.0', '1.2.9'], ['>2.0.0', '2.0.0'], ['>2.0.0', '1.2.9'], ['2.x.x', '1.1.3'], ['1.2.x', '1.1.3'], ['1.2.x || 2.x', '1.1.3'], ['2.*.*', '1.1.3'], ['1.2.*', '1.1.3'], ['1.2.* || 2.*', '1.1.3'], ['2', '1.9999.9999'], ['2.3', '2.2.1'], ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0 ['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0 ['~1', '0.2.3'], // >=1.0.0 <2.0.0 ['~>1', '0.2.3'], ['~1.0', '0.0.0'], // >=1.0.0 <1.1.0 ['>1', '1.0.0'], ['2', '1.0.0beta', true], ['>1', '1.0.0beta', true], ['> 1', '1.0.0beta', true], ['=0.7.x', '0.6.2'], ['=0.7.x', '0.7.0-asdf'], ['^1', '1.0.0-0'], ['>=0.7.x', '0.7.0-asdf'], ['1', '1.0.0beta', true], ['>=0.7.x', '0.6.2'], ['>1.2.3', '1.3.0-alpha'] ] node-semver-7.1.3/test/fixtures/version-not-gt-range.js000066400000000000000000000044151362062110300231170ustar00rootroot00000000000000// [range, version, loose] // Version should NOT be greater than range module.exports = [ ['~0.6.1-1', '0.6.1-1'], ['1.0.0 - 2.0.0', '1.2.3'], ['1.0.0 - 2.0.0', '0.9.9'], ['1.0.0', '1.0.0'], ['>=*', '0.2.4'], ['', '1.0.0', true], ['*', '1.2.3'], ['*', 'v1.2.3-foo'], ['>=1.0.0', '1.0.0'], ['>=1.0.0', '1.0.1'], ['>=1.0.0', '1.1.0'], ['>1.0.0', '1.0.1'], ['>1.0.0', '1.1.0'], ['<=2.0.0', '2.0.0'], ['<=2.0.0', '1.9999.9999'], ['<=2.0.0', '0.2.9'], ['<2.0.0', '1.9999.9999'], ['<2.0.0', '0.2.9'], ['>= 1.0.0', '1.0.0'], ['>= 1.0.0', '1.0.1'], ['>= 1.0.0', '1.1.0'], ['> 1.0.0', '1.0.1'], ['> 1.0.0', '1.1.0'], ['<= 2.0.0', '2.0.0'], ['<= 2.0.0', '1.9999.9999'], ['<= 2.0.0', '0.2.9'], ['< 2.0.0', '1.9999.9999'], ['<\t2.0.0', '0.2.9'], ['>=0.1.97', 'v0.1.97'], ['>=0.1.97', '0.1.97'], ['0.1.20 || 1.2.4', '1.2.4'], ['0.1.20 || >1.2.4', '1.2.4'], ['0.1.20 || 1.2.4', '1.2.3'], ['0.1.20 || 1.2.4', '0.1.20'], ['>=0.2.3 || <0.0.1', '0.0.0'], ['>=0.2.3 || <0.0.1', '0.2.3'], ['>=0.2.3 || <0.0.1', '0.2.4'], ['||', '1.3.4'], ['2.x.x', '2.1.3'], ['1.2.x', '1.2.3'], ['1.2.x || 2.x', '2.1.3'], ['1.2.x || 2.x', '1.2.3'], ['x', '1.2.3'], ['2.*.*', '2.1.3'], ['1.2.*', '1.2.3'], ['1.2.* || 2.*', '2.1.3'], ['1.2.* || 2.*', '1.2.3'], ['1.2.* || 2.*', '1.2.3'], ['*', '1.2.3'], ['2', '2.1.2'], ['2.3', '2.3.1'], ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 ['~2.4', '2.4.5'], ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0 ['~1', '1.2.3'], // >=1.0.0 <2.0.0 ['~>1', '1.2.3'], ['~> 1', '1.2.3'], ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0 ['~ 1.0', '1.0.2'], ['>=1', '1.0.0'], ['>= 1', '1.0.0'], ['<1.2', '1.1.1'], ['< 1.2', '1.1.1'], ['1', '1.0.0beta', true], ['~v0.5.4-pre', '0.5.5'], ['~v0.5.4-pre', '0.5.4'], ['=0.7.x', '0.7.2'], ['>=0.7.x', '0.7.2'], ['=0.7.x', '0.7.0-asdf'], ['>=0.7.x', '0.7.0-asdf'], ['<=0.7.x', '0.6.2'], ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'], ['>=0.2.3 <=0.2.4', '0.2.4'], ['1.0.0 - 2.0.0', '2.0.0'], ['^1', '0.0.0-0'], ['^3.0.0', '2.0.0'], ['^1.0.0 || ~2.0.1', '2.0.0'], ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'], ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true], ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true], ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'] ] node-semver-7.1.3/test/fixtures/version-not-lt-range.js000066400000000000000000000046241362062110300231260ustar00rootroot00000000000000// [range, version, loose] // Version should NOT be less than range module.exports = [ ['~ 1.0', '1.1.0'], ['~0.6.1-1', '0.6.1-1'], ['1.0.0 - 2.0.0', '1.2.3'], ['1.0.0 - 2.0.0', '2.9.9'], ['1.0.0', '1.0.0'], ['>=*', '0.2.4'], ['', '1.0.0', true], ['*', '1.2.3'], ['>=1.0.0', '1.0.0'], ['>=1.0.0', '1.0.1'], ['>=1.0.0', '1.1.0'], ['>1.0.0', '1.0.1'], ['>1.0.0', '1.1.0'], ['<=2.0.0', '2.0.0'], ['<=2.0.0', '1.9999.9999'], ['<=2.0.0', '0.2.9'], ['<2.0.0', '1.9999.9999'], ['<2.0.0', '0.2.9'], ['>= 1.0.0', '1.0.0'], ['>= 1.0.0', '1.0.1'], ['>= 1.0.0', '1.1.0'], ['> 1.0.0', '1.0.1'], ['> 1.0.0', '1.1.0'], ['<= 2.0.0', '2.0.0'], ['<= 2.0.0', '1.9999.9999'], ['<= 2.0.0', '0.2.9'], ['< 2.0.0', '1.9999.9999'], ['<\t2.0.0', '0.2.9'], ['>=0.1.97', 'v0.1.97'], ['>=0.1.97', '0.1.97'], ['0.1.20 || 1.2.4', '1.2.4'], ['0.1.20 || >1.2.4', '1.2.4'], ['0.1.20 || 1.2.4', '1.2.3'], ['0.1.20 || 1.2.4', '0.1.20'], ['>=0.2.3 || <0.0.1', '0.0.0'], ['>=0.2.3 || <0.0.1', '0.2.3'], ['>=0.2.3 || <0.0.1', '0.2.4'], ['||', '1.3.4'], ['2.x.x', '2.1.3'], ['1.2.x', '1.2.3'], ['1.2.x || 2.x', '2.1.3'], ['1.2.x || 2.x', '1.2.3'], ['x', '1.2.3'], ['2.*.*', '2.1.3'], ['1.2.*', '1.2.3'], ['1.2.* || 2.*', '2.1.3'], ['1.2.* || 2.*', '1.2.3'], ['1.2.* || 2.*', '1.2.3'], ['*', '1.2.3'], ['2', '2.1.2'], ['2.3', '2.3.1'], ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0 ['~2.4', '2.4.5'], ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0 ['~1', '1.2.3'], // >=1.0.0 <2.0.0 ['~>1', '1.2.3'], ['~> 1', '1.2.3'], ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0 ['~ 1.0', '1.0.2'], ['>=1', '1.0.0'], ['>= 1', '1.0.0'], ['<1.2', '1.1.1'], ['< 1.2', '1.1.1'], ['~v0.5.4-pre', '0.5.5'], ['~v0.5.4-pre', '0.5.4'], ['=0.7.x', '0.7.2'], ['>=0.7.x', '0.7.2'], ['<=0.7.x', '0.6.2'], ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'], ['>=0.2.3 <=0.2.4', '0.2.4'], ['1.0.0 - 2.0.0', '2.0.0'], ['^3.0.0', '4.0.0'], ['^1.0.0 || ~2.0.1', '2.0.0'], ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'], ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true], ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true], ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'], ['^1.0.0alpha', '1.0.0beta', true], ['~1.0.0alpha', '1.0.0beta', true], ['^1.0.0-alpha', '1.0.0beta', true], ['~1.0.0-alpha', '1.0.0beta', true], ['^1.0.0-alpha', '1.0.0-beta'], ['~1.0.0-alpha', '1.0.0-beta'], ['=0.1.0', '1.0.0'] ] node-semver-7.1.3/test/functions/000077500000000000000000000000001362062110300167275ustar00rootroot00000000000000node-semver-7.1.3/test/functions/clean.js000066400000000000000000000012051362062110300203450ustar00rootroot00000000000000const { test } = require('tap') const clean = require('../../functions/clean') test('clean tests', (t) => { // [range, version] // Version should be detectable despite extra characters [ ['1.2.3', '1.2.3'], [' 1.2.3 ', '1.2.3'], [' 1.2.3-4 ', '1.2.3-4'], [' 1.2.3-pre ', '1.2.3-pre'], [' =v1.2.3 ', '1.2.3'], ['v1.2.3', '1.2.3'], [' v1.2.3 ', '1.2.3'], ['\t1.2.3', '1.2.3'], ['>1.2.3', null], ['~1.2.3', null], ['<=1.2.3', null], ['1.2.x', null] ].forEach(([range, version]) => { const msg = `clean(${range}) = ${version}` t.equal(clean(range), version, msg) }) t.end() }) node-semver-7.1.3/test/functions/cmp.js000066400000000000000000000034731362062110300200530ustar00rootroot00000000000000const { test } = require('tap') const cmp = require('../../functions/cmp') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') const SemVer = require('../../classes/semver') test('invalid cmp usage', (t) => { t.throws(() => { cmp('1.2.3', 'a frog', '4.5.6') }, new TypeError('Invalid operator: a frog')) t.end() }) test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(8) t.ok(cmp(v0, '>', v1, loose), `cmp('${v0}' > '${v1}')`) t.ok(cmp(v1, '<', v0, loose), `cmp('${v1}' < '${v0}')`) t.ok(!cmp(v1, '>', v0, loose), `!cmp('${v1}' > '${v0}')`) t.ok(!cmp(v0, '<', v1, loose), `!cmp('${v0}' < '${v1}')`) t.ok(cmp(v1, '==', v1, loose), `cmp('${v1}' == '${v1}')`) t.ok(cmp(v0, '>=', v1, loose), `cmp('${v0}' >= '${v1}')`) t.ok(cmp(v1, '<=', v0, loose), `cmp('${v1}' <= '${v0}')`) t.ok(cmp(v0, '!=', v1, loose), `cmp('${v0}' != '${v1}')`) })) }) test('equality tests', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(8) t.ok(cmp(v0, '', v1, loose), `cmp(${v0} "" ${v1})`) t.ok(cmp(v0, '=', v1, loose), `cmp(${v0}=${v1})`) t.ok(cmp(v0, '==', v1, loose), `cmp(${v0}==${v1})`) t.ok(!cmp(v0, '!=', v1, loose), `!cmp(${v0}!=${v1})`) t.ok(!cmp(v0, '===', v1, loose), `!cmp(${v0}===${v1})`) // also test with an object. they are === because obj.version matches t.ok(cmp(new SemVer(v0, { loose: loose }), '===', new SemVer(v1, { loose: loose })), `!cmp(${v0}===${v1}) object`) t.ok(cmp(v0, '!==', v1, loose), `cmp(${v0}!==${v1})`) t.ok(!cmp(new SemVer(v0, loose), '!==', new SemVer(v1, loose)), `cmp(${v0}!==${v1}) object`) })) }) node-semver-7.1.3/test/functions/coerce.js000066400000000000000000000074771362062110300205440ustar00rootroot00000000000000const { test } = require('tap') const coerce = require('../../functions/coerce') const parse = require('../../functions/parse') const valid = require('../../functions/valid') test('coerce tests', (t) => { // Expected to be null (cannot be coerced). const coerceToNull = [ null, { version: '1.2.3' }, function () { return '1.2.3' }, '', '.', 'version one', '9'.repeat(16), '1'.repeat(17), `a${'9'.repeat(16)}`, `a${'1'.repeat(17)}`, `${'9'.repeat(16)}a`, `${'1'.repeat(17)}a`, `${'9'.repeat(16)}.4.7.4`, `${'9'.repeat(16)}.${'2'.repeat(16)}.${'3'.repeat(16)}`, `${'1'.repeat(16)}.${'9'.repeat(16)}.${'3'.repeat(16)}`, `${'1'.repeat(16)}.${'2'.repeat(16)}.${'9'.repeat(16)}` ] coerceToNull.forEach((input) => { const msg = `coerce(${input}) should be null` t.same(coerce(input), null, msg) }) // Expected to be valid. const coerceToValid = [ [parse('1.2.3'), '1.2.3'], ['.1', '1.0.0'], ['.1.', '1.0.0'], ['..1', '1.0.0'], ['.1.1', '1.1.0'], ['1.', '1.0.0'], ['1.0', '1.0.0'], ['1.0.0', '1.0.0'], ['0', '0.0.0'], ['0.0', '0.0.0'], ['0.0.0', '0.0.0'], ['0.1', '0.1.0'], ['0.0.1', '0.0.1'], ['0.1.1', '0.1.1'], ['1', '1.0.0'], ['1.2', '1.2.0'], ['1.2.3', '1.2.3'], ['1.2.3.4', '1.2.3'], ['13', '13.0.0'], ['35.12', '35.12.0'], ['35.12.18', '35.12.18'], ['35.12.18.24', '35.12.18'], ['v1', '1.0.0'], ['v1.2', '1.2.0'], ['v1.2.3', '1.2.3'], ['v1.2.3.4', '1.2.3'], [' 1', '1.0.0'], ['1 ', '1.0.0'], ['1 0', '1.0.0'], ['1 1', '1.0.0'], ['1.1 1', '1.1.0'], ['1.1-1', '1.1.0'], ['1.1-1', '1.1.0'], ['a1', '1.0.0'], ['a1a', '1.0.0'], ['1a', '1.0.0'], ['version 1', '1.0.0'], ['version1', '1.0.0'], ['version1.0', '1.0.0'], ['version1.1', '1.1.0'], ['42.6.7.9.3-alpha', '42.6.7'], ['v2', '2.0.0'], ['v3.4 replaces v3.3.1', '3.4.0'], ['4.6.3.9.2-alpha2', '4.6.3'], [`${'1'.repeat(17)}.2`, '2.0.0'], [`${'1'.repeat(17)}.2.3`, '2.3.0'], [`1.${'2'.repeat(17)}.3`, '1.0.0'], [`1.2.${'3'.repeat(17)}`, '1.2.0'], [`${'1'.repeat(17)}.2.3.4`, '2.3.4'], [`1.${'2'.repeat(17)}.3.4`, '1.0.0'], [`1.2.${'3'.repeat(17)}.4`, '1.2.0'], [`${'1'.repeat(17)}.${'2'.repeat(16)}.${'3'.repeat(16)}`, `${'2'.repeat(16)}.${'3'.repeat(16)}.0`], [`${'1'.repeat(16)}.${'2'.repeat(17)}.${'3'.repeat(16)}`, `${'1'.repeat(16)}.0.0`], [`${'1'.repeat(16)}.${'2'.repeat(16)}.${'3'.repeat(17)}`, `${'1'.repeat(16)}.${'2'.repeat(16)}.0`], [`11${'.1'.repeat(126)}`, '11.1.1'], ['1'.repeat(16), `${'1'.repeat(16)}.0.0`], [`a${'1'.repeat(16)}`, `${'1'.repeat(16)}.0.0`], [`${'1'.repeat(16)}.2.3.4`, `${'1'.repeat(16)}.2.3`], [`1.${'2'.repeat(16)}.3.4`, `1.${'2'.repeat(16)}.3`], [`1.2.${'3'.repeat(16)}.4`, `1.2.${'3'.repeat(16)}`], [`${'1'.repeat(16)}.${'2'.repeat(16)}.${'3'.repeat(16)}`, `${'1'.repeat(16)}.${'2'.repeat(16)}.${'3'.repeat(16)}`], [`1.2.3.${'4'.repeat(252)}.5`, '1.2.3'], [`1.2.3.${'4'.repeat(1024)}`, '1.2.3'], [`${'1'.repeat(17)}.4.7.4`, '4.7.4'], [10, '10.0.0'], ['1.2.3/a/b/c/2.3.4', '2.3.4', { rtl: true }], ['1.2.3.4.5.6', '4.5.6', { rtl: true }], ['1.2.3.4.5/6', '6.0.0', { rtl: true }], ['1.2.3.4./6', '6.0.0', { rtl: true }], ['1.2.3.4/6', '6.0.0', { rtl: true }], ['1.2.3./6', '6.0.0', { rtl: true }], ['1.2.3/6', '6.0.0', { rtl: true }], ['1.2.3.4', '2.3.4', { rtl: true }], ['1.2.3.4xyz', '2.3.4', { rtl: true }] ] coerceToValid.forEach(([input, expected, options]) => { const msg = `coerce(${input}) should become ${expected}` t.same((coerce(input, options) || {}).version, expected, msg) }) t.same(valid(coerce('42.6.7.9.3-alpha')), '42.6.7') t.same(valid(coerce('v2')), '2.0.0') t.done() }) node-semver-7.1.3/test/functions/compare-build.js000066400000000000000000000011411362062110300220050ustar00rootroot00000000000000const { test } = require('tap') const SemVer = require('../../classes/semver') const compareBuild = require('../../functions/compare-build') test('compareBuild', (t) => { const noBuild = '1.0.0' const build0 = '1.0.0+0' const build1 = '1.0.0+1' const build10 = '1.0.0+1.0' t.equal(compareBuild(noBuild, build0), -1) t.equal(compareBuild(build0, build0), 0) t.equal(compareBuild(build0, noBuild), 1) t.equal(compareBuild(build0, '1.0.0+0.0'), -1) t.equal(compareBuild(build0, build1), -1) t.equal(compareBuild(build1, build0), 1) t.equal(compareBuild(build10, build1), 1) t.end() }) node-semver-7.1.3/test/functions/compare-loose.js000066400000000000000000000014521362062110300220340ustar00rootroot00000000000000const { test } = require('tap') const compareLoose = require('../../functions/compare-loose') const SemVer = require('../../classes/semver') const eq = require('../../functions/eq') test('strict vs loose version numbers', (t) => { [['=1.2.3', '1.2.3'], ['01.02.03', '1.2.3'], ['1.2.3-beta.01', '1.2.3-beta.1'], [' =1.2.3', '1.2.3'], ['1.2.3foo', '1.2.3-foo'] ].forEach((v) => { const loose = v[0] const strict = v[1] t.throws(() => { SemVer(loose) // eslint-disable-line no-new }) const lv = new SemVer(loose, true) t.equal(lv.version, strict) t.ok(eq(loose, strict, true)) t.throws(() => { eq(loose, strict) }) t.throws(() => { new SemVer(strict).compare(loose) }) t.equal(compareLoose(v[0], v[1]), 0) }) t.end() }) node-semver-7.1.3/test/functions/compare.js000066400000000000000000000025111362062110300207120ustar00rootroot00000000000000const { test } = require('tap') const compare = require('../../functions/compare.js') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') const SemVer = require('../../classes/semver.js') test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.equal(compare(v0, v1, loose), 1, `compare('${v0}', '${v1}')`) t.equal(compare(v1, v0, loose), -1, `compare('${v1}', '${v0}')`) t.equal(compare(v0, v0, loose), 0, `compare('${v0}', '${v0}')`) t.equal(compare(v1, v1, loose), 0, `compare('${v1}', '${v1}')`) })) }) test('equality tests', (t) => { // [version1, version2] // version1 should be equivalent to version2 t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(5) t.equal(compare(v0, v1, loose), 0, `${v0} ${v1}`) t.equal(compare(v1, v0, loose), 0, `${v1} ${v0}`) t.equal(compare(v0, v0, loose), 0, `${v0} ${v0}`) t.equal(compare(v1, v1, loose), 0, `${v1} ${v1}`) // also test with an object. they are === because obj.version matches t.equal(compare(new SemVer(v0, { loose: loose }), new SemVer(v1, { loose: loose })), 0, `compare(${v0}, ${v1}) object`) })) t.end() }) node-semver-7.1.3/test/functions/diff.js000066400000000000000000000016101362062110300201730ustar00rootroot00000000000000const { test } = require('tap') const diff = require('../../functions/diff') test('diff versions test', (t) => { // [version1, version2, result] // diff(version1, version2) -> result [['1.2.3', '0.2.3', 'major'], ['1.4.5', '0.2.3', 'major'], ['1.2.3', '2.0.0-pre', 'premajor'], ['1.2.3', '1.3.3', 'minor'], ['1.0.1', '1.1.0-pre', 'preminor'], ['1.2.3', '1.2.4', 'patch'], ['1.2.3', '1.2.4-pre', 'prepatch'], ['0.0.1', '0.0.1-pre', 'prerelease'], ['0.0.1', '0.0.1-pre-2', 'prerelease'], ['1.1.0', '1.1.0-pre', 'prerelease'], ['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'], ['1.0.0', '1.0.0', null] ].forEach((v) => { const version1 = v[0] const version2 = v[1] const wanted = v[2] const found = diff(version1, version2) const cmd = `diff(${version1}, ${version2})` t.equal(found, wanted, `${cmd} === ${wanted}`) }) t.end() }) node-semver-7.1.3/test/functions/eq.js000066400000000000000000000016131362062110300176730ustar00rootroot00000000000000const { test } = require('tap') const eq = require('../../functions/eq') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.notOk(eq(v0, v1, loose), `!eq(${v0}, ${v1})`) t.notOk(eq(v1, v0, loose), `!eq(${v1}, ${v0})`) t.ok(eq(v1, v1, loose), `eq('${v1}', '${v1}')`) t.ok(eq(v0, v0, loose), `eq('${v0}', '${v0}')`) })) }) test('equality tests', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.ok(eq(v0, v1, loose), `eq(${v0}, ${v1})`) t.ok(eq(v1, v0, loose), `eq(${v1}, ${v0})`) t.ok(eq(v0, v0, loose), `eq(${v0}, ${v0})`) t.ok(eq(v1, v1, loose), `eq(${v1}, ${v1})`) })) }) node-semver-7.1.3/test/functions/gt.js000066400000000000000000000014651362062110300177050ustar00rootroot00000000000000const { test } = require('tap') const gt = require('../../functions/gt') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.ok(gt(v0, v1, loose), `gt('${v0}', '${v1}')`) t.ok(!gt(v1, v0, loose), `!gt('${v1}', '${v0}')`) t.ok(!gt(v1, v1, loose), `!gt('${v1}', '${v1}')`) t.ok(!gt(v0, v0, loose), `!gt('${v0}', '${v0}')`) })) }) test('equality tests', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(2) t.ok(!gt(v0, v1, loose), `!gt(${v0}, ${v1})`) t.ok(!gt(v1, v0, loose), `!gt(${v1}, ${v0})`) })) }) node-semver-7.1.3/test/functions/gte.js000066400000000000000000000014731362062110300200510ustar00rootroot00000000000000const { test } = require('tap') const gte = require('../../functions/gte') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.ok(gte(v0, v1, loose), `gte('${v0}', '${v1}')`) t.ok(!gte(v1, v0, loose), `!gte('${v1}', '${v0}')`) t.ok(gte(v1, v1, loose), `gte('${v1}', '${v1}')`) t.ok(gte(v0, v0, loose), `gte('${v0}', '${v0}')`) })) }) test('equality tests', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(2) t.ok(gte(v0, v1, loose), `gte(${v0}, ${v1})`) t.ok(gte(v1, v0, loose), `gte(${v1}, ${v0})`) })) }) node-semver-7.1.3/test/functions/inc.js000066400000000000000000000014411362062110300200360ustar00rootroot00000000000000const { test } = require('tap') const inc = require('../../functions/inc') const parse = require('../../functions/parse') const increments = require('../fixtures/increments.js') test('increment versions test', (t) => { increments.forEach(([pre, what, wanted, options, id]) => { const found = inc(pre, what, options, id) const cmd = `inc(${pre}, ${what}, ${id})` t.equal(found, wanted, `${cmd} === ${wanted}`) const parsed = parse(pre, options) if (wanted) { parsed.inc(what, id) t.equal(parsed.version, wanted, `${cmd} object version updated`) t.equal(parsed.raw, wanted, `${cmd} object raw field updated`) } else if (parsed) { t.throws(() => { parsed.inc(what, id) }) } else { t.equal(parsed, null) } }) t.end() }) node-semver-7.1.3/test/functions/lt.js000066400000000000000000000014651362062110300177120ustar00rootroot00000000000000const { test } = require('tap') const lt = require('../../functions/lt') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.ok(!lt(v0, v1, loose), `!lt('${v0}', '${v1}')`) t.ok(lt(v1, v0, loose), `lt('${v1}', '${v0}')`) t.ok(!lt(v1, v1, loose), `!lt('${v1}', '${v1}')`) t.ok(!lt(v0, v0, loose), `!lt('${v0}', '${v0}')`) })) }) test('equality tests', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(2) t.ok(!lt(v0, v1, loose), `!lt(${v0}, ${v1})`) t.ok(!lt(v1, v0, loose), `!lt(${v1}, ${v0})`) })) }) node-semver-7.1.3/test/functions/lte.js000066400000000000000000000014731362062110300200560ustar00rootroot00000000000000const { test } = require('tap') const lte = require('../../functions/lte') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.ok(!lte(v0, v1, loose), `!lte('${v0}', '${v1}')`) t.ok(lte(v1, v0, loose), `lte('${v1}', '${v0}')`) t.ok(lte(v1, v1, loose), `lte('${v1}', '${v1}')`) t.ok(lte(v0, v0, loose), `lte('${v0}', '${v0}')`) })) }) test('equality tests', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(2) t.ok(lte(v0, v1, loose), `lte(${v0}, ${v1})`) t.ok(lte(v1, v0, loose), `lte(${v1}, ${v0})`) })) }) node-semver-7.1.3/test/functions/major.js000066400000000000000000000011571362062110300204010ustar00rootroot00000000000000const { test } = require('tap') const major = require('../../functions/major') test('major tests', (t) => { // [range, version] // Version should be detectable despite extra characters [ ['1.2.3', 1], [' 1.2.3 ', 1], [' 2.2.3-4 ', 2], [' 3.2.3-pre ', 3], ['v5.2.3', 5], [' v8.2.3 ', 8], ['\t13.2.3', 13], ['=21.2.3', 21, true], ['v=34.2.3', 34, true] ].forEach((tuple) => { const range = tuple[0] const version = tuple[1] const loose = tuple[2] || false const msg = `major(${range}) = ${version}` t.equal(major(range, loose), version, msg) }) t.end() }) node-semver-7.1.3/test/functions/minor.js000066400000000000000000000011571362062110300204150ustar00rootroot00000000000000const { test } = require('tap') const minor = require('../../functions/minor') test('minor tests', (t) => { // [range, version] // Version should be detectable despite extra characters [ ['1.1.3', 1], [' 1.1.3 ', 1], [' 1.2.3-4 ', 2], [' 1.3.3-pre ', 3], ['v1.5.3', 5], [' v1.8.3 ', 8], ['\t1.13.3', 13], ['=1.21.3', 21, true], ['v=1.34.3', 34, true] ].forEach((tuple) => { const range = tuple[0] const version = tuple[1] const loose = tuple[2] || false const msg = `minor(${range}) = ${version}` t.equal(minor(range, loose), version, msg) }) t.end() }) node-semver-7.1.3/test/functions/neq.js000066400000000000000000000016551362062110300200570ustar00rootroot00000000000000const { test } = require('tap') const neq = require('../../functions/neq') const comparisons = require('../fixtures/comparisons.js') const equality = require('../fixtures/equality.js') test('comparison tests', t => { t.plan(comparisons.length) comparisons.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.ok(neq(v0, v1, loose), `neq(${v0}, ${v1})`) t.ok(neq(v1, v0, loose), `neq(${v1}, ${v0})`) t.notOk(neq(v1, v1, loose), `!neq('${v1}', '${v1}')`) t.notOk(neq(v0, v0, loose), `!neq('${v0}', '${v0}')`) })) }) test('equality tests', t => { t.plan(equality.length) equality.forEach(([v0, v1, loose]) => t.test(`${v0} ${v1} ${loose}`, t => { t.plan(4) t.notOk(neq(v0, v1, loose), `!neq(${v0}, ${v1})`) t.notOk(neq(v1, v0, loose), `!neq(${v1}, ${v0})`) t.notOk(neq(v0, v0, loose), `!neq(${v0}, ${v0})`) t.notOk(neq(v1, v1, loose), `!neq(${v1}, ${v1})`) })) }) node-semver-7.1.3/test/functions/parse.js000066400000000000000000000014221362062110300203760ustar00rootroot00000000000000const t = require('tap') const parse = require('../../functions/parse') const SemVer = require('../../classes/semver') const invalidVersions = require('../fixtures/invalid-versions') t.test('returns null instead of throwing when presented with garbage', t => { t.plan(invalidVersions.length) invalidVersions.forEach(([v, msg, opts]) => t.equal(parse(v, opts), null, msg)) }) t.test('parse a version into a SemVer object', t => { t.match(parse('1.2.3'), new SemVer('1.2.3')) const s = new SemVer('4.5.6') t.equal(parse(s), s, 'just return it if its a SemVer obj') const loose = new SemVer('4.2.0', { loose: true }) t.match(parse('4.2.0', true), loose, 'looseness as a boolean') t.match(parse('4.2.0', { loose: true }), loose, 'looseness as an option') t.end() }) node-semver-7.1.3/test/functions/patch.js000066400000000000000000000011571362062110300203700ustar00rootroot00000000000000const { test } = require('tap') const patch = require('../../functions/patch') test('patch tests', (t) => { // [range, version] // Version should be detectable despite extra characters [ ['1.2.1', 1], [' 1.2.1 ', 1], [' 1.2.2-4 ', 2], [' 1.2.3-pre ', 3], ['v1.2.5', 5], [' v1.2.8 ', 8], ['\t1.2.13', 13], ['=1.2.21', 21, true], ['v=1.2.34', 34, true] ].forEach((tuple) => { const range = tuple[0] const version = tuple[1] const loose = tuple[2] || false const msg = `patch(${range}) = ${version}` t.equal(patch(range, loose), version, msg) }) t.end() }) node-semver-7.1.3/test/functions/prerelease.js000066400000000000000000000012511362062110300214130ustar00rootroot00000000000000const { test } = require('tap') const prerelease = require('../../functions/prerelease') test('prerelease', (t) => { // [prereleaseParts, version, loose] [ [['alpha', 1], '1.2.2-alpha.1'], [[1], '0.6.1-1'], [['beta', 2], '1.0.0-beta.2'], [['pre'], 'v0.5.4-pre'], [['alpha', 1], '1.2.2-alpha.1', false], [['beta'], '0.6.1beta', true], [null, '1.0.0', true], [null, '~2.0.0-alpha.1', false], [null, 'invalid version'] ].forEach((tuple) => { const expected = tuple[0] const version = tuple[1] const loose = tuple[2] const msg = `prerelease(${version})` t.same(prerelease(version, loose), expected, msg) }) t.end() }) node-semver-7.1.3/test/functions/rcompare.js000066400000000000000000000004451362062110300211000ustar00rootroot00000000000000const { test } = require('tap') const rcompare = require('../../functions/rcompare') test('rcompare', (t) => { t.equal(rcompare('1.0.0', '1.0.1'), 1) t.equal(rcompare('1.0.0', '1.0.0'), 0) t.equal(rcompare('1.0.0+0', '1.0.0'), 0) t.equal(rcompare('1.0.1', '1.0.0'), -1) t.end() }) node-semver-7.1.3/test/functions/rsort.js000066400000000000000000000005121362062110300204340ustar00rootroot00000000000000const { test } = require('tap') const rsort = require('../../functions/rsort') test('sorting', (t) => { const list = [ '1.2.3+1', '1.2.3+0', '1.2.3', '5.9.6', '0.1.2' ] const rsorted = [ '5.9.6', '1.2.3+1', '1.2.3+0', '1.2.3', '0.1.2' ] t.same(rsort(list), rsorted) t.end() }) node-semver-7.1.3/test/functions/satisfies.js000066400000000000000000000017361362062110300212660ustar00rootroot00000000000000const { test } = require('tap') const satisfies = require('../../functions/satisfies') const rangeInclude = require('../fixtures/range-include.js') const rangeExclude = require('../fixtures/range-exclude.js') test('range tests', t => { t.plan(rangeInclude.length) rangeInclude.forEach(([range, ver, options]) => t.ok(satisfies(ver, range, options), `${range} satisfied by ${ver}`)) }) test('negative range tests', t => { t.plan(rangeExclude.length) rangeExclude.forEach(([range, ver, options]) => t.notOk(satisfies(ver, range, options), `${range} not satisfied by ${ver}`)) }) test('invalid ranges never satisfied (but do not throw)', t => { const cases = [ ['blerg', '1.2.3'], ['git+https://user:password0123@github.com/foo', '123.0.0', true], ['^1.2.3', '2.0.0-pre'], ['0.x', undefined], ['*', undefined], ] t.plan(cases.length) cases.forEach(([range, ver]) => t.notOk(satisfies(ver, range), `${range} not satisfied because invalid`)) }) node-semver-7.1.3/test/functions/sort.js000066400000000000000000000005061362062110300202550ustar00rootroot00000000000000const { test } = require('tap') const sort = require('../../functions/sort') test('sorting', (t) => { const list = [ '1.2.3+1', '1.2.3+0', '1.2.3', '5.9.6', '0.1.2' ] const sorted = [ '0.1.2', '1.2.3', '1.2.3+0', '1.2.3+1', '5.9.6' ] t.same(sort(list), sorted) t.end() }) node-semver-7.1.3/test/functions/valid.js000066400000000000000000000013541362062110300203670ustar00rootroot00000000000000const t = require('tap') const valid = require('../../functions/valid') const SemVer = require('../../classes/semver') const invalidVersions = require('../fixtures/invalid-versions') t.test('returns null instead of throwing when presented with garbage', t => { t.plan(invalidVersions.length) invalidVersions.forEach(([v, msg, opts]) => t.equal(valid(v, opts), null, msg)) }) t.test('validate a version into a SemVer object', t => { t.equal(valid('1.2.3'), '1.2.3') const s = new SemVer('4.5.6') t.equal(valid(s), '4.5.6', 'return the version if a SemVer obj') t.equal(valid('4.2.0foo', true), '4.2.0-foo', 'looseness as a boolean') t.equal(valid('4.2.0foo', { loose: true }), '4.2.0-foo', 'looseness as an option') t.end() }) node-semver-7.1.3/test/index.js000066400000000000000000000005171362062110300163670ustar00rootroot00000000000000const t = require('tap') const semver = require('../') const {SEMVER_SPEC_VERSION} = require('../internal/constants') t.match(Object.getOwnPropertyDescriptor(semver, 'SEMVER_SPEC_VERSION'), { get: undefined, set: undefined, value: SEMVER_SPEC_VERSION, configurable: true, enumerable: true }, 'just a normal value property') node-semver-7.1.3/test/internal/000077500000000000000000000000001362062110300165335ustar00rootroot00000000000000node-semver-7.1.3/test/internal/constants.js000066400000000000000000000003721362062110300211070ustar00rootroot00000000000000const t = require('tap') const constants = require('../../internal/constants') t.match(constants, { SEMVER_SPEC_VERSION: String, MAX_LENGTH: Number, MAX_SAFE_INTEGER: Number, MAX_SAFE_COMPONENT_LENGTH: Number }, 'got some numbers exported') node-semver-7.1.3/test/internal/debug.js000066400000000000000000000021651362062110300201630ustar00rootroot00000000000000const main = () => { const t = require('tap') const {spawn} = require('child_process') t.plan(2) t.test('without env set', t => { const c = spawn(process.execPath, [__filename, 'child'], {env: { ...process.env, NODE_DEBUG: '' }}) const err = [] c.stderr.on('data', chunk => err.push(chunk)) c.on('close', (code, signal) => { t.equal(code, 0, 'success exit status') t.equal(signal, null, 'no signal') t.equal(Buffer.concat(err).toString('utf8'), '', 'got no output') t.end() }) }) t.test('with env set', t => { const c = spawn(process.execPath, [__filename, 'child'], {env: { ...process.env, NODE_DEBUG: 'semver' }}) const err = [] c.stderr.on('data', chunk => err.push(chunk)) c.on('close', (code, signal) => { t.equal(code, 0, 'success exit status') t.equal(signal, null, 'no signal') t.equal(Buffer.concat(err).toString('utf8'), 'SEMVER hello, world\n', 'got expected output') t.end() }) }) t.end() } if (process.argv[2] === 'child') { require('../../internal/debug')('hello, world') } else { main() } node-semver-7.1.3/test/internal/identifiers.js000066400000000000000000000010011362062110300213660ustar00rootroot00000000000000const { test } = require('tap') const { compareIdentifiers, rcompareIdentifiers } = require('../../internal/identifiers') test('rcompareIdentifiers and compareIdentifiers', (t) => { const set = [ ['1', '2'], ['alpha', 'beta'], ['0', 'beta'] ] set.forEach((ab) => { const a = ab[0] const b = ab[1] t.equal(compareIdentifiers(a, b), -1) t.equal(rcompareIdentifiers(a, b), 1) }) t.equal(compareIdentifiers('0', '0'), 0) t.equal(rcompareIdentifiers('0', '0'), 0) t.end() }) node-semver-7.1.3/test/internal/re.js000066400000000000000000000007521362062110300175030ustar00rootroot00000000000000const { test } = require('tap') const { src, re } = require('../../internal/re') const semver = require('../../') test('has a list of src, re, and tokens', (t) => { t.match(Object.assign({}, semver), { src: Array, re: Array, tokens: Object }) re.forEach(r => t.match(r, RegExp, 'regexps are regexps')) src.forEach(s => t.match(s, String, 'src is strings')) for (const i in semver.tokens) { t.match(semver.tokens[i], Number, 'tokens are numbers') } t.end() }) node-semver-7.1.3/test/preload.js000066400000000000000000000002321362062110300167000ustar00rootroot00000000000000const t = require('tap') const preload = require('../preload.js') const index = require('../index.js') t.equal(preload, index, 'preload and index match') node-semver-7.1.3/test/ranges/000077500000000000000000000000001362062110300161765ustar00rootroot00000000000000node-semver-7.1.3/test/ranges/gtr.js000066400000000000000000000015771362062110300173420ustar00rootroot00000000000000const { test } = require('tap') const gtr = require('../../ranges/gtr') const versionGtr = require('../fixtures/version-gt-range') const versionNotGtr = require('../fixtures/version-not-gt-range') test('gtr tests', (t) => { // [range, version, loose] // Version should be greater than range versionGtr.forEach((tuple) => { const range = tuple[0] const version = tuple[1] const loose = tuple[2] || false const msg = `gtr(${version}, ${range}, ${loose})` t.ok(gtr(version, range, loose), msg) }) t.end() }) test('negative gtr tests', (t) => { // [range, version, loose] // Version should NOT be greater than range versionNotGtr.forEach((tuple) => { const range = tuple[0] const version = tuple[1] const loose = tuple[2] || false const msg = `!gtr(${version}, ${range}, ${loose})` t.notOk(gtr(version, range, loose), msg) }) t.end() }) node-semver-7.1.3/test/ranges/intersects.js000066400000000000000000000044331362062110300207230ustar00rootroot00000000000000const { test } = require('tap') const intersects = require('../../ranges/intersects') const Range = require('../../classes/range') const Comparator = require('../../classes/comparator') const comparatorIntersection = require('../fixtures/comparator-intersection.js') const rangeIntersection = require('../fixtures/range-intersection.js') test('intersect comparators', t => { t.plan(comparatorIntersection.length) comparatorIntersection.forEach(([c0, c1, expect]) => t.test(`${c0} ${c1} ${expect}`, t => { const comp0 = new Comparator(c0) const comp1 = new Comparator(c1) t.equal(intersects(comp0, comp1), expect, `${c0} intersects ${c1} objects`) t.equal(intersects(comp1, comp0), expect, `${c1} intersects ${c0} objects`) t.equal(intersects(comp0, comp1, true), expect, `${c0} intersects ${c1} loose, objects`) t.equal(intersects(comp1, comp0, true), expect, `${c1} intersects ${c0} loose, objects`) t.equal(intersects(c0, c1), expect, `${c0} intersects ${c1}`) t.equal(intersects(c1, c0), expect, `${c1} intersects ${c0}`) t.equal(intersects(c0, c1, true), expect, `${c0} intersects ${c1} loose`) t.equal(intersects(c1, c0, true), expect, `${c1} intersects ${c0} loose`) t.end() })) }) test('ranges intersect', (t) => { rangeIntersection.forEach(([r0, r1, expect]) => { t.test(`${r0} <~> ${r1}`, t => { const range0 = new Range(r0) const range1 = new Range(r1) t.equal(intersects(r1, r0), expect, `${r0} <~> ${r1}`) t.equal(intersects(r0, r1), expect, `${r1} <~> ${r0}`) t.equal(intersects(r1, r0, true), expect, `${r0} <~> ${r1} loose`) t.equal(intersects(r0, r1, true), expect, `${r1} <~> ${r0} loose`) t.equal(intersects(range0, range1), expect, `${r0} <~> ${r1} objects`) t.equal(intersects(range1, range0), expect, `${r1} <~> ${r0} objects`) t.equal(intersects(range0, range1, true), expect, `${r0} <~> ${r1} objects loose`) t.equal(intersects(range1, range0, true), expect, `${r1} <~> ${r0} objects loose`) t.end() }) }) t.end() }) test('missing comparator parameter in intersect comparators', (t) => { t.throws(() => { new Comparator('>1.0.0').intersects() }, new TypeError('a Comparator is required'), 'throws type error') t.end() }) node-semver-7.1.3/test/ranges/ltr.js000066400000000000000000000013651362062110300173420ustar00rootroot00000000000000const { test } = require('tap') const ltr = require('../../ranges/ltr') const versionLtr = require('../fixtures/version-lt-range') const versionNotLtr = require('../fixtures/version-not-lt-range') test('ltr tests', (t) => { // [range, version, loose] // Version should be less than range versionLtr.forEach(([range, version, loose = false]) => { const msg = `ltr(${version}, ${range}, ${loose})` t.ok(ltr(version, range, loose), msg) }) t.end() }) test('negative ltr tests', (t) => { // [range, version, loose] // Version should NOT be less than range versionNotLtr.forEach(([range, version, loose = false]) => { const msg = `!ltr(${version}, ${range}, ${loose})` t.notOk(ltr(version, range, loose), msg) }) t.end() }) node-semver-7.1.3/test/ranges/max-satisfying.js000066400000000000000000000013571362062110300215050ustar00rootroot00000000000000const { test } = require('tap') const maxSatisfying = require('../../ranges/max-satisfying') test('max satisfying', (t) => { [[['1.2.3', '1.2.4'], '1.2', '1.2.4'], [['1.2.4', '1.2.3'], '1.2', '1.2.4'], [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'], [['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true] ].forEach((v) => { const versions = v[0] const range = v[1] const expect = v[2] const loose = v[3] const actual = maxSatisfying(versions, range, loose) t.equal(actual, expect) }) t.end() }) test('bad ranges in max satisfying', (t) => { const r = 'some frogs and sneks-v2.5.6' t.equal(maxSatisfying([], r), null) t.end() }) node-semver-7.1.3/test/ranges/min-satisfying.js000066400000000000000000000013571362062110300215030ustar00rootroot00000000000000const { test } = require('tap') const minSatisfying = require('../../ranges/min-satisfying') test('min satisfying', (t) => { [[['1.2.3', '1.2.4'], '1.2', '1.2.3'], [['1.2.4', '1.2.3'], '1.2', '1.2.3'], [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.3'], [['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true] ].forEach((v) => { const versions = v[0] const range = v[1] const expect = v[2] const loose = v[3] const actual = minSatisfying(versions, range, loose) t.equal(actual, expect) }) t.end() }) test('bad ranges in min satisfying', (t) => { const r = 'some frogs and sneks-v2.5.6' t.equal(minSatisfying([], r), null) t.end() }) node-semver-7.1.3/test/ranges/min-version.js000066400000000000000000000035551362062110300210120ustar00rootroot00000000000000const { test } = require('tap') const minVersion = require('../../ranges/min-version') test('minimum version in range tests', (t) => { // [range, minimum, loose] [ // Stars ['*', '0.0.0'], ['* || >=2', '0.0.0'], ['>=2 || *', '0.0.0'], ['>2 || *', '0.0.0'], // equal ['1.0.0', '1.0.0'], ['1.0', '1.0.0'], ['1.0.x', '1.0.0'], ['1.0.*', '1.0.0'], ['1', '1.0.0'], ['1.x.x', '1.0.0'], ['1.x.x', '1.0.0'], ['1.*.x', '1.0.0'], ['1.x.*', '1.0.0'], ['1.x', '1.0.0'], ['1.*', '1.0.0'], ['=1.0.0', '1.0.0'], // Tilde ['~1.1.1', '1.1.1'], ['~1.1.1-beta', '1.1.1-beta'], ['~1.1.1 || >=2', '1.1.1'], // Carot ['^1.1.1', '1.1.1'], ['^1.1.1-beta', '1.1.1-beta'], ['^1.1.1 || >=2', '1.1.1'], // '-' operator ['1.1.1 - 1.8.0', '1.1.1'], ['1.1 - 1.8.0', '1.1.0'], // Less / less or equal ['<2', '0.0.0'], ['<0.0.0-beta', '0.0.0-0'], ['<0.0.1-beta', '0.0.0'], ['<2 || >4', '0.0.0'], ['>4 || <2', '0.0.0'], ['<=2 || >=4', '0.0.0'], ['>=4 || <=2', '0.0.0'], ['<0.0.0-beta >0.0.0-alpha', '0.0.0-alpha.0'], ['>0.0.0-alpha <0.0.0-beta', '0.0.0-alpha.0'], // Greater than or equal ['>=1.1.1 <2 || >=2.2.2 <2', '1.1.1'], ['>=2.2.2 <2 || >=1.1.1 <2', '1.1.1'], // Greater than but not equal ['>1.0.0', '1.0.1'], ['>1.0.0-0', '1.0.0-0.0'], ['>1.0.0-beta', '1.0.0-beta.0'], ['>2 || >1.0.0', '1.0.1'], ['>2 || >1.0.0-0', '1.0.0-0.0'], ['>2 || >1.0.0-beta', '1.0.0-beta.0'], // Impossible range ['>4 <3', null] ].forEach((tuple) => { const range = tuple[0] const version = tuple[1] const loose = tuple[2] || false const msg = `minVersion(${range}, ${loose}) = ${version}` const min = minVersion(range, loose) t.ok(min === version || (min && min.version === version), msg) }) t.end() }) node-semver-7.1.3/test/ranges/outside.js000066400000000000000000000032471362062110300202160ustar00rootroot00000000000000const { test } = require('tap') const outside = require('../../ranges/outside') const versionGtr = require('../fixtures/version-gt-range') const versionNotGtr = require('../fixtures/version-not-gt-range') const versionLtr = require('../fixtures/version-lt-range') const versionNotLtr = require('../fixtures/version-not-lt-range') test('gtr tests', (t) => { // [range, version, loose] // Version should be greater than range versionGtr.forEach(([range, version, loose = false]) => { const msg = `outside(${version}, ${range}, > ${loose})` t.ok(outside(version, range, '>', loose), msg) }) t.end() }) test('ltr tests', (t) => { // [range, version, loose] // Version should be less than range versionLtr.forEach(([range, version, loose = false]) => { const msg = `outside(${version}, ${range}, <, ${loose})` t.ok(outside(version, range, '<', loose), msg) }) t.end() }) test('negative gtr tests', (t) => { // [range, version, loose] // Version should NOT be greater than range versionNotGtr.forEach(([range, version, loose = false]) => { const msg = `!outside(${version}, ${range}, > ${loose})` t.notOk(outside(version, range, '>', loose), msg) }) t.end() }) test('negative ltr tests', (t) => { // [range, version, loose] // Version should NOT be less than range versionNotLtr.forEach(([range, version, loose = false]) => { const msg = `!outside(${version}, ${range}, < ${loose})` t.notOk(outside(version, range, '<', loose), msg) }) t.end() }) test('outside with bad hilo throws', (t) => { t.throws(() => { outside('1.2.3', '>1.5.0', 'blerg', true) }, new TypeError('Must provide a hilo val of "<" or ">"')) t.end() }) node-semver-7.1.3/test/ranges/to-comparators.js000066400000000000000000000056011362062110300215100ustar00rootroot00000000000000const { test } = require('tap') const toComparators = require('../../ranges/to-comparators') test('comparators test', (t) => { // [range, comparators] // turn range into a set of individual comparators [['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]], ['1.0.0', [['1.0.0']]], ['>=*', [['']]], ['', [['']]], ['*', [['']]], ['*', [['']]], ['>=1.0.0', [['>=1.0.0']]], ['>=1.0.0', [['>=1.0.0']]], ['>=1.0.0', [['>=1.0.0']]], ['>1.0.0', [['>1.0.0']]], ['>1.0.0', [['>1.0.0']]], ['<=2.0.0', [['<=2.0.0']]], ['1', [['>=1.0.0', '<2.0.0']]], ['<=2.0.0', [['<=2.0.0']]], ['<=2.0.0', [['<=2.0.0']]], ['<2.0.0', [['<2.0.0']]], ['<2.0.0', [['<2.0.0']]], ['>= 1.0.0', [['>=1.0.0']]], ['>= 1.0.0', [['>=1.0.0']]], ['>= 1.0.0', [['>=1.0.0']]], ['> 1.0.0', [['>1.0.0']]], ['> 1.0.0', [['>1.0.0']]], ['<= 2.0.0', [['<=2.0.0']]], ['<= 2.0.0', [['<=2.0.0']]], ['<= 2.0.0', [['<=2.0.0']]], ['< 2.0.0', [['<2.0.0']]], ['<\t2.0.0', [['<2.0.0']]], ['>=0.1.97', [['>=0.1.97']]], ['>=0.1.97', [['>=0.1.97']]], ['0.1.20 || 1.2.4', [['0.1.20'], ['1.2.4']]], ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]], ['||', [[''], ['']]], ['2.x.x', [['>=2.0.0', '<3.0.0']]], ['1.2.x', [['>=1.2.0', '<1.3.0']]], ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], ['x', [['']]], ['2.*.*', [['>=2.0.0', '<3.0.0']]], ['1.2.*', [['>=1.2.0', '<1.3.0']]], ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]], ['*', [['']]], ['2', [['>=2.0.0', '<3.0.0']]], ['2.3', [['>=2.3.0', '<2.4.0']]], ['~2.4', [['>=2.4.0', '<2.5.0']]], ['~2.4', [['>=2.4.0', '<2.5.0']]], ['~>3.2.1', [['>=3.2.1', '<3.3.0']]], ['~1', [['>=1.0.0', '<2.0.0']]], ['~>1', [['>=1.0.0', '<2.0.0']]], ['~> 1', [['>=1.0.0', '<2.0.0']]], ['~1.0', [['>=1.0.0', '<1.1.0']]], ['~ 1.0', [['>=1.0.0', '<1.1.0']]], ['~ 1.0.3', [['>=1.0.3', '<1.1.0']]], ['~> 1.0.3', [['>=1.0.3', '<1.1.0']]], ['<1', [['<1.0.0']]], ['< 1', [['<1.0.0']]], ['>=1', [['>=1.0.0']]], ['>= 1', [['>=1.0.0']]], ['<1.2', [['<1.2.0']]], ['< 1.2', [['<1.2.0']]], ['1', [['>=1.0.0', '<2.0.0']]], ['1 2', [['>=1.0.0', '<2.0.0', '>=2.0.0', '<3.0.0']]], ['1.2 - 3.4.5', [['>=1.2.0', '<=3.4.5']]], ['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0']]], ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]], ['>*', [['<0.0.0-0']]], ['<*', [['<0.0.0-0']]] ].forEach(([pre, wanted]) => { const found = toComparators(pre) const jw = JSON.stringify(wanted) t.equivalent(found, wanted, `toComparators(${pre}) === ${jw}`) }) t.end() }) node-semver-7.1.3/test/ranges/valid.js000066400000000000000000000006471362062110300176420ustar00rootroot00000000000000const { test } = require('tap') const validRange = require('../../ranges/valid') const rangeParse = require('../fixtures/range-parse.js') test('valid range test', (t) => { // validRange(range) -> result // translate ranges into their canonical form t.plan(rangeParse.length) rangeParse.forEach(([pre, wanted, options]) => t.equal(validRange(pre, options), wanted, `validRange(${pre}) === ${wanted}`)) })