pax_global_header00006660000000000000000000000064132423374420014516gustar00rootroot0000000000000052 comment=ae4c23b6db9cf934996a8ff748013dfff01d64e9 tld.js-2.3.1/000077500000000000000000000000001324233744200127175ustar00rootroot00000000000000tld.js-2.3.1/.github/000077500000000000000000000000001324233744200142575ustar00rootroot00000000000000tld.js-2.3.1/.github/ISSUE_TEMPLATE.md000066400000000000000000000001551324233744200167650ustar00rootroot00000000000000tld.js-2.3.1/.gitignore000066400000000000000000000002151324233744200147050ustar00rootroot00000000000000lib-cov *.seed *.log *.csv *.dat *.out *.pid *.gz pids logs results node_modules coverage* .idea .nyc_output rules.json tld.js tld.min.js tld.js-2.3.1/.jshintrc000066400000000000000000000003461324233744200145470ustar00rootroot00000000000000{ "curly": true, "eqeqeq": true, "immed": true, "latedef": true, "newcap": true, "noarg": true, "sub": true, "undef": true, "boss": true, "eqnull": true, "node": true, "strict": true }tld.js-2.3.1/.npmignore000066400000000000000000000001571324233744200147210ustar00rootroot00000000000000lib-cov *.seed *.log *.csv *.dat *.out *.pid *.gz pids logs results node_modules coverage* .idea .nyc_output tld.js-2.3.1/.travis.yml000066400000000000000000000011071324233744200150270ustar00rootroot00000000000000sudo: false dist: trusty language: node_js node_js: - v6 - node env: - MOZ_HEADLESS=1 addons: firefox: latest notifications: email: on_failure: change install: npm install --tldjs-update-rules post_script: npm run benchmark deploy: provider: npm email: hi@oncletom.io skip_cleanup: true api_key: secure: D+AvrtOi8eox2H+j6T1EmaRrFThTDRlfRDQjDdCs7D1WnPoSs0wMcnd0lVi0lEj68URkm/4fDmHVtLXt1V8BLyfHwt3bZUsF1pe77qUTZZkmfDI5TRxp/mni6TrpFTlYaqytyunPKm19FciWj/IE2epVhWmJ8kQx/oB/lSq9SFo= on: tags: true node: node branch: master repo: oncletom/tld.js tld.js-2.3.1/CHANGELOG.md000066400000000000000000000130041324233744200145260ustar00rootroot00000000000000## Change Log ### 2.3.1 (2018/02/18 17:59 +00:00) - [#116](https://github.com/oncletom/tld.js/pull/116) Publish bundles to npm (@chrmod) ### v2.3.0 (2018/02/02 14:13 +00:00) - [#108](https://github.com/oncletom/tld.js/pull/108) Add ip validation (@remusao) - [#113](https://github.com/oncletom/tld.js/pull/113) bundles it for the browser (@srashid5) - [#105](https://github.com/oncletom/tld.js/pull/105) Activating Open Collective (@oncletom, @xdamman) - [#115](https://github.com/oncletom/tld.js/pull/115) Use Firefox Headless for CI testing (@oncletom) ### v2.2.0 (2017/09/10 08:45 +00:00) - [#103](https://github.com/oncletom/tld.js/pull/103) API addition proposal + remove redundancy (@remusao) - [#98](https://github.com/oncletom/tld.js/pull/98) Add a benchmark script to tld.js to measure performance evolution (@remusao, @oncletom) ### v2.1.0 (2017/09/01 18:32 +00:00) - [#97](https://github.com/oncletom/tld.js/pull/97) Implement rules using a trie data structure. (@remusao) ### v2.0.0 (2017/07/19 08:36 +00:00) - [#92](https://github.com/oncletom/tld.js/pull/92) Remove polyfills (#92) (@oncletom) - [#96](https://github.com/oncletom/tld.js/pull/96) Add support for fully qualified domains (trailing dot in domain name) (#96) (@remusao) - [#91](https://github.com/oncletom/tld.js/pull/91) Bundle rules.json on prepublish (#91) (@oncletom) - [#90](https://github.com/oncletom/tld.js/pull/90) Remove bower and component support (#90) (@oncletom) - [#87](https://github.com/oncletom/tld.js/pull/87) Expose bound methods (#87) (@oncletom) - [#88](https://github.com/oncletom/tld.js/pull/88) Upgrade development dependencies (#88) (@oncletom) ### v1.7.0 (2016/09/13 19:44 +00:00) - [#84](https://github.com/oncletom/tld.js/pull/84) Add an interactive update system (#84) (@oncletom) - [#83](https://github.com/oncletom/tld.js/pull/83) Rectify the `tldExists("google.google")` README example (#83) (@oncletom) ### v1.6.3 (2016/09/13 17:07 +00:00) - [#81](https://github.com/oncletom/tld.js/pull/81) Publish to npm via Travis CI (#81) (@oncletom) - [#80](https://github.com/oncletom/tld.js/pull/80) Do not require end-users to have `npm@2` (#80) (@oncletom) ### v1.6.2 (2015/11/17 16:24 +00:00) - [#72](https://github.com/oncletom/tld.js/pull/72) Update rules to remove support for .an TLD (@oncletom) ### v1.6.1 (2015/11/03 09:12 +00:00) - [#70](https://github.com/oncletom/tld.js/pull/70) Update rules.json (@Kureev) ### v1.6.0 (2015/10/26 18:31 +00:00) - [#67](https://github.com/oncletom/tld.js/pull/67) Expose the updater as a lib function (@oncletom) - [#68](https://github.com/oncletom/tld.js/pull/68) Add tld.validHosts (@oncletom) ### v1.5.5 (2015/10/13 21:04 +00:00) - [#65](https://github.com/oncletom/tld.js/pull/65) Make sure we do not commit bower_components folder (@oncletom) ### v1.5.4 (2015/09/17 10:59 +00:00) - [#60](https://github.com/oncletom/tld.js/pull/60) Update cleanHostValue so it never returns invalid hostname characters (@myndzi) - [#62](https://github.com/oncletom/tld.js/pull/62) Adding tests for `getPublicSuffix` (@oncletom) - [#61](https://github.com/oncletom/tld.js/pull/61) Build against all major nodejs and iojs versions (@jdesboeufs) ### v1.5.3 (2015/06/19 11:09 +00:00) - [#55](https://github.com/oncletom/tld.js/pull/55) Url parse (@myndzi) ### v1.5.2 (2015/01/15 09:56 +00:00) - [#52](https://github.com/oncletom/tld.js/pull/52) Make rules with no exceptions valid (@GreyKn) ### 1.5.1 (2014/10/08 11:30 +00:00) - [#50](https://github.com/oncletom/tld.js/pull/50) 93% to 97% CI code coverage. (@oncletom) - [#49](https://github.com/oncletom/tld.js/pull/49) URL as a parameter in path broke `cleanHostValue` (@oncletom) - [#44](https://github.com/oncletom/tld.js/pull/44) Fix typo in README. (@ghostwords) ### 1.3.3 (2014/05/21 14:39 +00:00) - [#41](https://github.com/oncletom/tld.js/pull/41) Remove url fragments from host name (@jhnns) ### 1.3.2 (2014/05/07 08:35 +00:00) - [#39](https://github.com/oncletom/tld.js/pull/39) Use publicsuffix.org instead of hg.mozilla.org (@Krinkle) ### 1.3.1 (2014/01/17 13:20 +00:00) - [#36](https://github.com/oncletom/tld.js/pull/36) Remove grunt dependency (@oncletom) - [#35](https://github.com/oncletom/tld.js/pull/35) [WIP] tldjs gives inconsistent results (@oncletom) - [#33](https://github.com/oncletom/tld.js/pull/33) tldjs chokes on weird domains (@oncletom) ### 1.3.0 (2013/11/07 15:21 +00:00) - [#32](https://github.com/oncletom/tld.js/pull/32) add support for component.io (@olivoil) - [#31](https://github.com/oncletom/tld.js/pull/31) Browser feature (@oncletom) - [#29](https://github.com/oncletom/tld.js/pull/29) Grunt 0.4 and Node 0.10 compatibility (@oncletom) ### 1.1.2 (2013/01/08 13:31 +00:00) - [#13](https://github.com/oncletom/tld.js/pull/13) add getSubdomain() (@oncletom) - [#14](https://github.com/oncletom/tld.js/pull/14) add domainExists() (@oncletom) - [#24](https://github.com/oncletom/tld.js/pull/24) isValid() does the wrong job (@oncletom) - [#3](https://github.com/oncletom/tld.js/pull/3) Test Rule object (@oncletom) - [#23](https://github.com/oncletom/tld.js/pull/23) Bumping request version (@oncletom) ### 1.1.0 (2012/12/31 12:12 +00:00) - [#11](https://github.com/oncletom/tld.js/pull/11) rules as regexp (@oncletom) - [#9](https://github.com/oncletom/tld.js/pull/9) Migrate build task as a Grunt task (@oncletom) ### 1.0.2 (2012/12/06 15:51 +00:00) - [#7](https://github.com/oncletom/tld.js/pull/7) checkPublicSuffix('example.example', 'example.example'); is failing (@oncletom) - [#6](https://github.com/oncletom/tld.js/pull/6) Updated the rules from http://publicsuffix.org/ (@yehezkielbs)tld.js-2.3.1/LICENSE000066400000000000000000000020431324233744200137230ustar00rootroot00000000000000Copyright (c) 2017 Thomas Parisot Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. tld.js-2.3.1/README.md000066400000000000000000000271241324233744200142040ustar00rootroot00000000000000# tld.js [![Backers on Open Collective](https://opencollective.com/tldjs/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/tldjs/sponsors/badge.svg)](#sponsors) [![Build Status][badge-ci]](http://travis-ci.org/oncletom/tld.js) ![][badge-downloads] > `tld.js` is a Node.js module written in JavaScript to work against complex domain names, subdomains and well-known TLDs. It answers with accuracy to questions like _what is `mail.google.com`'s domain?_, _what is `a.b.ide.kyoto.jp`'s subdomain?_ and _is `https://big.data`'s TLD a well-known one?_. `tld.js` [runs fast](#performances), is fully tested and is safe to use in the browser (with [browserify][], webpack and others). Because it relies on Mozilla's [public suffix list][], now is a good time to say _thank you_ Mozilla! # Install ```bash # Regular install npm install --save tldjs # You can update the list of well-known TLD during the install npm install --save tldjs --tldjs-update-rules ``` The latter is useful if you significantly rely on an up-to-date list of TLDs. You can [list the recent changes][] ([changes Atom Feed][]) to get a better idea of what is going on in the Public Suffix world. # Using It ```js const {parse, tldExists} = require('tldjs'); // Checking only if TLD exists in URL or hostname // First TLD exists; the second does not. console.log(tldExists('https://www.bbc')); console.log(tldExists('tld.unknown')); // Retrieving hostname related informations of a given URL parse('http://www.writethedocs.org/conf/eu/2017/'); ``` 👋 [Try it your browser to see how it works][interactive-example].
⬇️ Read the documentation _below_ to find out the available _functions_. ## `tldjs.parse()` This methods returns handy **properties about a URL or a hostname**. ```js const tldjs = require('tldjs'); tldjs.parse('https://spark-public.s3.amazonaws.com/dataanalysis/loansData.csv'); // { hostname: 'spark-public.s3.amazonaws.com', // isValid: true, // isIp: false, // tldExists: true, // publicSuffix: 's3.amazonaws.com', // domain: 'spark-public.s3.amazonaws.com', // subdomain: '' // } tldjs.parse('gopher://domain.unknown/'); // { hostname: 'domain.unknown', // isValid: true, // isIp: false, // tldExists: false, // publicSuffix: 'unknown', // domain: 'domain.unknown', // subdomain: '' // } tldjs.parse('https://192.168.0.0') // { hostname: '192.168.0.0', // isValid: true, // isIp: true, // tldExists: false, // publicSuffix: null, // domain: null, // subdomain: null // } ``` | Property Name | Type | | | --- | --- | --- | | `hostname` | `String` | | | `isValid` | `Boolean` | Is the hostname valid according to the RFC? | | `tldExists` | `Boolean` | Is the TLD well-known or not? | | `publicSuffix`| `String` | | | `domain` | `String` | | | `subdomain` | `String` | | ## Single purpose methods These methods are shorthands if you want to retrieve only a single value. ### tldExists() Checks if the TLD is _well-known_ for a given hostname — parseable with [`require('url').parse`][]. ```javascript const { tldExists } = tldjs; tldExists('google.com'); // returns `true` tldExists('google.local'); // returns `false` (not an explicit registered TLD) tldExists('com'); // returns `true` tldExists('uk'); // returns `true` tldExists('co.uk'); // returns `true` (because `uk` is a valid TLD) tldExists('amazon.fancy.uk'); // returns `true` (still because `uk` is a valid TLD) tldExists('amazon.co.uk'); // returns `true` (still because `uk` is a valid TLD) tldExists('https://user:password@example.co.uk:8080/some/path?and&query#hash'); // returns `true` ``` ### getDomain() Returns the fully qualified domain from a given string — parseable with [`require('url').parse`][]. ```javascript const { getDomain } = tldjs; getDomain('google.com'); // returns `google.com` getDomain('fr.google.com'); // returns `google.com` getDomain('fr.google.google'); // returns `google.google` getDomain('foo.google.co.uk'); // returns `google.co.uk` getDomain('t.co'); // returns `t.co` getDomain('fr.t.co'); // returns `t.co` getDomain('https://user:password@example.co.uk:8080/some/path?and&query#hash'); // returns `example.co.uk` ``` ### getSubdomain() Returns the complete subdomain for a given string — parseable with [`require('url').parse`][]. ```javascript const { getSubdomain } = tldjs; getSubdomain('google.com'); // returns `` getSubdomain('fr.google.com'); // returns `fr` getSubdomain('google.co.uk'); // returns `` getSubdomain('foo.google.co.uk'); // returns `foo` getSubdomain('moar.foo.google.co.uk'); // returns `moar.foo` getSubdomain('t.co'); // returns `` getSubdomain('fr.t.co'); // returns `fr` getSubdomain('https://user:password@secure.example.co.uk:443/some/path?and&query#hash'); // returns `secure` ``` ### getPublicSuffix() Returns the [public suffix][] for a given string — parseable with [`require('url').parse`][]. ```javascript const { getPublicSuffix } = tldjs; getPublicSuffix('google.com'); // returns `com` getPublicSuffix('fr.google.com'); // returns `com` getPublicSuffix('google.co.uk'); // returns `co.uk` getPublicSuffix('s3.amazonaws.com'); // returns `s3.amazonaws.com` getPublicSuffix('tld.is.unknown'); // returns `unknown` ``` ### isValid() Checks the validity of a given string — parseable with [`require('url').parse`][]. It does not check if the TLD is _well-known_. ```javascript const { isValid } = tldjs; isValid('google.com'); // returns `true` isValid('.google.com'); // returns `false` isValid('my.fake.domain'); // returns `true` isValid('localhost'); // returns `false` isValid('https://user:password@example.co.uk:8080/some/path?and&query#hash'); // returns `true` isValid('192.168.0.0') // returns `true` ``` # Troubleshooting ## Retrieving subdomain of `localhost` and custom hostnames `tld.js` methods `getDomain` and `getSubdomain` are designed to **work only with *known and valid* TLDs**. This way, you can trust what a domain is. `localhost` is a valid hostname but not a TLD. Although you can instanciate your own flavour of `tld.js` with *additional valid hosts*: ```js const tldjs = require('tldjs'); tldjs.getDomain('localhost'); // returns null tldjs.getSubdomain('vhost.localhost'); // returns null const myTldjs = tldjs.fromUserSettings({ validHosts: ['localhost'] }); myTldjs.getDomain('localhost'); // returns 'localhost' myTldjs.getSubdomain('vhost.localhost'); // returns 'vhost' ``` ## Updating the TLDs List Many libraries offer a list of TLDs. But, are they up-to-date? And how to update them? `tld.js` bundles a list of known TLDs but this list can become outdated. This is especially true if the package have not been updated on npm for a while. Hopefully for you, even if I'm flying over the world, if I've lost my Internet connection or even if you do manage your own list, you can update it by yourself, painlessly. How? By passing the `--tldjs-update-rules` to your `npm install` command: ```bash # anytime you reinstall your project npm install --tldjs-update-rules # or if you add the dependency to your project npm install --save tldjs --tldjs-update-rules ``` Open an issue to request an update of the bundled TLDs. # Contributing Provide a pull request (with tested code) to include your work in this main project. Issues may be awaiting for help so feel free to give a hand, with code or ideas. # Performances `tld.js` is fast, but keep in mind that it might vary depending on your own use-case. Because the library tried to be smart, the speed can be drastically different depending on the input (it will be faster if you provide an already cleaned hostname, compared to a random URL). On an Intel i7-6600U (2,60-3,40 GHz): ## For already cleaned hostnames | Methods | ops/sec | | --- | --- | | `isValid` | ~`8,700,000` | | `extractHostname` | ~`8,100,000` | | `tldExists` | ~`2,000,000` | | `getPublicSuffix` | ~`1,130,000` | | `getDomain` | ~`1,000,000` | | `getSubdomain` | ~`1,000,000` | | `parse` | ~`850,000` | ## For random URLs | Methods | ops/sec | | --- | --- | | `isValid` | ~`25,400,000` | | `extractHostname` | ~`400,000` | | `tldExists` | ~`310,000` | | `getPublicSuffix` | ~`240,000` | | `getDomain` | ~`240,000` | | `getSubdomain` | ~`240,000` | | `parse` | ~`230,000` | You can measure the performance of `tld.js` on your hardware by running the following command: ```bash npm run benchmark ``` _Notice_: if this is not fast enough for your use-case, keep in mind that you can provide your own `extractHostname` function (which is the bottleneck in this benchmark) to `tld.js`. ## Contributors This project exists thanks to all the people who contribute. [[Contribute]](CONTRIBUTING.md). ## Backers Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/tldjs#backer)] ## Sponsors Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/tldjs#sponsor)] # License [MIT License](LICENSE). [badge-ci]: https://secure.travis-ci.org/oncletom/tld.js.svg?branch=master [badge-downloads]: https://img.shields.io/npm/dm/tldjs.svg [public suffix list]: https://publicsuffix.org/list/ [list the recent changes]: https://github.com/publicsuffix/list/commits/master [changes Atom Feed]: https://github.com/publicsuffix/list/commits/master.atom [browserify CDN]: https://wzrd.in/ [browserify]: http://browserify.org/ [interactive-example]: https://runkit.com/oncletom/tld.js-runkit-example [`require('url').parse`]: https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost [public suffix]: https://publicsuffix.org/learn/ tld.js-2.3.1/bin/000077500000000000000000000000001324233744200134675ustar00rootroot00000000000000tld.js-2.3.1/bin/benchmark.js000077500000000000000000000065771324233744200160010ustar00rootroot00000000000000#!/usr/bin/env node 'use strict'; var tld = require('../index.js'); var Benchmark = require('benchmark'); var HOSTNAMES = [ // No public suffix 'example.foo.edu.au', // null 'example.foo.edu.sh', // null 'example.disrec.thingdust.io', // null 'foo.bar.baz.ortsinfo.at', // null // ICANN 'example.foo.nom.br', // *.nom.br 'example.wa.edu.au', // wa.edu.au 'example.com', // com 'example.co.uk', // co.uk // Private 'foo.bar.baz.stolos.io', // *.stolos.io 'foo.art.pl', // art.pl 'foo.privatizehealthinsurance.net', // privatizehealthinsurance.net 'example.cust.disrec.thingdust.io', // cust.disrec.thingdust.io // Exception 'foo.city.kitakyushu.jp', // !city.kitakyushu.jp 'example.www.ck', // !www.ck 'foo.bar.baz.city.yokohama.jp', // !city.yokohama.jp 'example.city.kobe.jp', // !city.kobe.jp ]; var URLS = [ // IDN labels 'example.北海道.jp', // 北海道.jp 'example.和歌山.jp', // 和歌山.jp 'foo.bar.baz.ايران.ir', // ايران.ir 'foo.bar.baz.موبايلي', // موبايلي // Mixed case 'ExAmPlE.北海道.JP', // 北海道.jp 'example.Cust.Disrec.Thingdust.Io', // cust.disrec.thingdust.io 'Example.Wa.Edu.Au', // wa.edu.au 'FOO.bar.BAZ.ortsinfo.AT', // null // Full URLs '2001:0DB8:0100:F101:0210:A4FF:FEE3:9566', 'http://user:pass@www.examplegoogle.com:21/blah#baz', 'http://iris.test.ing/ḍ̇/?ḍ̇#ḍ̇', 'http://0000000000000300.0xffffffffFFFFFFFF.3022415481470977', 'http://192.168.0.1/', 'http://%30%78%63%30%2e%30%32%35%30.01%2e', 'http://user:pass@[::1]/segment/index.html?query#frag', 'https://[::1]', ]; function bench(values) { console.log( 'While interpreting the results, keep in mind that each "op" reported' + ' by the benchmark is processing ' + values.length + ' domains' ); new Benchmark.Suite() .add('tldjs#isIp', () => { for (var i = 0; i < values.length; i += 1) { tld.isIp(values[i]); } }) .add('tldjs#isValid', () => { for (var i = 0; i < values.length; i += 1) { tld.isValid(values[i]); } }) .add('tldjs#extractHostname', () => { for (var i = 0; i < values.length; i += 1) { tld.extractHostname(values[i]); } }) .add('tldjs#tldExists', () => { for (var i = 0; i < values.length; i += 1) { tld.tldExists(values[i]); } }) .add('tldjs#getPublicSuffix', () => { for (var i = 0; i < values.length; i += 1) { tld.getPublicSuffix(values[i]); } }) .add('tldjs#getDomain', () => { for (var i = 0; i < values.length; i += 1) { tld.getDomain(values[i]); } }) .add('tldjs#getSubdomain', () => { for (var i = 0; i < values.length; i += 1) { tld.getSubdomain(values[i]); } }) .add('tldjs#parse', () => { for (var i = 0; i < values.length; i += 1) { tld.parse(values[i]); } }) .on('cycle', function (event) { console.log(String(event.target)); }) .run(); } // TODO - Compare to other libraries function main() { console.log('>>> -------------------- <<<'); console.log('>>> Only valid hostnames <<<'); console.log('>>> -------------------- <<<'); bench(HOSTNAMES); console.log(); console.log('>>> ----------- <<<'); console.log('>>> Random URLs <<<'); console.log('>>> ----------- <<<'); bench(URLS); } main(); tld.js-2.3.1/bin/postinstall.js000077500000000000000000000006421324233744200164060ustar00rootroot00000000000000#!/usr/bin/env node var updater = require('./update.js'); var SHOULD_UPDATE = process.env.npm_config_tldjs_update_rules === 'true'; if (SHOULD_UPDATE) { console.log('tldjs: updating rules from %s.', updater.providerUrl); updater.run(function(err){ if (err) { console.error(err.message); process.exit(err.code); } console.log('tldjs: rules list updated.'); process.exit(0); }); } tld.js-2.3.1/bin/update.js000066400000000000000000000004771324233744200153170ustar00rootroot00000000000000#!/usr/bin/env node 'use strict'; var pathJoin = require('path').join; var updater = require(pathJoin(__dirname, '..', 'lib', 'updater')); module.exports = updater; if (process.mainModule === module) { console.log('Requesting tld data...'); updater.run(function(){ console.log('Update complete.'); }); } tld.js-2.3.1/index.js000066400000000000000000000067061324233744200143750ustar00rootroot00000000000000'use strict'; // Load rules var Trie = require('./lib/suffix-trie.js'); var allRules = Trie.fromJson(require('./rules.json')); // Internals var extractHostname = require('./lib/clean-host.js'); var getDomain = require('./lib/domain.js'); var getPublicSuffix = require('./lib/public-suffix.js'); var getSubdomain = require('./lib/subdomain.js'); var isValid = require('./lib/is-valid.js'); var isIp = require('./lib/is-ip.js'); var tldExists = require('./lib/tld-exists.js'); // Flags representing steps in the `parse` function. They are used to implement // a early stop mechanism (simulating some form of laziness) to avoid doing more // work than necessary to perform a given action (e.g.: we don't need to extract // the domain and subdomain if we are only interested in public suffix). var TLD_EXISTS = 1; var PUBLIC_SUFFIX = 2; var DOMAIN = 3; var SUB_DOMAIN = 4; var ALL = 5; /** * Creates a new instance of tldjs * @param {Object.} options [description] * @return {tldjs|Object} [description] */ function factory(options) { var rules = options.rules || allRules || {}; var validHosts = options.validHosts || []; var _extractHostname = options.extractHostname || extractHostname; /** * Process a given url and extract all information. This is a higher level API * around private functions of `tld.js`. It allows to remove duplication (only * extract hostname from url once for all operations) and implement some early * termination mechanism to not pay the price of what we don't need (this * simulates laziness at a lower cost). * * @param {string} url * @param {number|undefined} _step - where should we stop processing * @return {object} */ function parse(url, _step) { var step = _step || ALL; var result = { hostname: _extractHostname(url), isValid: null, isIp: null, tldExists: false, publicSuffix: null, domain: null, subdomain: null, }; if (result.hostname === null) { result.isIp = false; result.isValid = false; return result; } // Check if `hostname` is a valid ip address result.isIp = isIp(result.hostname); if (result.isIp) { result.isValid = true; return result; } // Check if `hostname` is valid result.isValid = isValid(result.hostname); if (result.isValid === false) return result; // Check if tld exists if (step === ALL || step === TLD_EXISTS) { result.tldExists = tldExists(rules, result.hostname); } if (step === TLD_EXISTS) return result; // Extract public suffix result.publicSuffix = getPublicSuffix(rules, result.hostname); if (step === PUBLIC_SUFFIX) return result; // Extract domain result.domain = getDomain(validHosts, result.publicSuffix, result.hostname); if (step === DOMAIN) return result; // Extract subdomain result.subdomain = getSubdomain(result.hostname, result.domain); return result; } return { extractHostname: _extractHostname, isValid: isValid, parse: parse, tldExists: function (url) { return parse(url, TLD_EXISTS).tldExists; }, getPublicSuffix: function (url) { return parse(url, PUBLIC_SUFFIX).publicSuffix; }, getDomain: function (url) { return parse(url, DOMAIN).domain; }, getSubdomain: function (url) { return parse(url, SUB_DOMAIN).subdomain; }, fromUserSettings: factory }; } module.exports = factory({}); tld.js-2.3.1/lib/000077500000000000000000000000001324233744200134655ustar00rootroot00000000000000tld.js-2.3.1/lib/clean-host.js000066400000000000000000000040741324233744200160650ustar00rootroot00000000000000 var URL = require('url'); var isValid = require('./is-valid.js'); /** * Utility to cleanup the base host value. Also removes url fragments. * * Works for: * - hostname * - //hostname * - scheme://hostname * - scheme+scheme://hostname * * @param {string} value * @return {String} */ // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) var hasPrefixRE = /^(([a-z][a-z0-9+.-]*)?:)?\/\//; /** * @see https://github.com/oncletom/tld.js/issues/95 * * @param {string} value */ function trimTrailingDots(value) { if (value[value.length - 1] === '.') { return value.substr(0, value.length - 1); } return value; } /** * Fast check to avoid calling `trim` when not needed. * * @param {string} value */ function checkTrimmingNeeded(value) { return ( value.length > 0 && ( value.charCodeAt(0) <= 32 || value.charCodeAt(value.length - 1) <= 32 ) ); } /** * Fast check to avoid calling `toLowerCase` when not needed. * * @param {string} value */ function checkLowerCaseNeeded(value) { for (var i = 0; i < value.length; i += 1) { var code = value.charCodeAt(i); if (code >= 65 && code <= 90) { // [A-Z] return true; } } return false; } module.exports = function extractHostname(value) { // First check if `value` is already a valid hostname. if (isValid(value)) { return trimTrailingDots(value); } var url = value; if (typeof url !== 'string') { url = '' + url; } var needsTrimming = checkTrimmingNeeded(url); if (needsTrimming) { url = url.trim(); } var needsLowerCase = checkLowerCaseNeeded(url); if (needsLowerCase) { url = url.toLowerCase(); } // Try again after `url` has been transformed to lowercase and trimmed. if ((needsLowerCase || needsTrimming) && isValid(url)) { return trimTrailingDots(url); } // Proceed with heavier url parsing to extract the hostname. if (!hasPrefixRE.test(url)) { url = '//' + url; } var parts = URL.parse(url, null, true); if (parts.hostname) { return trimTrailingDots(parts.hostname); } return null; }; tld.js-2.3.1/lib/domain.js000066400000000000000000000063601324233744200152770ustar00rootroot00000000000000'use strict'; /** * Polyfill for `endsWith` * * @param {string} str * @param {string} pattern * @return {boolean} */ function endsWith(str, pattern) { return ( str.lastIndexOf(pattern) === (str.length - pattern.length) ); } /** * Check if `vhost` is a valid suffix of `hostname` (top-domain) * * It means that `vhost` needs to be a suffix of `hostname` and we then need to * make sure that: either they are equal, or the character preceding `vhost` in * `hostname` is a '.' (it should not be a partial label). * * * hostname = 'not.evil.com' and vhost = 'vil.com' => not ok * * hostname = 'not.evil.com' and vhost = 'evil.com' => ok * * hostname = 'not.evil.com' and vhost = 'not.evil.com' => ok * * @param {string} hostname * @param {string} vhost * @return {boolean} */ function shareSameDomainSuffix(hostname, vhost) { if (endsWith(hostname, vhost)) { return ( hostname.length === vhost.length || hostname[hostname.length - vhost.length - 1] === '.' ); } return false; } /** * Given a hostname and its public suffix, extract the general domain. * * @param {string} hostname * @param {string} publicSuffix * @return {string} */ function extractDomainWithSuffix(hostname, publicSuffix) { // Locate the index of the last '.' in the part of the `hostname` preceding // the public suffix. // // examples: // 1. not.evil.co.uk => evil.co.uk // ^ ^ // | | start of public suffix // | index of the last dot // // 2. example.co.uk => example.co.uk // ^ ^ // | | start of public suffix // | // | (-1) no dot found before the public suffix var publicSuffixIndex = hostname.length - publicSuffix.length - 2; var lastDotBeforeSuffixIndex = hostname.lastIndexOf('.', publicSuffixIndex); // No '.' found, then `hostname` is the general domain (no sub-domain) if (lastDotBeforeSuffixIndex === -1) { return hostname; } // Extract the part between the last '.' return hostname.substr(lastDotBeforeSuffixIndex + 1); } /** * Detects the domain based on rules and upon and a host string * * @api * @param {string} host * @return {String} */ module.exports = function getDomain(validHosts, suffix, hostname) { // Check if `hostname` ends with a member of `validHosts`. for (var i = 0; i < validHosts.length; i += 1) { var vhost = validHosts[i]; if (shareSameDomainSuffix(hostname, vhost)) { return vhost; } } // If there is no suffix, there is no hostname if (suffix === null) { return null; } // If `hostname` is a valid public suffix, then there is no domain to return. // Since we already know that `getPublicSuffix` returns a suffix of `hostname` // there is no need to perform a string comparison and we only compare the // size. if (suffix.length === hostname.length) { return null; } // To extract the general domain, we start by identifying the public suffix // (if any), then consider the domain to be the public suffix with one added // level of depth. (e.g.: if hostname is `not.evil.co.uk` and public suffix: // `co.uk`, then we take one more level: `evil`, giving the final result: // `evil.co.uk`). return extractDomainWithSuffix(hostname, suffix); }; tld.js-2.3.1/lib/from-host.js000066400000000000000000000005061324233744200157420ustar00rootroot00000000000000"use strict"; /** * Utility to extract the TLD from a hostname string * * @param {string} host * @return {String} */ module.exports = function extractTldFromHost(hostname) { var lastDotIndex = hostname.lastIndexOf('.'); if (lastDotIndex === -1) { return null; } return hostname.substr(lastDotIndex + 1); }; tld.js-2.3.1/lib/is-ip.js000066400000000000000000000030231324233744200150420ustar00rootroot00000000000000'use strict'; /** * Check if a hostname is an IP. You should be aware that this only works * because `hostname` is already garanteed to be a valid hostname! * * @param {string} hostname * @return {boolean} */ function isProbablyIpv4(hostname) { var numberOfDots = 0; for (var i = 0; i < hostname.length; i += 1) { var code = hostname.charCodeAt(i); if (code === 46) { // '.' numberOfDots += 1; } else if (code < 48 || code > 57) { // 48 => '0' // 57 => '9' return false; } } return ( numberOfDots === 3 && hostname[0] !== '.' && hostname[hostname.length - 1] !== '.' ); } /** * Similar to isProbablyIpv4. * * @param {string} hostname * @return {boolean} */ function isProbablyIpv6(hostname) { var hasColon = false; for (var i = 0; i < hostname.length; i += 1) { var code = hostname.charCodeAt(i); if (code === 58) { // ':' hasColon = true; } else if (!( (code >= 48 && code <= 57) || // 0-9 (code >= 97 && code <= 102) // a-f )) { return false; } } return hasColon; } /** * Check if `hostname` is *probably* a valid ip addr (either ipv6 or ipv4). * This *will not* work on any string. We need `hostname` to be a valid * hostname. * * @param {string} hostname * @return {boolean} */ module.exports = function isIp(hostname) { if (typeof hostname !== 'string') { return false; } if (hostname.length === 0) { return false; } return (isProbablyIpv6(hostname) || isProbablyIpv4(hostname)); }; tld.js-2.3.1/lib/is-valid.js000066400000000000000000000042341324233744200155360ustar00rootroot00000000000000"use strict"; /** * Check if the code point is a digit [0-9] * * @param {number} code * @return boolean */ function isDigit(code) { // 48 == '0' // 57 == '9' return code >= 48 && code <= 57; } /** * Check if the code point is a letter [a-zA-Z] * * @param {number} code * @return boolean */ function isAlpha(code) { // 97 === 'a' // 122 == 'z' return code >= 97 && code <= 122; } /** * Check if a hostname string is valid (according to RFC). It's usually a * preliminary check before trying to use getDomain or anything else. * * Beware: it does not check if the TLD exists. * * @api * @param {string} hostname * @return {boolean} */ module.exports = function isValid(hostname) { if (typeof hostname !== 'string') { return false; } if (hostname.length > 255) { return false; } if (hostname.length === 0) { return false; } // Check first character: [a-zA-Z0-9] var firstCharCode = hostname.charCodeAt(0); if (!(isAlpha(firstCharCode) || isDigit(firstCharCode))) { return false; } // Validate hostname according to RFC var lastDotIndex = -1; var lastCharCode; var code; var len = hostname.length; for (var i = 0; i < len; i += 1) { code = hostname.charCodeAt(i); if (code === 46) { // '.' if ( // Check that previous label is < 63 bytes long (64 = 63 + '.') (i - lastDotIndex) > 64 || // Check that previous character was not already a '.' lastCharCode === 46 || // Check that the previous label does not end with a '-' lastCharCode === 45 ) { return false; } lastDotIndex = i; } else if (!(isAlpha(code) || isDigit(code) || code === 45)) { // Check if there is a forbidden character in the label: [^a-zA-Z0-9-] return false; } lastCharCode = code; } return ( // Check that last label is shorter than 63 chars (len - lastDotIndex - 1) <= 63 && // Check that the last character is an allowed trailing label character. // Since we already checked that the char is a valid hostname character, // we only need to check that it's different from '-'. lastCharCode !== 45 ); }; tld.js-2.3.1/lib/parsers/000077500000000000000000000000001324233744200151445ustar00rootroot00000000000000tld.js-2.3.1/lib/parsers/publicsuffix-org.js000066400000000000000000000025621324233744200207770ustar00rootroot00000000000000"use strict"; var punycode = require('punycode'); var SuffixTrie = require('../suffix-trie.js'); var PublicSuffixOrgParser = {}; /** * Filters a commented or empty line * * @param {string} row * @return {string|null} */ function keepOnlyRules(row) { var trimmed = row.trim(); if (trimmed.length === 0 || trimmed.indexOf('//') === 0) { return null; } // TODO - Ignore leading or trailing dot return trimmed; } /** * Returns a rule based on string analysis * * @param {string} row * @return {object} a public suffix rule */ function domainBuilder(row) { var rule = { exception: false, source: null, parts: null, }; // Only read line up to the first white-space var spaceIndex = row.indexOf(' '); if (spaceIndex !== -1) { row = row.substr(0, spaceIndex); } row = punycode.toASCII(row); // Keep track of initial rule rule.source = row; // Exception if (row[0] === '!') { row = row.substr(1); rule.exception = true; } rule.parts = row.split('.').reverse(); return rule; } /** * Parse a one-domain-per-line file * * @param body {String} * @return {Array} */ PublicSuffixOrgParser.parse = function (body) { return new SuffixTrie((body + '') .split('\n') .map(keepOnlyRules) .filter(function (r) { return r !== null; }) .map(domainBuilder)); }; module.exports = PublicSuffixOrgParser; tld.js-2.3.1/lib/public-suffix.js000066400000000000000000000012511324233744200166020ustar00rootroot00000000000000'use strict'; var extractTldFromHost = require('./from-host.js'); /** * Returns the public suffix (including exact matches) * * @api * @since 1.5 * @param {string} hostname * @return {string} */ module.exports = function getPublicSuffix(rules, hostname) { // First check if `hostname` is already a valid top-level Domain. if (rules.hasTld(hostname)) { return hostname; } var candidate = rules.suffixLookup(hostname); if (candidate === null) { // Prevailing rule is '*' so we consider the top-level domain to be the // public suffix of `hostname` (e.g.: 'example.org' => 'org'). return extractTldFromHost(hostname); } return candidate; }; tld.js-2.3.1/lib/subdomain.js000066400000000000000000000007551324233744200160130ustar00rootroot00000000000000'use strict'; /** * Returns the subdomain of a hostname string * * @api * @param {string} hostname * @param {string} domain - the root domain of the hostname * @return {string|null} a subdomain string if any, blank string if subdomain * is empty, otherwise null. */ module.exports = function getSubdomain(hostname, domain) { // No domain found? Just abort, abort! if (domain === null) { return null; } return hostname.substr(0, hostname.length - domain.length - 1); }; tld.js-2.3.1/lib/suffix-trie.js000066400000000000000000000065751324233744200163050ustar00rootroot00000000000000"use strict"; var VALID_HOSTNAME_VALUE = 0; /** * Return min(a, b), handling possible `null` values. * * @param {number|null} a * @param {number|null} b * @return {number|null} */ function minIndex(a, b) { if (a === null) { return b; } else if (b === null) { return a; } return a < b ? a : b; } /** * Insert a public suffix rule in the `trie`. * * @param {object} rule * @param {object} trie * @return {object} trie (updated) */ function insertInTrie(rule, trie) { var parts = rule.parts; var node = trie; for (var i = 0; i < parts.length; i += 1) { var part = parts[i]; var nextNode = node[part]; if (nextNode === undefined) { nextNode = Object.create(null); node[part] = nextNode; } node = nextNode; } node.$ = VALID_HOSTNAME_VALUE; return trie; } /** * Recursive lookup of `parts` (starting at `index`) in the tree. * * @param {array} parts * @param {object} trie * @param {number} index - when to start in `parts` (initially: length - 1) * @return {number} size of the suffix found (in number of parts matched) */ function lookupInTrie(parts, trie, index) { var part; var nextNode; var publicSuffixIndex = null; // We have a match! if (trie.$ !== undefined) { publicSuffixIndex = index + 1; } // No more `parts` to look for if (index === -1) { return publicSuffixIndex; } part = parts[index]; // Check branch corresponding to next part of hostname nextNode = trie[part]; if (nextNode !== undefined) { publicSuffixIndex = minIndex( publicSuffixIndex, lookupInTrie(parts, nextNode, index - 1) ); } // Check wildcard branch nextNode = trie['*']; if (nextNode !== undefined) { publicSuffixIndex = minIndex( publicSuffixIndex, lookupInTrie(parts, nextNode, index - 1) ); } return publicSuffixIndex; } /** * Contains the public suffix ruleset as a Trie for efficient look-up. * * @constructor */ function SuffixTrie(rules) { this.exceptions = Object.create(null); this.rules = Object.create(null); if (rules) { for (var i = 0; i < rules.length; i += 1) { var rule = rules[i]; if (rule.exception) { insertInTrie(rule, this.exceptions); } else { insertInTrie(rule, this.rules); } } } } /** * Load the trie from JSON (as serialized by JSON.stringify). */ SuffixTrie.fromJson = function (json) { var trie = new SuffixTrie(); trie.exceptions = json.exceptions; trie.rules = json.rules; return trie; }; /** * Check if `value` is a valid TLD. */ SuffixTrie.prototype.hasTld = function (value) { // All TLDs are at the root of the Trie. return this.rules[value] !== undefined; }; /** * Check if `hostname` has a valid public suffix in `trie`. * * @param {string} hostname * @return {string|null} public suffix */ SuffixTrie.prototype.suffixLookup = function (hostname) { var parts = hostname.split('.'); // Look for a match in rules var publicSuffixIndex = lookupInTrie( parts, this.rules, parts.length - 1 ); if (publicSuffixIndex === null) { return null; } // Look for exceptions var exceptionIndex = lookupInTrie( parts, this.exceptions, parts.length - 1 ); if (exceptionIndex !== null) { return parts.slice(exceptionIndex + 1).join('.'); } return parts.slice(publicSuffixIndex).join('.'); }; module.exports = SuffixTrie; tld.js-2.3.1/lib/tld-exists.js000066400000000000000000000010101324233744200161130ustar00rootroot00000000000000'use strict'; var extractTldFromHost = require('./from-host.js'); /** * Checks if the TLD exists for a given hostname * * @api * @param {string} rules * @param {string} hostname * @return {boolean} */ module.exports = function tldExists(rules, hostname) { // Easy case, it's a TLD if (rules.hasTld(hostname)) { return true; } // Popping only the TLD of the hostname var hostTld = extractTldFromHost(hostname); if (hostTld === null) { return false; } return rules.hasTld(hostTld); }; tld.js-2.3.1/lib/updater.js000066400000000000000000000020521324233744200154660ustar00rootroot00000000000000"use strict"; var join = require('path').join; var http = require('https'); var fs = require('fs'); var pkg = require('../package.json'); var providerUrl = pkg.tldjs.providers['publicsuffix-org']; var parser = require('./parsers/publicsuffix-org.js'); module.exports = { providerUrl: providerUrl, run: function runUpdater(done) { done = typeof done === 'function' ? done : function(){}; var req = http.request(providerUrl, function (res) { var body = ''; if (res.statusCode !== 200) { res.destroy(); return done(new Error('tldjs: remote server responded with HTTP status ' + res.statusCode)); } res.setEncoding('utf8'); res.on('data', function(d) { body += d; }); res.on('end', function() { var tlds = parser.parse(body); var filename = 'rules.json'; var data = JSON.stringify(tlds); fs.writeFile(join(__dirname, '..', filename), data, 'utf-8', done); }); }); req.setTimeout(5000); req.on('error', done); req.end(); } }; tld.js-2.3.1/package-lock.json000066400000000000000000005426261324233744200161520ustar00rootroot00000000000000{ "name": "tldjs", "version": "2.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { "@browserify/acorn5-object-spread": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@browserify/acorn5-object-spread/-/acorn5-object-spread-5.0.1.tgz", "integrity": "sha512-sFCUPzgeEjdq3rinwy4TFXtak2YZdhqpj6MdNusxkdTFr9TXAUEYK4YQSamR8Joqt/yii1drgl5hk8q/AtJDKA==", "dev": true, "requires": { "acorn": "5.4.1" }, "dependencies": { "acorn": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", "dev": true } } }, "Base64": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz", "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=", "dev": true }, "JSONStream": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", "dev": true, "requires": { "jsonparse": "1.3.1", "through": "2.3.8" } }, "acorn": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", "dev": true }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { "kind-of": "3.2.2", "longest": "1.0.1", "repeat-string": "1.6.1" } }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "append-transform": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { "default-require-extensions": "1.0.0" } }, "application-config": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/application-config/-/application-config-0.1.2.tgz", "integrity": "sha1-MnJTO1+fg7MjqeXWQKNVi1Cls4U=", "dev": true, "requires": { "application-config-path": "0.1.0", "mkdirp": "0.5.1" } }, "application-config-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", "integrity": "sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=", "dev": true }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { "arr-flatten": "1.1.0" } }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", "dev": true }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", "dev": true }, "array-reduce": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "asn1": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", "dev": true }, "asn1.js": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", "dev": true, "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", "minimalistic-assert": "1.0.0" } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "dev": true, "requires": { "util": "0.10.3" } }, "assert-plus": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", "dev": true }, "astw": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", "dev": true, "requires": { "acorn": "4.0.13" } }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true }, "aws-sign": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz", "integrity": "sha1-PYHKabR0seFlGHKLUcJP8Lvtxuk=", "dev": true }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { "chalk": "1.1.3", "esutils": "2.0.2", "js-tokens": "3.0.2" }, "dependencies": { "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true } } }, "babel-generator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", "dev": true, "requires": { "babel-messages": "6.23.0", "babel-runtime": "6.26.0", "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", "lodash": "4.17.4", "source-map": "0.5.7", "trim-right": "1.0.1" } }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { "babel-runtime": "6.26.0" } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { "core-js": "2.5.3", "regenerator-runtime": "0.11.1" } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", "lodash": "4.17.4" } }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", "babel-runtime": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", "debug": "2.6.9", "globals": "9.18.0", "invariant": "2.2.2", "lodash": "4.17.4" }, "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" } } } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", "lodash": "4.17.4", "to-fast-properties": "1.0.3" }, "dependencies": { "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true } } }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", "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 }, "base64-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", "dev": true }, "benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "requires": { "lodash": "4.17.4", "platform": "1.3.4" } }, "bl": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", "dev": true, "requires": { "readable-stream": "1.0.34" } }, "bluebird": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz", "integrity": "sha1-xLRBGEgC47ZKYe7tRXgnG0yL9qw=", "dev": true }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, "boom": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", "dev": true, "requires": { "hoek": "0.9.1" }, "dependencies": { "hoek": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", "dev": true } } }, "bops": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz", "integrity": "sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=", "dev": true, "requires": { "base64-js": "0.0.2", "to-utf8": "0.0.1" }, "dependencies": { "base64-js": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=", "dev": true } } }, "bouncy": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/bouncy/-/bouncy-3.2.2.tgz", "integrity": "sha1-gqtK176uBYkO7VS5rzxFOUsYXcc=", "dev": true, "requires": { "optimist": "0.3.7", "through": "2.3.8" }, "dependencies": { "optimist": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", "dev": true, "requires": { "wordwrap": "0.0.3" } } } }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { "expand-range": "1.8.2", "preserve": "0.2.0", "repeat-element": "1.1.2" } }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, "browser-launcher": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/browser-launcher/-/browser-launcher-0.3.5.tgz", "integrity": "sha1-2aNmP6Bk2BVQRJkcAOYdvLZzChY=", "dev": true, "requires": { "headless": "0.1.7", "merge": "1.0.0", "minimist": "0.0.5", "mkdirp": "0.3.5", "plist": "0.2.1", "xtend": "4.0.1" }, "dependencies": { "minimist": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=", "dev": true }, "mkdirp": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", "dev": true } } }, "browser-pack": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.3.tgz", "integrity": "sha512-Jo+RYsn8X8OhyP9tMXXg0ueR2fW696HUu1Hf3/DeiwNean1oGiPtdgGRNuUHBpPHzBH3x4n1kzAlgOgHSIq88g==", "dev": true, "requires": { "JSONStream": "1.3.2", "combine-source-map": "0.8.0", "defined": "1.0.0", "safe-buffer": "5.1.1", "through2": "2.0.3", "umd": "3.0.1" }, "dependencies": { "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { "readable-stream": "2.3.3", "xtend": "4.0.1" } } } }, "browser-resolve": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", "dev": true, "requires": { "resolve": "1.1.7" }, "dependencies": { "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true } } }, "browser-stdout": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, "browserify": { "version": "15.2.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-15.2.0.tgz", "integrity": "sha512-IHYyFPm2XjJCL+VV0ZtFv8wn/sAHVOm83q3yfSn8YWbZ9jcybgPKxSDdiuMU+35jUL1914l74RnXXPD9Iyo9yg==", "dev": true, "requires": { "JSONStream": "1.3.2", "assert": "1.4.1", "browser-pack": "6.0.3", "browser-resolve": "1.11.2", "browserify-zlib": "0.2.0", "buffer": "5.0.8", "cached-path-relative": "1.0.1", "concat-stream": "1.5.2", "console-browserify": "1.1.0", "constants-browserify": "1.0.0", "crypto-browserify": "3.12.0", "defined": "1.0.0", "deps-sort": "2.0.0", "domain-browser": "1.1.7", "duplexer2": "0.1.4", "events": "1.1.1", "glob": "7.1.2", "has": "1.0.1", "htmlescape": "1.1.1", "https-browserify": "1.0.0", "inherits": "2.0.3", "insert-module-globals": "7.0.1", "labeled-stream-splicer": "2.0.0", "mkdirp": "0.5.1", "module-deps": "5.0.1", "os-browserify": "0.3.0", "parents": "1.0.1", "path-browserify": "0.0.0", "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", "read-only-stream": "2.0.0", "readable-stream": "2.3.3", "resolve": "1.5.0", "shasum": "1.0.2", "shell-quote": "1.6.1", "stream-browserify": "2.0.1", "stream-http": "2.8.0", "string_decoder": "1.0.3", "subarg": "1.0.0", "syntax-error": "1.3.0", "through2": "2.0.3", "timers-browserify": "1.4.2", "tty-browserify": "0.0.1", "url": "0.11.0", "util": "0.10.3", "vm-browserify": "0.0.4", "xtend": "4.0.1" }, "dependencies": { "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { "readable-stream": "2.3.3" } }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "resolve": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { "path-parse": "1.0.5" } }, "shell-quote": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { "array-filter": "0.0.1", "array-map": "0.0.0", "array-reduce": "0.0.0", "jsonify": "0.0.0" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { "readable-stream": "2.3.3", "xtend": "4.0.1" } } } }, "browserify-aes": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", "dev": true, "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", "inherits": "2.0.3", "safe-buffer": "5.1.1" } }, "browserify-cipher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "dev": true, "requires": { "browserify-aes": "1.1.1", "browserify-des": "1.0.0", "evp_bytestokey": "1.0.3" } }, "browserify-des": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", "dev": true, "requires": { "cipher-base": "1.0.4", "des.js": "1.0.0", "inherits": "2.0.3" } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { "bn.js": "4.11.8", "randombytes": "2.0.6" } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", "create-hash": "1.1.3", "create-hmac": "1.1.6", "elliptic": "6.4.0", "inherits": "2.0.3", "parse-asn1": "5.1.0" } }, "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { "pako": "1.0.6" } }, "buffer": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", "dev": true, "requires": { "base64-js": "1.2.1", "ieee754": "1.1.8" } }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, "builtins": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz", "integrity": "sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=", "dev": true }, "cached-path-relative": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", "dev": true }, "caching-transform": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", "dev": true, "requires": { "md5-hex": "1.3.0", "mkdirp": "0.5.1", "write-file-atomic": "1.3.4" } }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { "align-text": "0.1.4", "lazy-cache": "1.0.4" } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { "ansi-styles": "2.2.1", "escape-string-regexp": "1.0.5", "has-ansi": "2.0.0", "strip-ansi": "3.0.1", "supports-color": "2.0.0" }, "dependencies": { "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.1.1" } }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" } }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", "dev": true, "requires": { "exit": "0.1.2", "glob": "7.1.2" } }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "requires": { "center-align": "0.1.3", "right-align": "0.1.3", "wordwrap": "0.0.2" }, "dependencies": { "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" } } }, "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 }, "colors": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", "dev": true }, "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { "convert-source-map": "1.1.3", "inline-source-map": "0.6.2", "lodash.memoize": "3.0.4", "source-map": "0.5.7" } }, "combined-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", "dev": true, "requires": { "delayed-stream": "0.0.5" } }, "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, "commondir": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz", "integrity": "sha1-ifAP3NUbUZxXhzP+xWPmptp/W+I=", "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 }, "concat-stream": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.0.6", "typedarray": "0.0.6" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "string_decoder": "0.10.31", "util-deprecate": "1.0.2" } } } }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { "date-now": "0.1.4" } }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, "convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, "cookie-jar": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz", "integrity": "sha1-vJon1OK5fhhs1XyeIGPLmfpozMw=", "dev": true }, "core-js": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", "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 }, "create-ecdh": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", "dev": true, "requires": { "bn.js": "4.11.8", "elliptic": "6.4.0" } }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", "dev": true, "requires": { "cipher-base": "1.0.4", "inherits": "2.0.3", "ripemd160": "2.0.1", "sha.js": "2.4.10" } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", "dev": true, "requires": { "cipher-base": "1.0.4", "create-hash": "1.1.3", "inherits": "2.0.3", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", "sha.js": "2.4.10" } }, "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.1.1", "which": "1.3.0" }, "dependencies": { "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" } } } }, "cryptiles": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", "dev": true, "requires": { "boom": "0.4.2" } }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { "browserify-cipher": "1.0.0", "browserify-sign": "4.0.4", "create-ecdh": "4.0.0", "create-hash": "1.1.3", "create-hmac": "1.1.6", "diffie-hellman": "5.0.2", "inherits": "2.0.3", "pbkdf2": "3.0.14", "public-encrypt": "4.0.0", "randombytes": "2.0.6", "randomfill": "1.0.3" } }, "ctype": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", "dev": true }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" } }, "debug-log": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", "dev": true }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "deep-equal": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz", "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84=", "dev": true }, "default-require-extensions": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { "strip-bom": "2.0.0" } }, "defined": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", "dev": true }, "delayed-stream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", "dev": true }, "deps-sort": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", "dev": true, "requires": { "JSONStream": "1.3.2", "shasum": "1.0.2", "subarg": "1.0.0", "through2": "2.0.3" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { "readable-stream": "2.3.3", "xtend": "4.0.1" } } } }, "derequire": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/derequire/-/derequire-0.8.0.tgz", "integrity": "sha1-wffx2izt5Ere3gRzePA/RE6cTA0=", "dev": true, "requires": { "esprima-fb": "3001.1.0-dev-harmony-fb", "esrefactor": "0.1.0", "estraverse": "1.5.1" } }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { "inherits": "2.0.3", "minimalistic-assert": "1.0.0" } }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { "repeating": "2.0.1" } }, "detective": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/detective/-/detective-5.0.2.tgz", "integrity": "sha512-NUsLoezj4wb9o7vpxS9F3L5vcO87ceyRBcl48op06YFNwkyIEY997JpSCA5lDlDuDc6JxOtaL5qfK3muoWxpMA==", "dev": true, "requires": { "@browserify/acorn5-object-spread": "5.0.1", "acorn": "5.4.1", "defined": "1.0.0" }, "dependencies": { "acorn": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", "dev": true }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true } } }, "diff": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", "dev": true }, "diffie-hellman": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", "dev": true, "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", "randombytes": "2.0.6" } }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { "domelementtype": "1.1.3", "entities": "1.1.1" }, "dependencies": { "domelementtype": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", "dev": true }, "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", "dev": true } } }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", "dev": true }, "domelementtype": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", "dev": true }, "domhandler": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { "domelementtype": "1.3.0" } }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { "dom-serializer": "0.1.0", "domelementtype": "1.3.0" } }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { "readable-stream": "1.1.14" }, "dependencies": { "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "0.0.1", "string_decoder": "0.10.31" } } } }, "ecstatic": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-0.4.13.tgz", "integrity": "sha1-nLbq/+IRuchO+z9VPN4sMAJxeyk=", "dev": true, "requires": { "ent": "0.0.7", "mime": "1.2.11", "optimist": "0.3.7" }, "dependencies": { "optimist": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", "dev": true, "requires": { "wordwrap": "0.0.3" } } } }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { "bn.js": "4.11.8", "brorand": "1.1.0", "hash.js": "1.1.3", "hmac-drbg": "1.0.1", "inherits": "2.0.3", "minimalistic-assert": "1.0.0", "minimalistic-crypto-utils": "1.0.1" } }, "ent": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ent/-/ent-0.0.7.tgz", "integrity": "sha1-g11Of556jUkhxpLpAQ7JdtpemUk=", "dev": true }, "entities": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "dev": true }, "env-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/env-test/-/env-test-1.0.0.tgz", "integrity": "sha1-j2WMFBS37utvZ+0ZkYA3bJZRXKY=", "dev": true }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { "is-arrayish": "0.2.1" } }, "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 }, "escodegen": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.1.0.tgz", "integrity": "sha1-xmOSP24gqtSNDA+knzHG1PSTYM8=", "dev": true, "requires": { "esprima": "1.0.4", "estraverse": "1.5.1", "esutils": "1.0.0", "source-map": "0.1.43" }, "dependencies": { "esprima": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", "dev": true }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "optional": true, "requires": { "amdefine": "1.0.1" } } } }, "escope": { "version": "0.0.16", "resolved": "https://registry.npmjs.org/escope/-/escope-0.0.16.tgz", "integrity": "sha1-QYx6CvynIdr+ZZGT/Zhig+dGU48=", "dev": true, "requires": { "estraverse": "1.5.1" } }, "esprima-fb": { "version": "3001.1.0-dev-harmony-fb", "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=", "dev": true }, "esrefactor": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/esrefactor/-/esrefactor-0.1.0.tgz", "integrity": "sha1-0UJ5WigjOauB6Ta1t6IbEb8ZexM=", "dev": true, "requires": { "escope": "0.0.16", "esprima": "1.0.4", "estraverse": "0.0.4" }, "dependencies": { "esprima": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", "dev": true }, "estraverse": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-0.0.4.tgz", "integrity": "sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI=", "dev": true } } }, "estraverse": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=", "dev": true }, "esutils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=", "dev": true }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { "md5.js": "1.3.4", "safe-buffer": "5.1.1" } }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { "cross-spawn": "5.1.0", "get-stream": "3.0.0", "is-stream": "1.1.0", "npm-run-path": "2.0.2", "p-finally": "1.0.0", "signal-exit": "3.0.2", "strip-eof": "1.0.0" }, "dependencies": { "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { "lru-cache": "4.1.1", "shebang-command": "1.2.0", "which": "1.3.0" } }, "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" } } } }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { "is-posix-bracket": "0.1.1" } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { "fill-range": "2.2.3" } }, "expect.js": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=", "dev": true }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { "is-extglob": "1.0.0" } }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, "fill-range": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { "is-number": "2.1.0", "isobject": "2.1.0", "randomatic": "1.1.7", "repeat-element": "1.1.2", "repeat-string": "1.6.1" } }, "find-cache-dir": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { "commondir": "1.0.1", "mkdirp": "0.5.1", "pkg-dir": "1.0.0" }, "dependencies": { "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true } } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "2.0.0" } }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { "for-in": "1.0.2" } }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "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.0.2", "signal-exit": "3.0.2" } }, "forever-agent": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", "dev": true }, "form-data": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz", "integrity": "sha1-CJDNEAXFzOzAudJKiAUskkQtDbU=", "dev": true, "requires": { "async": "0.2.10", "combined-stream": "0.0.7", "mime": "1.2.11" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, "ghauth": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-3.0.0.tgz", "integrity": "sha1-gpKiTvR4mfGAo5x4DEgJVhKUvbw=", "dev": true, "requires": { "application-config": "0.1.2", "bl": "0.9.5", "hyperquest": "1.2.0", "mkdirp": "0.5.1", "read": "1.0.7", "xtend": "4.0.1" } }, "github": { "version": "0.1.16", "resolved": "https://registry.npmjs.org/github/-/github-0.1.16.tgz", "integrity": "sha1-iV0qhbD+t5gNiawM5PRNyqA/F7U=", "dev": true }, "github-changes": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/github-changes/-/github-changes-1.1.2.tgz", "integrity": "sha512-S4lzHQHyPSyHm22JjE+Vsyr8/d797NPmYYpBqwfkPj9qHIbSwENoqKngyfGbaVbmPFTeE6QMgDbcX12TWy+fpg==", "dev": true, "requires": { "bluebird": "1.0.3", "ghauth": "3.0.0", "github": "0.1.16", "github-commit-stream": "0.1.0", "lodash": "2.4.1", "moment-timezone": "0.5.5", "nomnom": "1.6.2", "parse-link-header": "0.1.0", "semver": "5.4.1" }, "dependencies": { "lodash": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA=", "dev": true } } }, "github-commit-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/github-commit-stream/-/github-commit-stream-0.1.0.tgz", "integrity": "sha1-2823smeWcYa3DMc2ORgw2mNo16E=", "dev": true, "requires": { "async": "0.2.10", "parse-link-header": "0.1.0", "request": "2.22.0", "through": "2.3.8" } }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", "inherits": "2.0.3", "minimatch": "3.0.4", "once": "1.4.0", "path-is-absolute": "1.0.1" } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { "glob-parent": "2.0.0", "is-glob": "2.0.1" } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { "is-glob": "2.0.1" } }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", "dev": true }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, "growl": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", "dev": true }, "handlebars": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { "async": "1.5.2", "optimist": "0.6.1", "source-map": "0.4.4", "uglify-js": "2.8.29" }, "dependencies": { "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "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.8", "wordwrap": "0.0.3" } }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { "amdefine": "1.0.1" } }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "optional": true, "requires": { "source-map": "0.5.7", "uglify-to-browserify": "1.0.2", "yargs": "3.10.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, "optional": true } } }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "optional": true, "requires": { "camelcase": "1.2.1", "cliui": "2.1.0", "decamelize": "1.2.0", "window-size": "0.1.0" } } } }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { "function-bind": "1.1.1" } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { "ansi-regex": "2.1.1" } }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, "hash-base": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "dev": true, "requires": { "inherits": "2.0.3" } }, "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { "inherits": "2.0.3", "minimalistic-assert": "1.0.0" } }, "hawk": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz", "integrity": "sha1-NheViCH1gxHk1/beKR/KZitBLvQ=", "dev": true, "requires": { "boom": "0.4.2", "cryptiles": "0.2.2", "hoek": "0.8.5", "sntp": "0.2.4" } }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, "headless": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/headless/-/headless-0.1.7.tgz", "integrity": "sha1-bmL65miUf4gYTVwVbt58VpWn6cg=", "dev": true }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { "hash.js": "1.1.3", "minimalistic-assert": "1.0.0", "minimalistic-crypto-utils": "1.0.1" } }, "hoek": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz", "integrity": "sha1-Hp/XcO9+vgJ0rfy1sIBqAlpeTp8=", "dev": true }, "hosted-git-info": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", "dev": true }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, "htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { "domelementtype": "1.3.0", "domhandler": "2.3.0", "domutils": "1.5.1", "entities": "1.0.0", "readable-stream": "1.1.14" }, "dependencies": { "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "0.0.1", "string_decoder": "0.10.31" } } } }, "http-browserify": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.3.2.tgz", "integrity": "sha1-tWLDRHk0mmkNemWX30la76jGBPU=", "dev": true, "requires": { "Base64": "0.2.1", "inherits": "2.0.3" } }, "http-signature": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", "dev": true, "requires": { "asn1": "0.1.11", "assert-plus": "0.1.5", "ctype": "0.5.3" } }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "hyperquest": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz", "integrity": "sha1-OeH+9miI3Hzg3sbA3YFPb8iUStU=", "dev": true, "requires": { "duplexer2": "0.0.2", "through2": "0.6.5" } }, "ieee754": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "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.4.0", "wrappy": "1.0.2" } }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { "source-map": "0.5.7" } }, "insert-module-globals": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", "dev": true, "requires": { "JSONStream": "1.3.2", "combine-source-map": "0.7.2", "concat-stream": "1.5.2", "is-buffer": "1.1.6", "lexical-scope": "1.2.0", "process": "0.11.10", "through2": "2.0.3", "xtend": "4.0.1" }, "dependencies": { "combine-source-map": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", "dev": true, "requires": { "convert-source-map": "1.1.3", "inline-source-map": "0.6.2", "lodash.memoize": "3.0.4", "source-map": "0.5.7" } }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { "readable-stream": "2.3.3", "xtend": "4.0.1" } } } }, "invariant": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { "loose-envify": "1.3.1" } }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, "is": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", "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-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { "builtin-modules": "1.1.1" } }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", "dev": true }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { "is-primitive": "2.0.0" } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { "number-is-nan": "1.0.1" } }, "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.1" } }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { "is-extglob": "1.0.0" } }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { "kind-of": "3.2.2" } }, "is-object": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", "dev": true }, "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "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-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { "isarray": "1.0.0" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true } } }, "istanbul-lib-coverage": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", "integrity": "sha1-c7+5mIhSmUFck9OKPprfeEp3qdo=", "dev": true }, "istanbul-lib-hook": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", "dev": true, "requires": { "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", "dev": true, "requires": { "babel-generator": "6.26.0", "babel-template": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", "istanbul-lib-coverage": "1.1.1", "semver": "5.4.1" } }, "istanbul-lib-report": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", "dev": true, "requires": { "istanbul-lib-coverage": "1.1.1", "mkdirp": "0.5.1", "path-parse": "1.0.5", "supports-color": "3.2.3" }, "dependencies": { "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { "has-flag": "1.0.0" } } } }, "istanbul-lib-source-maps": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", "dev": true, "requires": { "debug": "3.1.0", "istanbul-lib-coverage": "1.1.1", "mkdirp": "0.5.1", "rimraf": "2.6.2", "source-map": "0.5.7" } }, "istanbul-reports": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", "dev": true, "requires": { "handlebars": "4.0.11" } }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "jshint": { "version": "2.9.5", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", "dev": true, "requires": { "cli": "1.0.1", "console-browserify": "1.1.0", "exit": "0.1.2", "htmlparser2": "3.8.3", "lodash": "3.7.0", "minimatch": "3.0.4", "shelljs": "0.3.0", "strip-json-comments": "1.0.4" }, "dependencies": { "lodash": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", "dev": true } } }, "json-stable-stringify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", "dev": true, "requires": { "jsonify": "0.0.0" } }, "json-stringify-safe": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz", "integrity": "sha1-d8JxqupUMC5o7+rMtWq78GqbGlQ=", "dev": true }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "1.1.6" } }, "labeled-stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", "dev": true, "requires": { "inherits": "2.0.3", "isarray": "0.0.1", "stream-splicer": "2.0.0" } }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { "invert-kv": "1.0.0" } }, "lexical-scope": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", "dev": true, "requires": { "astw": "2.2.0" } }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { "graceful-fs": "4.1.11", "parse-json": "2.2.0", "pify": "2.3.0", "pinkie-promise": "2.0.1", "strip-bom": "2.0.0" } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "2.0.0", "path-exists": "3.0.0" } }, "lodash": { "version": "4.17.4", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { "js-tokens": "3.0.2" } }, "lru-cache": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", "dev": true }, "md5-hex": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", "dev": true, "requires": { "md5-o-matic": "0.1.1" } }, "md5-o-matic": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", "dev": true }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { "hash-base": "3.0.4", "inherits": "2.0.3" }, "dependencies": { "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" } } } }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { "mimic-fn": "1.1.0" } }, "merge": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/merge/-/merge-1.0.0.tgz", "integrity": "sha1-tEOrRtg3xJHmIiBWqw95M+yzVo8=", "dev": true }, "merge-source-map": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", "dev": true, "requires": { "source-map": "0.5.7" } }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { "arr-diff": "2.0.0", "array-unique": "0.2.1", "braces": "1.8.5", "expand-brackets": "0.1.5", "extglob": "0.3.2", "filename-regex": "2.0.1", "is-extglob": "1.0.0", "is-glob": "2.0.1", "kind-of": "3.2.2", "normalize-path": "2.1.1", "object.omit": "2.0.1", "parse-glob": "3.0.4", "regex-cache": "0.4.4" } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { "bn.js": "4.11.8", "brorand": "1.1.0" } }, "mime": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", "dev": true }, "mimic-fn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", "dev": true }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, "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.8" } }, "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "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" } }, "mocha": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz", "integrity": "sha512-ukB2dF+u4aeJjc6IGtPNnJXfeby5d4ZqySlIBT0OEyva/DrMjVm5HkQxKnHDLKEfEQBsEnwTg9HHhtPHJdTd8w==", "dev": true, "requires": { "browser-stdout": "1.3.0", "commander": "2.11.0", "debug": "3.1.0", "diff": "3.3.1", "escape-string-regexp": "1.0.5", "glob": "7.1.2", "growl": "1.10.3", "he": "1.1.1", "mkdirp": "0.5.1", "supports-color": "4.4.0" } }, "module-deps": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-5.0.1.tgz", "integrity": "sha512-sigq/hm/L+Z5IGi1DDl0x2ptkw7S86aFh213QhPLD8v9Opv90IHzKIuWJrRa5bJ77DVKHco2CfIEuThcT/vDJA==", "dev": true, "requires": { "JSONStream": "1.3.2", "browser-resolve": "1.11.2", "cached-path-relative": "1.0.1", "concat-stream": "1.6.0", "defined": "1.0.0", "detective": "5.0.2", "duplexer2": "0.1.4", "inherits": "2.0.3", "parents": "1.0.1", "readable-stream": "2.3.3", "resolve": "1.5.0", "stream-combiner2": "1.1.1", "subarg": "1.0.0", "through2": "2.0.3", "xtend": "4.0.1" }, "dependencies": { "concat-stream": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.3", "typedarray": "0.0.6" } }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { "readable-stream": "2.3.3" } }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "resolve": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { "path-parse": "1.0.5" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { "readable-stream": "2.3.3", "xtend": "4.0.1" } } } }, "moment": { "version": "2.20.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==", "dev": true }, "moment-timezone": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.5.tgz", "integrity": "sha1-odVBCnLBil8pPyouYocKgK1DLa4=", "dev": true, "requires": { "moment": "2.20.1" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "node-uuid": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", "dev": true }, "nomnom": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", "dev": true, "requires": { "colors": "0.5.1", "underscore": "1.4.4" } }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", "dev": true, "requires": { "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", "semver": "5.4.1", "validate-npm-package-license": "3.0.1" } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { "remove-trailing-separator": "1.1.0" } }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { "path-key": "2.0.1" } }, "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": "11.4.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.4.1.tgz", "integrity": "sha512-5eCZpvaksFVjP2rt1r60cfXmt3MUtsQDw8bAzNqNEr4WLvUMLgiVENMf/B9bE9YAX0mGVvaGA3v9IS9ekNqB1Q==", "dev": true, "requires": { "archy": "1.0.0", "arrify": "1.0.1", "caching-transform": "1.0.1", "convert-source-map": "1.5.1", "debug-log": "1.0.1", "default-require-extensions": "1.0.0", "find-cache-dir": "0.1.1", "find-up": "2.1.0", "foreground-child": "1.5.6", "glob": "7.1.2", "istanbul-lib-coverage": "1.1.1", "istanbul-lib-hook": "1.1.0", "istanbul-lib-instrument": "1.9.1", "istanbul-lib-report": "1.1.2", "istanbul-lib-source-maps": "1.2.2", "istanbul-reports": "1.1.3", "md5-hex": "1.3.0", "merge-source-map": "1.0.4", "micromatch": "2.3.11", "mkdirp": "0.5.1", "resolve-from": "2.0.0", "rimraf": "2.6.2", "signal-exit": "3.0.2", "spawn-wrap": "1.4.2", "test-exclude": "4.1.1", "yargs": "10.0.3", "yargs-parser": "8.0.0" }, "dependencies": { "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" } }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { "minimist": "0.0.8", "wordwrap": "0.0.3" } }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { "pinkie-promise": "2.0.1" } }, "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.1.1" } }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "requires": { "source-map": "0.5.7", "uglify-to-browserify": "1.0.2", "yargs": "3.10.0" }, "dependencies": { "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "requires": { "camelcase": "1.2.1", "cliui": "2.1.0", "decamelize": "1.2.0", "window-size": "0.1.0" } } } }, "yargs": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", "dev": true, "requires": { "cliui": "3.2.0", "decamelize": "1.2.0", "find-up": "2.1.0", "get-caller-file": "1.0.2", "os-locale": "2.1.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", "yargs-parser": "8.0.0" }, "dependencies": { "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1", "wrap-ansi": "2.1.0" }, "dependencies": { "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.1.0", "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } } } } } } } }, "oauth-sign": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz", "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=", "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 }, "object-inspect": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.1.3.tgz", "integrity": "sha1-0FplwuNP6CJdn9ouSE5OR7fi9JA=", "dev": true, "requires": { "tape": "1.0.4" } }, "object-keys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", "dev": true, "requires": { "foreach": "2.0.5", "indexof": "0.0.1", "is": "0.2.7" } }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { "for-own": "0.1.5", "is-extendable": "0.1.1" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1.0.2" } }, "optimist": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.5.2.tgz", "integrity": "sha1-hcjBRUszFeSniUfoV7HfAzRQv7w=", "dev": true, "requires": { "wordwrap": "0.0.3" } }, "ordered-emitter": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ordered-emitter/-/ordered-emitter-0.1.1.tgz", "integrity": "sha1-qiC9r73MFjGDSjUPaLTvjrNO7Xs=", "dev": true }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "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 }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", "dev": true, "requires": { "execa": "0.7.0", "lcid": "1.0.0", "mem": "1.1.0" } }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-limit": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", "dev": true }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "1.1.0" } }, "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, "parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { "path-platform": "0.11.15" } }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { "asn1.js": "4.9.2", "browserify-aes": "1.1.1", "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", "pbkdf2": "3.0.14" } }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { "glob-base": "0.3.0", "is-dotfile": "1.0.3", "is-extglob": "1.0.0", "is-glob": "2.0.1" } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { "error-ex": "1.3.1" } }, "parse-link-header": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.1.0.tgz", "integrity": "sha1-VQP6f7LzVLsjQlXBxCHaPrBbkYU=", "dev": true, "requires": { "xtend": "2.0.6" }, "dependencies": { "xtend": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", "dev": true, "requires": { "is-object": "0.1.2", "object-keys": "0.2.0" } } } }, "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, "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.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, "path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", "dev": true }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { "graceful-fs": "4.1.11", "pify": "2.3.0", "pinkie-promise": "2.0.1" } }, "pbkdf2": { "version": "3.0.14", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", "dev": true, "requires": { "create-hash": "1.1.3", "create-hmac": "1.1.6", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", "sha.js": "2.4.10" } }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { "pinkie": "2.0.4" } }, "pkg-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { "find-up": "1.1.2" }, "dependencies": { "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { "path-exists": "2.1.0", "pinkie-promise": "2.0.1" } }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { "pinkie-promise": "2.0.1" } } } }, "platform": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.4.tgz", "integrity": "sha1-bw+xftqqSPIUQrOpdcBjEw8cPr0=", "dev": true }, "plist": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/plist/-/plist-0.2.1.tgz", "integrity": "sha1-86PeB4hddz5m2KlngvG+wozystA=", "dev": true, "requires": { "sax": "0.1.5" } }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "public-encrypt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", "dev": true, "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", "create-hash": "1.1.3", "parse-asn1": "5.1.0", "randombytes": "2.0.6" } }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", "dev": true }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", "dev": true, "requires": { "is-number": "3.0.0", "kind-of": "4.0.0" }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "3.2.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "1.1.6" } } } }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { "is-buffer": "1.1.6" } } } }, "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, "randomfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", "dev": true, "requires": { "randombytes": "2.0.6", "safe-buffer": "5.1.1" } }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, "requires": { "mute-stream": "0.0.7" } }, "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { "readable-stream": "2.3.3" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } } } }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { "load-json-file": "1.1.0", "normalize-package-data": "2.4.0", "path-type": "1.1.0" } }, "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { "find-up": "1.1.2", "read-pkg": "1.1.0" }, "dependencies": { "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { "path-exists": "2.1.0", "pinkie-promise": "2.0.1" } }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { "pinkie-promise": "2.0.1" } } } }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "0.0.1", "string_decoder": "0.10.31" } }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", "dev": true, "requires": { "is-equal-shallow": "0.1.3" } }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { "is-finite": "1.0.2" } }, "request": { "version": "2.22.0", "resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz", "integrity": "sha1-uIOnacxKkJVx61AEs0TEPPflFZI=", "dev": true, "requires": { "aws-sign": "0.3.0", "cookie-jar": "0.3.0", "forever-agent": "0.5.2", "form-data": "0.0.8", "hawk": "0.13.1", "http-signature": "0.10.1", "json-stringify-safe": "4.0.0", "mime": "1.2.11", "node-uuid": "1.4.8", "oauth-sign": "0.3.0", "qs": "0.6.6", "tunnel-agent": "0.3.0" } }, "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": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "resolve": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.4.3.tgz", "integrity": "sha1-3K2tIC58rMJGfjo4gAIR9C+cE98=", "dev": true }, "resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", "dev": true }, "rfile": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rfile/-/rfile-1.0.0.tgz", "integrity": "sha1-WXCM+Qyh50xUw8/Fw2/bmBBDUmE=", "dev": true, "requires": { "callsite": "1.0.0", "resolve": "0.3.1" }, "dependencies": { "resolve": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.3.1.tgz", "integrity": "sha1-NMY0R8ZkxwWY0cmxJvxDsqJDEKQ=", "dev": true } } }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { "align-text": "0.1.4" } }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { "glob": "7.1.2" } }, "ripemd160": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", "dev": true, "requires": { "hash-base": "2.0.2", "inherits": "2.0.3" } }, "ruglify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/ruglify/-/ruglify-1.0.0.tgz", "integrity": "sha1-3Ikw4qlUSidDAcyZcldMDQmGtnU=", "dev": true, "requires": { "rfile": "1.0.0", "uglify-js": "2.2.5" }, "dependencies": { "optimist": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", "dev": true, "requires": { "wordwrap": "0.0.3" } }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { "amdefine": "1.0.1" } }, "uglify-js": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", "dev": true, "requires": { "optimist": "0.3.7", "source-map": "0.1.43" } } } }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, "sax": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/sax/-/sax-0.1.5.tgz", "integrity": "sha1-0YKaYSD6AWZetNv/bEPyn9bWFHE=", "dev": true }, "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", "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 }, "sha.js": { "version": "2.4.10", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", "dev": true, "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" } }, "shallow-copy": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", "dev": true }, "shasum": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, "requires": { "json-stable-stringify": "0.0.1", "sha.js": "2.4.10" } }, "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 }, "shell-quote": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.3.3.tgz", "integrity": "sha1-B7iCb0J8BSUR6LVidjnhcllujks=", "dev": true }, "shelljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", "dev": true }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", "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 }, "slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, "sntp": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", "dev": true, "requires": { "hoek": "0.9.1" }, "dependencies": { "hoek": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", "dev": true } } }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "spawn-wrap": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", "dev": true, "requires": { "foreground-child": "1.5.6", "mkdirp": "0.5.1", "os-homedir": "1.0.2", "rimraf": "2.6.2", "signal-exit": "3.0.2", "which": "1.3.0" } }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { "spdx-license-ids": "1.2.2" } }, "spdx-expression-parse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", "dev": true }, "spdx-license-ids": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", "dev": true }, "split": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/split/-/split-0.1.2.tgz", "integrity": "sha1-8HEHRMRT1VH8cUPq2YPaYBTjNsw=", "dev": true, "requires": { "through": "1.1.2" }, "dependencies": { "through": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/through/-/through-1.1.2.tgz", "integrity": "sha1-NEpUJaN3MxTKfg62US+6+vdsC/4=", "dev": true } } }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.3" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } } } }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { "duplexer": "0.1.1" } }, "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { "duplexer2": "0.1.4", "readable-stream": "2.3.3" }, "dependencies": { "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { "readable-stream": "2.3.3" } }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } } } }, "stream-http": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", "dev": true, "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", "readable-stream": "2.3.3", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } } } }, "stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.3" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" } } } }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", "strip-ansi": "4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "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 } } }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": 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" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true } } }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { "is-utf8": "0.2.1" } }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "dev": true }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { "minimist": "1.2.0" }, "dependencies": { "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "supports-color": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { "has-flag": "2.0.0" } }, "syntax-error": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", "dev": true, "requires": { "acorn": "4.0.13" } }, "tap-finished": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tap-finished/-/tap-finished-0.0.1.tgz", "integrity": "sha1-CLW1Q/3ASDApDGxWEnlVLnHEvWc=", "dev": true, "requires": { "tap-parser": "0.2.1", "through": "2.3.8" } }, "tap-parser": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-0.2.1.tgz", "integrity": "sha1-jh6CPyEU7iHQMuLzHk+2QqKW9Qs=", "dev": true, "requires": { "split": "0.1.2" } }, "tape": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tape/-/tape-1.0.4.tgz", "integrity": "sha1-4ujlxt0/AP3CpeRRT2L8Ih5Z+cQ=", "dev": true, "requires": { "deep-equal": "0.0.0", "defined": "0.0.0", "jsonify": "0.0.0", "through": "2.3.8" }, "dependencies": { "deep-equal": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz", "integrity": "sha1-mWedO70EcVb81FDT0B7rkGhpHoM=", "dev": true } } }, "test-exclude": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", "integrity": "sha1-TYSWSwlmsAh+zDNKLOAC09k0HiY=", "dev": true, "requires": { "arrify": "1.0.1", "micromatch": "2.3.11", "object-assign": "4.1.1", "read-pkg-up": "1.0.1", "require-main-filename": "1.0.1" } }, "testling": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/testling/-/testling-1.7.1.tgz", "integrity": "sha1-v8+od8ixXdKNkgaSwD2NZMpHh04=", "dev": true, "requires": { "bouncy": "3.2.2", "browser-launcher": "0.3.5", "browserify": "3.46.1", "concat-stream": "1.0.1", "ecstatic": "0.4.13", "ent": "0.0.7", "glob": "3.2.11", "jsonify": "0.0.0", "object-inspect": "0.1.3", "optimist": "0.5.2", "resolve": "0.4.3", "shallow-copy": "0.0.1", "shell-quote": "1.3.3", "tap-finished": "0.0.1", "win-spawn": "2.0.0", "xhr-write-stream": "0.1.2" }, "dependencies": { "JSONStream": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.7.4.tgz", "integrity": "sha1-c0KQ5BUR7qfCz+FR+/mlY6l7l4Y=", "dev": true, "requires": { "jsonparse": "0.0.5", "through": "2.3.8" } }, "acorn": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", "dev": true }, "assert": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/assert/-/assert-1.1.2.tgz", "integrity": "sha1-raoExGu1jG3R8pTaPrJuYijrbkQ=", "dev": true, "requires": { "util": "0.10.3" } }, "base64-js": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", "dev": true }, "browser-pack": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-2.0.1.tgz", "integrity": "sha1-XRxSf1bFgmd0EcTbKhKGSP9r8VA=", "dev": true, "requires": { "JSONStream": "0.6.4", "combine-source-map": "0.3.0", "through": "2.3.8" }, "dependencies": { "JSONStream": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.6.4.tgz", "integrity": "sha1-SyyAY/j1Enh7I3X37p22kgj6Lcs=", "dev": true, "requires": { "jsonparse": "0.0.5", "through": "2.2.7" }, "dependencies": { "through": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=", "dev": true } } } } }, "browser-resolve": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.2.4.tgz", "integrity": "sha1-Wa54IKgpVezTL1+3xGisIcRyOAY=", "dev": true, "requires": { "resolve": "0.6.3" }, "dependencies": { "resolve": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=", "dev": true } } }, "browserify": { "version": "3.46.1", "resolved": "https://registry.npmjs.org/browserify/-/browserify-3.46.1.tgz", "integrity": "sha1-LC5Kfy9AgXjnjCI7W1ezfCGFrY4=", "dev": true, "requires": { "JSONStream": "0.7.4", "assert": "1.1.2", "browser-pack": "2.0.1", "browser-resolve": "1.2.4", "browserify-zlib": "0.1.4", "buffer": "2.1.13", "builtins": "0.0.7", "commondir": "0.0.1", "concat-stream": "1.4.10", "console-browserify": "1.0.3", "constants-browserify": "0.0.1", "crypto-browserify": "1.0.9", "deep-equal": "0.1.2", "defined": "0.0.0", "deps-sort": "0.1.2", "derequire": "0.8.0", "domain-browser": "1.1.7", "duplexer": "0.1.1", "events": "1.0.2", "glob": "3.2.11", "http-browserify": "1.3.2", "https-browserify": "0.0.1", "inherits": "2.0.3", "insert-module-globals": "6.0.0", "module-deps": "2.0.6", "os-browserify": "0.1.2", "parents": "0.0.3", "path-browserify": "0.0.0", "process": "0.7.0", "punycode": "1.2.4", "querystring-es3": "0.2.0", "resolve": "0.6.3", "shallow-copy": "0.0.1", "shell-quote": "0.0.1", "stream-browserify": "0.1.3", "stream-combiner": "0.0.4", "string_decoder": "0.0.1", "subarg": "0.0.1", "syntax-error": "1.1.6", "through2": "0.4.2", "timers-browserify": "1.0.3", "tty-browserify": "0.0.1", "umd": "2.0.0", "url": "0.10.3", "util": "0.10.3", "vm-browserify": "0.0.4", "xtend": "3.0.0" }, "dependencies": { "concat-stream": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", "integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=", "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "1.1.14", "typedarray": "0.0.6" } }, "resolve": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=", "dev": true }, "shell-quote": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz", "integrity": "sha1-GkEZbzwDM8SCMjWT1ohuzxU92YY=", "dev": true }, "xtend": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", "dev": true } } }, "browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", "dev": true, "requires": { "pako": "0.2.9" } }, "buffer": { "version": "2.1.13", "resolved": "https://registry.npmjs.org/buffer/-/buffer-2.1.13.tgz", "integrity": "sha1-yIg46/efMLi0pwd4hHC+qKYsI1U=", "dev": true, "requires": { "base64-js": "0.0.8", "ieee754": "1.1.8" } }, "combine-source-map": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.3.0.tgz", "integrity": "sha1-2edPWT2c1DgHMSy12EbUUe+qnrc=", "dev": true, "requires": { "convert-source-map": "0.3.5", "inline-source-map": "0.3.1", "source-map": "0.1.43" } }, "concat-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", "dev": true, "requires": { "bops": "0.0.6" } }, "console-browserify": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.0.3.tgz", "integrity": "sha1-04mNLDqTEC82QZf4h0tPkrUoao4=", "dev": true }, "constants-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz", "integrity": "sha1-kld9tSe6bEzwpFaNhLwDH0QeIfI=", "dev": true }, "convert-source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", "dev": true }, "crypto-browserify": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz", "integrity": "sha1-zFRJaF37hesRyYKKzHy4erW7/MA=", "dev": true }, "deps-sort": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-0.1.2.tgz", "integrity": "sha1-2qL7YUoXyWN9gB4vVTOa43DzYRo=", "dev": true, "requires": { "JSONStream": "0.6.4", "minimist": "0.0.8", "through": "2.3.8" }, "dependencies": { "JSONStream": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.6.4.tgz", "integrity": "sha1-SyyAY/j1Enh7I3X37p22kgj6Lcs=", "dev": true, "requires": { "jsonparse": "0.0.5", "through": "2.2.7" }, "dependencies": { "through": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=", "dev": true } } } } }, "detective": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detective/-/detective-3.1.0.tgz", "integrity": "sha1-d3gkRKt1K4jKG+Lp0KA5Xx2iXu0=", "dev": true, "requires": { "escodegen": "1.1.0", "esprima-fb": "3001.1.0-dev-harmony-fb" } }, "events": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz", "integrity": "sha1-dYSdz+k9EPsFfDAFWv29UdBqjiQ=", "dev": true }, "glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", "dev": true, "requires": { "inherits": "2.0.3", "minimatch": "0.3.0" } }, "https-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", "dev": true }, "inline-source-map": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.3.1.tgz", "integrity": "sha1-pSi1FOaJ/OkNswiehw2S9Sestes=", "dev": true, "requires": { "source-map": "0.3.0" }, "dependencies": { "source-map": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=", "dev": true, "requires": { "amdefine": "1.0.1" } } } }, "insert-module-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.0.0.tgz", "integrity": "sha1-7orrne4WgZ4zqhRYilWIJK8MFdw=", "dev": true, "requires": { "JSONStream": "0.7.4", "concat-stream": "1.4.10", "lexical-scope": "1.1.1", "process": "0.6.0", "through": "2.3.8", "xtend": "3.0.0" }, "dependencies": { "concat-stream": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", "integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=", "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "1.1.14", "typedarray": "0.0.6" } }, "process": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/process/-/process-0.6.0.tgz", "integrity": "sha1-fdm+gP+q7dTLYo8YJ/HLq23AkY8=", "dev": true }, "xtend": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", "dev": true } } }, "jsonparse": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=", "dev": true }, "lexical-scope": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.1.1.tgz", "integrity": "sha1-3rrBBnQ18TWdkPz9npS8su5Hsr8=", "dev": true, "requires": { "astw": "2.2.0" } }, "minimatch": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", "dev": true, "requires": { "lru-cache": "2.7.3", "sigmund": "1.0.1" } }, "mkdirp": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" }, "module-deps": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-2.0.6.tgz", "integrity": "sha1-uZkyHHOsM1gPAHEsDzB1/cpCVj8=", "dev": true, "requires": { "JSONStream": "0.7.4", "browser-resolve": "1.2.4", "concat-stream": "1.4.10", "detective": "3.1.0", "duplexer2": "0.0.2", "inherits": "2.0.3", "minimist": "0.0.10", "parents": "0.0.2", "readable-stream": "1.1.14", "resolve": "0.6.3", "stream-combiner": "0.1.0", "through2": "0.4.2" }, "dependencies": { "concat-stream": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", "integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=", "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "1.1.14", "typedarray": "0.0.6" } }, "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, "parents": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/parents/-/parents-0.0.2.tgz", "integrity": "sha1-ZxR4JuSX1AdZqvW6TJllm2A00wI=", "dev": true }, "resolve": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=", "dev": true }, "stream-combiner": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.1.0.tgz", "integrity": "sha1-DcOJo8ID+PTVY2j5Xd5S65Jptb4=", "dev": true, "requires": { "duplexer": "0.1.1", "through": "2.3.8" } } } }, "object-keys": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", "dev": true }, "os-browserify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", "dev": true }, "pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", "dev": true }, "parents": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/parents/-/parents-0.0.3.tgz", "integrity": "sha1-+iEvAk2fpjGNu2tM5nbIvkk7nEM=", "dev": true, "requires": { "path-platform": "0.0.1" } }, "path-platform": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.0.1.tgz", "integrity": "sha1-tVhdfDxGPYmqAGDYZhHPGv1hfio=", "dev": true }, "process": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/process/-/process-0.7.0.tgz", "integrity": "sha1-xSIIFho0rfOBI0SuhdPmFQRpOJ0=", "dev": true }, "punycode": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz", "integrity": "sha1-VACKyXKux0F13vnLpt9/qdORh0A=", "dev": true }, "querystring-es3": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.0.tgz", "integrity": "sha1-w2WgimnEQ6zP6zqd6rNePwq6pHY=", "dev": true }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "0.0.1", "string_decoder": "0.10.31" }, "dependencies": { "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } } }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { "amdefine": "1.0.1" } }, "stream-browserify": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-0.1.3.tgz", "integrity": "sha1-lc8bNpdy4nra9GNSJlFSaJxsS+k=", "dev": true, "requires": { "inherits": "2.0.3", "process": "0.5.2" }, "dependencies": { "process": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", "dev": true } } }, "string_decoder": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.0.1.tgz", "integrity": "sha1-9UctCo0WUOyCN1LSTm/WJ7Ob8UE=", "dev": true }, "subarg": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/subarg/-/subarg-0.0.1.tgz", "integrity": "sha1-PVawfaz7xFu7Y/dnK0O2PkY2jjo=", "dev": true, "requires": { "minimist": "0.0.10" }, "dependencies": { "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true } } }, "syntax-error": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.1.6.tgz", "integrity": "sha1-tFSXBtOGzBwdx8JCPxhXm2yt5xA=", "dev": true, "requires": { "acorn": "2.7.0" } }, "through2": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", "dev": true, "requires": { "readable-stream": "1.0.34", "xtend": "2.1.2" }, "dependencies": { "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "0.0.1", "string_decoder": "0.10.31" } }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "xtend": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", "dev": true, "requires": { "object-keys": "0.4.0" } } } }, "timers-browserify": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.0.3.tgz", "integrity": "sha1-/7pwycEu7ZFv1nMY5imsbzIpVVE=", "dev": true, "requires": { "process": "0.5.2" }, "dependencies": { "process": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", "dev": true } } }, "uglify-js": { "version": "2.4.24", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", "dev": true, "requires": { "async": "0.2.10", "source-map": "0.1.34", "uglify-to-browserify": "1.0.2", "yargs": "3.5.4" }, "dependencies": { "source-map": { "version": "0.1.34", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", "dev": true, "requires": { "amdefine": "1.0.1" } } } }, "umd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/umd/-/umd-2.0.0.tgz", "integrity": "sha1-dJaDsNUUcorg4bYZX1d0r8CtT48=", "dev": true, "requires": { "rfile": "1.0.0", "ruglify": "1.0.0", "through": "2.3.8", "uglify-js": "2.4.24" } }, "url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" }, "dependencies": { "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } } } } }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { "readable-stream": "1.0.34", "xtend": "4.0.1" } }, "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { "process": "0.11.10" } }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, "to-utf8": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", "integrity": "sha1-0Xrqcv8vujm55DYBvns/9y4ImFI=", "dev": true }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, "tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "tunnel-agent": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz", "integrity": "sha1-rWgbaPUyGtKCfEz7G31d8s/pQu4=", "dev": true }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "uglify-js": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.9.tgz", "integrity": "sha512-J2t8B5tj9JdPTW4+sNZXmiIWHzTvcoITkaqzTiilu/biZF/9crqf/Fi7k5hqbOmVRh9/hVNxAxBYIMF7N6SqMQ==", "dev": true, "requires": { "commander": "2.13.0", "source-map": "0.6.1" }, "dependencies": { "commander": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", "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 } } }, "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" }, "umd": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", "dev": true }, "underscore": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", "dev": true }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" }, "dependencies": { "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } } }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { "inherits": "2.0.1" }, "dependencies": { "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true } } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { "spdx-correct": "1.0.2", "spdx-expression-parse": "1.0.4" } }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { "indexof": "0.0.1" } }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", "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 }, "win-spawn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/win-spawn/-/win-spawn-2.0.0.tgz", "integrity": "sha1-OXopEw7JjQqgvIa6pGITk+/9Cwc=", "dev": true }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" }, "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.2", "strip-ansi": "3.0.1" }, "dependencies": { "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.1.0", "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } }, "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.1.1" } } } }, "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": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { "graceful-fs": "4.1.11", "imurmurhash": "0.1.4", "slide": "1.1.6" } }, "xhr-write-stream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/xhr-write-stream/-/xhr-write-stream-0.1.2.tgz", "integrity": "sha1-41eEjg0Dm0Ef3Vs7+BvkfuXOJqo=", "dev": true, "requires": { "concat-stream": "0.1.1", "ordered-emitter": "0.1.1" }, "dependencies": { "concat-stream": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-0.1.1.tgz", "integrity": "sha1-1/TieLkM/E8PPvd/5MA7QOs/eQA=", "dev": true } } }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", "dev": true, "requires": { "camelcase": "1.2.1", "decamelize": "1.2.0", "window-size": "0.1.0", "wordwrap": "0.0.2" }, "dependencies": { "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true } } }, "yargs-parser": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.0.0.tgz", "integrity": "sha1-IdR2Mw5agieaS4gTRb8GYQLiGcY=", "dev": true, "requires": { "camelcase": "4.1.0" }, "dependencies": { "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true } } } } } tld.js-2.3.1/package.json000066400000000000000000000047051324233744200152130ustar00rootroot00000000000000{ "author": "Thomas Parisot (https://oncletom.io)", "name": "tldjs", "description": "JavaScript API to work against complex domain names, subdomains and URIs.", "version": "2.3.1", "homepage": "https://github.com/oncletom/tld.js", "repository": { "type": "git", "url": "git://github.com/oncletom/tld.js.git" }, "bugs": { "url": "https://github.com/oncletom/tld.js/issues" }, "engines": { "node": ">= 4" }, "main": "index.js", "license": "MIT", "scripts": { "benchmark": "node ./bin/benchmark.js", "generate-changelog": "github-changes -o oncletom -r 'tld.js' -n ${npm_package_version} --only-pulls --use-commit-body", "lint": "jshint --config .jshintrc lib/**/*.js", "postinstall": "node ./bin/postinstall.js", "posttest": "npm run lint && npm run test-browser", "prepack": "npm run build && npm run build-min", "prepublish": "npm run update", "test": "nyc mocha -R dot -r env-test", "test-browser": "testling", "test-watch": "mocha -R dot -r env-test --watch", "update": "node ./bin/update.js", "version": "npm run generate-changelog && git add CHANGELOG.md", "prebuild": "npm run update", "build": "browserify index.js --s tldjs > tld.js", "prebuild-min": "npm run update", "build-min": "browserify index.js --s tldjs | uglifyjs -c > tld.min.js" }, "tldjs": { "providers": { "publicsuffix-org": "https://publicsuffix.org/list/effective_tld_names.dat" } }, "nyc": { "check-coverage": true, "reporter": [ "text", "html" ] }, "testling": { "files": "test/*.js", "harness": "mocha-bdd", "browsers": [ "ie/7..10", "ff/latest..nightly", "chrome/latest..canary", "opera/latest..next", "safari/6.0", "iphone/6.0", "android/4.2" ] }, "dependencies": { "punycode": "^1.4.1" }, "devDependencies": { "benchmark": "^2.1.4", "browserify": "^15.2.0", "env-test": "^1.0.0", "expect.js": "^0.3.1", "github-changes": "^1.1.2", "jshint": "^2.5.1", "mocha": "^5.0.0", "nyc": "^11.4.1", "testling": "^1.7.0", "uglify-js": "^3.1.9" }, "keywords": [ "tld", "sld", "domain", "browser", "uri", "url", "domain name", "subdomain", "public suffix" ], "collective": { "type": "opencollective", "url": "https://opencollective.com/tldjs", "logo": "https://opencollective.com/opencollective/logo.txt" } } tld.js-2.3.1/test/000077500000000000000000000000001324233744200136765ustar00rootroot00000000000000tld.js-2.3.1/test/publicsuffix.js000066400000000000000000000124131324233744200167400ustar00rootroot00000000000000"use strict"; /* global suite, test, setup */ var tld = require('../index.js'); var expect = require('expect.js'); var checkPublicSuffix; describe('PublicSuffix tests', function(){ beforeEach(function(){ //ease testing by simply copy/pasting tests from Mozilla Central //@see http://mxr.mozilla.org/mozilla-central/source/netwerk/test/unit/data/test_psl.txt?raw=1 checkPublicSuffix = function(testDomain, expectedResult){ expect(tld.getDomain(testDomain)).to.equal(expectedResult); }; }); it('null input.', function(){ checkPublicSuffix(null, null); }); it('Mixed case.', function(){ checkPublicSuffix('COM', null); checkPublicSuffix('example.COM', 'example.com'); checkPublicSuffix('WwW.example.COM', 'example.com'); }); it('Leading dot.', function(){ checkPublicSuffix('.com', null); checkPublicSuffix('.example', null); checkPublicSuffix('.example.com', null); checkPublicSuffix('.example.example', null); }); it('Unlisted TLD.', function(){ checkPublicSuffix('example', null); checkPublicSuffix('example.example', 'example.example'); checkPublicSuffix('b.example.example', 'example.example'); checkPublicSuffix('a.b.example.example', 'example.example'); }); it.skip('Listed, but non-Internet, TLD.', function(){ checkPublicSuffix('local', null); checkPublicSuffix('example.local', null); checkPublicSuffix('b.example.local', null); checkPublicSuffix('a.b.example.local', null); }); it('TLD with only 1 rule.', function(){ checkPublicSuffix('biz', null); checkPublicSuffix('domain.biz', 'domain.biz'); checkPublicSuffix('b.domain.biz', 'domain.biz'); checkPublicSuffix('a.b.domain.biz', 'domain.biz'); }); it('TLD with some 2-level rules.', function(){ checkPublicSuffix('com', null); checkPublicSuffix('example.com', 'example.com'); checkPublicSuffix('b.example.com', 'example.com'); checkPublicSuffix('a.b.example.com', 'example.com'); checkPublicSuffix('uk.com', null); checkPublicSuffix('example.uk.com', 'example.uk.com'); checkPublicSuffix('b.example.uk.com', 'example.uk.com'); checkPublicSuffix('a.b.example.uk.com', 'example.uk.com'); checkPublicSuffix('test.ac', 'test.ac'); }); it('TLD with only 1 (wildcard) rule.', function(){ checkPublicSuffix('mm', null); checkPublicSuffix('c.mm', null); checkPublicSuffix('b.c.mm', 'b.c.mm'); checkPublicSuffix('a.b.c.mm', 'b.c.mm'); }); it('More complex TLD.', function(){ checkPublicSuffix('jp', null); checkPublicSuffix('test.jp', 'test.jp'); checkPublicSuffix('www.test.jp', 'test.jp'); checkPublicSuffix('ac.jp', null); checkPublicSuffix('test.ac.jp', 'test.ac.jp'); checkPublicSuffix('www.test.ac.jp', 'test.ac.jp'); checkPublicSuffix('kyoto.jp', null); checkPublicSuffix('test.kyoto.jp', 'test.kyoto.jp'); checkPublicSuffix('ide.kyoto.jp', null); checkPublicSuffix('b.ide.kyoto.jp', 'b.ide.kyoto.jp'); checkPublicSuffix('a.b.ide.kyoto.jp', 'b.ide.kyoto.jp'); checkPublicSuffix('c.kobe.jp', null); checkPublicSuffix('b.c.kobe.jp', 'b.c.kobe.jp'); checkPublicSuffix('a.b.c.kobe.jp', 'b.c.kobe.jp'); checkPublicSuffix('city.kobe.jp', 'city.kobe.jp'); checkPublicSuffix('www.city.kobe.jp', 'city.kobe.jp'); }); it('TLD with a wildcard rule and exceptions.', function(){ checkPublicSuffix('ck', null); checkPublicSuffix('test.ck', null); checkPublicSuffix('b.test.ck', 'b.test.ck'); checkPublicSuffix('a.b.test.ck', 'b.test.ck'); checkPublicSuffix('www.ck', 'www.ck'); checkPublicSuffix('www.www.ck', 'www.ck'); }); it('US K12.', function(){ checkPublicSuffix('us', null); checkPublicSuffix('test.us', 'test.us'); checkPublicSuffix('www.test.us', 'test.us'); checkPublicSuffix('ak.us', null); checkPublicSuffix('test.ak.us', 'test.ak.us'); checkPublicSuffix('www.test.ak.us', 'test.ak.us'); checkPublicSuffix('k12.ak.us', null); checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us'); checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us'); }); it('IDN labels.', function(){ // checkPublicSuffix('食狮.com.cn', '食狮.com.cn'); // checkPublicSuffix('食狮.公司.cn', '食狮.公司.cn'); // checkPublicSuffix('www.食狮.公司.cn', '食狮.公司.cn'); // checkPublicSuffix('shishi.公司.cn', 'shishi.公司.cn'); // checkPublicSuffix('公司.cn', null); // checkPublicSuffix('食狮.中国', '食狮.中国'); // checkPublicSuffix('www.食狮.中国', '食狮.中国'); // checkPublicSuffix('shishi.中国', 'shishi.中国'); // checkPublicSuffix('中国', null); }); it('Same as above, but punycoded.', function(){ checkPublicSuffix('xn--85x722f.com.cn', 'xn--85x722f.com.cn'); checkPublicSuffix('xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn'); checkPublicSuffix('www.xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn'); checkPublicSuffix('shishi.xn--55qx5d.cn', 'shishi.xn--55qx5d.cn'); checkPublicSuffix('xn--55qx5d.cn', null); checkPublicSuffix('xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s'); checkPublicSuffix('www.xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s'); checkPublicSuffix('shishi.xn--fiqs8s', 'shishi.xn--fiqs8s'); checkPublicSuffix('xn--fiqs8s', null); }); }); tld.js-2.3.1/test/tld.js000066400000000000000000000546411324233744200150310ustar00rootroot00000000000000"use strict"; /* global suite, test */ var tld = require('../index.js'); // `isIp` is not exposed as part of the public API because it only works on // valid hostname. Hence, we only use it internally. var isIp = require('../lib/is-ip.js'); var parser = require('../lib/parsers/publicsuffix-org.js'); var expect = require('expect.js'); function repeat(str, n) { var res = ''; for (var i = 0; i < n; i += 1) { res += str; } return res; } describe('tld.js', function () { describe('Constructor', function () { it('should be a pure object', function () { expect(tld.constructor.name).to.be('Object'); }); it('should have .rules map', function () { expect(tld.rules).to.be(undefined); }); it('should not have any .validHosts property', function () { expect(tld.validHosts).to.be(undefined); }); it('should export bound methods', function () { var getDomain = tld.getDomain; var domain = 'fr.google.com'; expect(tld.getDomain(domain)).to.equal(getDomain(domain)); }); }); describe('isValid method', function () { // That's a 255 characters long hostname var maxSizeHostname = 'a'; for (var i = 0; i < 127; i += 1) { maxSizeHostname += '.a'; } it('should detect valid hostname', function () { expect(tld.isValid('')).to.be(false); expect(tld.isValid('-google.com')).to.be(false); expect(tld.isValid('google-.com')).to.be(false); expect(tld.isValid('google.com-')).to.be(false); expect(tld.isValid('.google.com')).to.be(false); expect(tld.isValid('google..com')).to.be(false); expect(tld.isValid('google.com..')).to.be(false); expect(tld.isValid('example.' + repeat('a', 64) + '.')).to.be(false); expect(tld.isValid('example.' + repeat('a', 64))).to.be(false); expect(tld.isValid('googl@.com..')).to.be(false); // Length of 256 (too long) expect(tld.isValid(maxSizeHostname + 'a')).to.be(false); expect(tld.isValid('google.com')).to.be(true); expect(tld.isValid('miam.google.com')).to.be(true); expect(tld.isValid('miam.miam.google.com')).to.be(true); expect(tld.isValid('example.' + repeat('a', 63) + '.')).to.be(true); expect(tld.isValid('example.' + repeat('a', 63))).to.be(true); //@see https://github.com/oncletom/tld.js/issues/95 expect(tld.isValid('miam.miam.google.com.')).to.be(true); // Length of 255 (maximum allowed) expect(tld.isValid(maxSizeHostname)).to.be(true); }); it('should detect invalid hostname', function () { expect(tld.isValid(null)).to.be(false); expect(tld.isValid(undefined)).to.be(false); expect(tld.isValid(0)).to.be(false); expect(tld.isValid([])).to.be(false); expect(tld.isValid({})).to.be(false); expect(tld.isValid(function () { })).to.be(false); }); it('should be falsy on invalid domain syntax', function () { expect(tld.isValid('.localhost')).to.be(false); expect(tld.isValid('.google.com')).to.be(false); expect(tld.isValid('.com')).to.be(false); }); }); describe('isIp method', function () { it('should return false on incorrect inputs', function () { expect(isIp('')).to.be(false); expect(isIp(null)).to.be(false); expect(isIp(undefined)).to.be(false); expect(isIp({})).to.be(false); }); it('should return true on valid ip addresses', function () { expect(isIp('::1')).to.be(true); expect(isIp('2001:0db8:85a3:0000:0000:8a2e:0370:7334')).to.be(true); expect(isIp('192.168.0.1')).to.be(true); }); it('should return false on invalid ip addresses', function () { expect(isIp('::1-')).to.be(false); expect(isIp('[::1]')).to.be(false); expect(isIp('[2001:0db8:85a3:0000:0000:8a2e:0370:7334]')).to.be(false); expect(isIp('192.168.0.1.')).to.be(false); expect(isIp('192.168.0')).to.be(false); expect(isIp('192.168.0.')).to.be(false); expect(isIp('192.16-8.0.1')).to.be(false); }); }); describe('getDomain method', function () { it('should return the expected domain from a simple string', function () { expect(tld.getDomain('google.com')).to.equal('google.com'); expect(tld.getDomain('t.co')).to.equal('t.co'); expect(tld.getDomain(' GOOGLE.COM ')).to.equal('google.com'); expect(tld.getDomain(' t.CO ')).to.equal('t.co'); }); it('should return the relevant domain of a two levels domain', function () { expect(tld.getDomain('google.co.uk')).to.equal('google.co.uk'); }); it('should return the relevant domain from a subdomain string', function () { expect(tld.getDomain('fr.google.com')).to.equal('google.com'); expect(tld.getDomain('foo.google.co.uk')).to.equal('google.co.uk'); expect(tld.getDomain('fr.t.co')).to.equal('t.co'); }); it('should not break on specific RegExp characters', function (){ expect(function (){ //@see https://github.com/oncletom/tld.js/issues/33 tld.getDomain('www.weir)domain.com'); }).not.to.throwError(); expect(function (){ //@see https://github.com/oncletom/tld.js/issues/53 tld.getDomain("http://('4drsteve.com', [], ['54.213.246.177'])/xmlrpc.php"); }).not.to.throwError(); expect(function (){ //@see https://github.com/oncletom/tld.js/issues/53 tld.getDomain("('4drsteve.com', [], ['54.213.246.177'])"); }).not.to.throwError(); }); //@see https://github.com/oncletom/tld.js/issues/53 it('should correctly extract domain from paths including "@" in the path', function (){ var domain = tld.getDomain('http://cdn.jsdelivr.net/g/jquery@1.8.2,jquery.waypoints@2.0.2,qtip2@2.2.1,typeahead.js@0.9.3,sisyphus@0.1,jquery.slick@1.3.15,fastclick@1.0.3'); expect(domain).to.equal('jsdelivr.net'); }); it('should provide consistent results', function(){ expect(tld.getDomain('www.bl.uk')).to.equal('bl.uk'); expect(tld.getDomain('www.majestic12.co.uk')).to.equal('majestic12.co.uk'); }); //@see https://github.com/oncletom/tld.js/issues/25 //@see https://github.com/oncletom/tld.js/issues/30 it('existing rule constraint', function () { expect(tld.getDomain('s3.amazonaws.com')).to.be(null); expect(tld.getDomain('blogspot.co.uk')).to.be(null); }); it('should return nytimes.com even in a whole valid', function(){ expect(tld.getDomain('http://www.nytimes.com/')).to.be('nytimes.com'); }); //@see https://github.com/oncletom/tld.js/issues/95 it('should ignore the trailing dot in a domain', function () { expect(tld.getDomain('https://www.google.co.uk./maps')).to.equal('google.co.uk'); }); }); describe('tldExists method', function () { it('should be truthy on existing TLD', function () { expect(tld.tldExists('com')).to.be(true); expect(tld.tldExists('example.com')).to.be(true); expect(tld.tldExists('co.uk')).to.be(true); expect(tld.tldExists('amazon.co.uk')).to.be(true); expect(tld.tldExists('台灣')).to.be(true); expect(tld.tldExists('台灣.台灣')).to.be(true); }); it('should be falsy on unexisting TLD', function () { expect(tld.tldExists('con')).to.be(false); expect(tld.tldExists('example.con')).to.be(false); expect(tld.tldExists('go')).to.be(false); expect(tld.tldExists('チーズ')).to.be(false); }); it('should be truthy on complex TLD which cannot be verified as long as the gTLD exists', function(){ expect(tld.tldExists('uk.com')).to.be(true); }); //@see https://github.com/oncletom/tld.js/issues/95 it('should ignore the trailing dot in a domain', function () { expect(tld.tldExists('https://www.google.co.uk./maps')).to.be(true); }); }); describe('#getPublicSuffix', function () { it('should return co.uk if google.co.uk', function () { expect(tld.getPublicSuffix('google.co.uk')).to.be('co.uk'); }); // @see https://github.com/oncletom/tld.js/pull/97 it('should return www.ck if www.www.ck', function () { expect(tld.getPublicSuffix('www.www.ck')).to.be('ck'); }); //@see https://github.com/oncletom/tld.js/issues/30 it('should return s3.amazonaws.com if s3.amazonaws.com', function () { expect(tld.getPublicSuffix('s3.amazonaws.com')).to.be('s3.amazonaws.com'); }); it('should return s3.amazonaws.com if www.s3.amazonaws.com', function () { expect(tld.getPublicSuffix('s3.amazonaws.com')).to.be('s3.amazonaws.com'); }); it('should directly return the suffix if it matches a rule key', function(){ expect(tld.getPublicSuffix('youtube')).to.be('youtube'); }); it('should return the suffix if a rule exists that has no exceptions', function(){ expect(tld.getPublicSuffix('microsoft.eu')).to.be('eu'); }); // @see https://github.com/oncletom/tld.js/pull/97 it('should return the string TLD if the publicsuffix does not exist', function(){ expect(tld.getPublicSuffix('www.freedom.nsa')).to.be('nsa'); }); // @see https://github.com/oncletom/tld.js/issues/95 it('should ignore the trailing dot in a domain', function () { expect(tld.getPublicSuffix('https://www.google.co.uk./maps')).to.equal('co.uk'); }); }); describe('extractHostname', function(){ it('should return a valid hostname as is', function(){ expect(tld.extractHostname(' example.CO.uk ')).to.equal('example.co.uk'); }); it('should return the hostname of a scheme-less URL', function(){ expect(tld.extractHostname('example.co.uk/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a scheme-less + port URL', function(){ expect(tld.extractHostname('example.co.uk:8080/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a scheme-less + authentication URL', function(){ expect(tld.extractHostname('user:password@example.co.uk/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a scheme-less + passwordless URL', function(){ expect(tld.extractHostname('user@example.co.uk/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a scheme-less + authentication + port URL', function(){ expect(tld.extractHostname('user:password@example.co.uk:8080/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a scheme-less + passwordless + port URL', function(){ expect(tld.extractHostname('user@example.co.uk:8080/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a user-password same-scheme URL', function(){ expect(tld.extractHostname('//user:password@example.co.uk:8080/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a passwordless same-scheme URL', function(){ expect(tld.extractHostname('//user@example.co.uk:8080/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a complex user-password scheme URL', function(){ expect(tld.extractHostname('git+ssh://user:password@example.co.uk:8080/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the hostname of a complex passwordless scheme URL', function(){ expect(tld.extractHostname('git+ssh://user@example.co.uk:8080/some/path?and&query#hash')).to.equal('example.co.uk'); }); it('should return the initial value if it is not a valid hostname', function(){ expect(tld.extractHostname(42)).to.equal('42'); }); it('should return www.nytimes.com even with an URL as a parameter', function(){ expect(tld.extractHostname('http://www.nytimes.com/glogin?URI=http://www.notnytimes.com/2010/03/26/us/politics/26court.html&OQ=_rQ3D1Q26&OP=45263736Q2FKgi!KQ7Dr!K@@@Ko!fQ24KJg(Q3FQ5Cgg!Q60KQ60W.WKWQ22KQ60IKyQ3FKigQ24Q26!Q26(Q3FKQ60I(gyQ5C!Q2Ao!fQ24')).to.equal('www.nytimes.com'); }); it('should return punycode for international hostnames', function() { expect(tld.extractHostname('台灣')).to.equal('xn--kpry57d'); }); //@see https://github.com/oncletom/tld.js/issues/95 it('should ignore the trailing dot in a domain', function () { expect(tld.extractHostname('http://example.co.uk./some/path?and&query#hash')).to.equal('example.co.uk'); }); }); describe('getSubdomain method', function(){ it('should return null if the domain cannot be found', function(){ expect(tld.getSubdomain('not-a-validHost')).to.equal(null); }); it('should return the relevant subdomain of a hostname', function(){ expect(tld.getSubdomain('localhost')).to.equal(null); expect(tld.getSubdomain('google.com')).to.equal(''); expect(tld.getSubdomain('fr.google.com')).to.equal('fr'); expect(tld.getSubdomain('random.fr.google.com')).to.equal('random.fr'); expect(tld.getSubdomain('my.custom.domain')).to.equal('my'); }); it('should return the relevant subdomain of a badly trimmed string', function(){ expect(tld.getSubdomain(' google.COM')).to.equal(''); expect(tld.getSubdomain(' fr.GOOGLE.COM ')).to.equal('fr'); expect(tld.getSubdomain(' random.FR.google.com')).to.equal('random.fr'); }); it('should return the subdomain of a TLD + SLD hostname', function(){ expect(tld.getSubdomain('love.fukushima.jp')).to.equal(''); expect(tld.getSubdomain('i.love.fukushima.jp')).to.equal('i'); expect(tld.getSubdomain('random.nuclear.strike.co.jp')).to.equal('random.nuclear'); }); it('should return the subdomain of a wildcard hostname', function(){ expect(tld.getSubdomain('google.co.uk')).to.equal(''); expect(tld.getSubdomain('fr.google.co.uk')).to.equal('fr'); expect(tld.getSubdomain('random.fr.google.co.uk')).to.equal('random.fr'); }); //@see https://github.com/oncletom/tld.js/issues/25 it.skip('should return the subdomain of reserved subdomains', function(){ expect(tld.getSubdomain('blogspot.co.uk')).to.equal(''); expect(tld.getSubdomain('emergency.blogspot.co.uk')).to.equal('emergency'); }); it('should not break on specific RegExp characters', function (){ expect(function (){ //@see https://github.com/oncletom/tld.js/issues/33 tld.getSubdomain('www.weir)domain.com'); }).not.to.throwError(); expect(function (){ //@see https://github.com/oncletom/tld.js/issues/53 tld.getSubdomain("http://('4drsteve.com', [], ['54.213.246.177'])/xmlrpc.php"); }).not.to.throwError(); expect(function (){ //@see https://github.com/oncletom/tld.js/issues/53 tld.getSubdomain("('4drsteve.com', [], ['54.213.246.177'])"); }).not.to.throwError(); }); //@see https://github.com/oncletom/tld.js/issues/53 it('should correctly extract domain from paths including "@" in the path', function (){ var domain = tld.getSubdomain('http://cdn.jsdelivr.net/g/jquery@1.8.2,jquery.waypoints@2.0.2,qtip2@2.2.1,typeahead.js@0.9.3,sisyphus@0.1,jquery.slick@1.3.15,fastclick@1.0.3'); expect(domain).to.equal('cdn'); }); //@see https://github.com/oncletom/tld.js/issues/35 it('should provide consistent results', function(){ expect(tld.getSubdomain('www.bl.uk')).to.equal('www'); expect(tld.getSubdomain('www.majestic12.co.uk')).to.equal('www'); }); //@see https://github.com/oncletom/tld.js/issues/95 it('should ignore the trailing dot in a domain', function () { expect(tld.getSubdomain('random.fr.google.co.uk.')).to.equal('random.fr'); }); }); describe('#parse', function () { it('should handle ipv6 addresses properly', function () { expect(tld.parse('http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]')).to.eql({ hostname: '2001:0db8:85a3:0000:0000:8a2e:0370:7334', isValid: true, isIp: true, tldExists: false, publicSuffix: null, domain: null, subdomain: null }); expect(tld.parse('http://user:pass@[::1]/segment/index.html?query#frag')).to.eql({ hostname: '::1', isValid: true, isIp: true, tldExists: false, publicSuffix: null, domain: null, subdomain: null }); expect(tld.parse('https://[::1]')).to.eql({ hostname: '::1', isValid: true, isIp: true, tldExists: false, publicSuffix: null, domain: null, subdomain: null }); expect(tld.parse('http://[1080::8:800:200C:417A]/foo')).to.eql({ hostname: '1080::8:800:200c:417a', isValid: true, isIp: true, tldExists: false, publicSuffix: null, domain: null, subdomain: null }); }); it('should handle ipv4 addresses properly', function () { expect(tld.parse('http://192.168.0.1/')).to.eql({ hostname: '192.168.0.1', isValid: true, isIp: true, tldExists: false, publicSuffix: null, domain: null, subdomain: null, }); // `url.parse` currently does not support decoding urls (whatwg-url does) // expect(tld.parse('http://%30%78%63%30%2e%30%32%35%30.01%2e')).to.eql({ // hostname: '192.168.0.1', // isValid: true, // isIp: true, // tldExists: false, // publicSuffix: null, // domain: null, // subdomain: null, // }); }); }); describe('validHosts', function(){ var customTld; context('non-empty array', function () { before(function(){ customTld = tld.fromUserSettings({ validHosts: ['localhost'] }); }); it('should now be a valid host', function(){ expect(customTld.isValid('localhost')).to.be(true); }); it('should return the known valid host', function () { expect(customTld.getDomain('localhost')).to.equal('localhost'); expect(customTld.getDomain('subdomain.localhost')).to.equal('localhost'); expect(customTld.getDomain('subdomain.notlocalhost')).to.equal('subdomain.notlocalhost'); expect(customTld.getDomain('subdomain.not-localhost')).to.equal('subdomain.not-localhost'); }); //@see https://github.com/oncletom/tld.js/issues/66 it('should return the subdomain of a validHost', function(){ expect(customTld.getSubdomain('vhost.localhost')).to.equal('vhost'); }); it('should fallback to normal extraction if no match in validHost', function(){ expect(customTld.getSubdomain('vhost.evil.com')).to.equal('vhost'); }); }); context('empty value', function () { it('falls-back to empty array', function () { expect(function () { customTld = tld.fromUserSettings({ validHosts: null }); }).not.to.throwError(); expect(function () { customTld = tld.fromUserSettings({ validHosts: undefined }); }).not.to.throwError(); expect(function () { customTld = tld.fromUserSettings({ validHosts: [] }); }).not.to.throwError(); }); }); }); describe('SuffixTrie', function () { it('should ignore empty line', function () { var tlds = parser.parse('\n'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({}); }); it('should ignore comment', function () { var tlds = parser.parse('// \n'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({}); }); it('should parse up to the first space', function () { var tlds = parser.parse('co.uk .evil'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ uk: { co: { $: 0 } } }); }); it('should parse normal rule', function () { var tlds = parser.parse('co.uk'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ uk: { co: { $: 0 } } }); }); it('should parse exception', function () { var tlds = parser.parse('!co.uk'); expect(tlds.exceptions).to.eql({ uk: { co: { $: 0 } } }); expect(tlds.rules).to.eql({}); }); it('should parse wildcard', function () { var tlds = parser.parse('*'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ '*': { $: 0 } }); expect(tlds.suffixLookup('foo')).to.equal('foo'); tlds = parser.parse('*.uk'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ uk: { '*': { $: 0 } } }); expect(tlds.suffixLookup('bar.uk')).to.equal('bar.uk'); expect(tlds.suffixLookup('bar.baz')).to.equal(null); tlds = parser.parse('foo.*.baz'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ baz: { '*': { foo: { $: 0 } } } }); expect(tlds.suffixLookup('foo.bar.baz')).to.equal('foo.bar.baz'); expect(tlds.suffixLookup('foo.foo.bar')).to.equal(null); expect(tlds.suffixLookup('bar.foo.baz')).to.equal(null); expect(tlds.suffixLookup('foo.baz')).to.equal(null); expect(tlds.suffixLookup('baz')).to.equal(null); tlds = parser.parse('foo.bar.*'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ '*': { bar: { foo: { $: 0 } } } }); expect(tlds.suffixLookup('foo.bar.baz')).to.equal('foo.bar.baz'); expect(tlds.suffixLookup('foo.foo.bar')).to.equal(null); tlds = parser.parse('foo.*.*'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ '*': { '*': { foo: { $: 0 } } } }); expect(tlds.suffixLookup('foo.bar.baz')).to.equal('foo.bar.baz'); expect(tlds.suffixLookup('foo.foo.bar')).to.equal('foo.foo.bar'); expect(tlds.suffixLookup('baz.foo.bar')).to.equal(null); tlds = parser.parse('fo.bar.*\nfoo.bar.baz'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ baz: { bar: { foo: { $: 0 } }, }, '*': { bar: { fo: { $: 0 } }, } }); expect(tlds.suffixLookup('foo.bar.baz')).to.equal('foo.bar.baz'); tlds = parser.parse('bar.*\nfoo.bar.baz'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ baz: { bar: { foo: { $: 0 } }, }, '*': { bar: { $: 0 }, } }); expect(tlds.suffixLookup('foo.bar.baz')).to.equal('foo.bar.baz'); }); it('should insert rules with same TLD', function () { var tlds = parser.parse('co.uk\nca.uk'); expect(tlds.exceptions).to.eql({}); expect(tlds.rules).to.eql({ uk: { ca: { $: 0 }, co: { $: 0 } } }); }); }); });