├── .eslintrc.json ├── .gitignore ├── LICENSE ├── README.md ├── detect-browser.js ├── index.html ├── package-lock.json └── package.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "google", 3 | "env": { 4 | "browser": true 5 | }, 6 | "rules": { 7 | "no-unused-vars": "error", 8 | "no-undef": "error", 9 | "indent": [ 10 | "error", 11 | "tab" 12 | ], 13 | "require-jsdoc": "off", 14 | "no-var": "off", 15 | "no-tabs": "off", 16 | "space-before-function-paren": "off", 17 | "new-cap": "off" 18 | } 19 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vscode -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Ahmad Raza 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # detect-browser 2 | A JavaScript library to detect browser properties like browser name, device, OS, referrer, timezone, screen resolution and much more. 3 | # How to use 4 | Add js file in src folder or wherever you like.
5 | Add in html file where you want to detect browser properties.
6 | Add after adding above code. 7 | 8 | It will print browser info in console 9 | 10 | # List of properties available 11 | 12 | info.language // browser language e.g en-US 13 |
14 | info.languages // Gives Array of languages 15 |
16 | info.user_agent // Gives User Agent 17 |
18 | info.browser // Gives Browser name e.g Chrome 19 |
20 | info.device // Gives Device e.g Mobile or Desktop 21 |
22 | info.referer // Gives Referer 23 |
24 | info.os // Gives User OS e.g windows 10 64-bit 25 |
26 | info.online // Gives user online status true or false 27 |
28 | info.timezone // Gives User Timezone 29 |
30 | info.screen_resolution // Gives Screen Resolution e.g 1366 x 768 31 |
32 | info.cookie_enabled // Gives Cookie enabled status true or false 33 | -------------------------------------------------------------------------------- /detect-browser.js: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | 'use strict'; 3 | // detect-browser.js v1.0.0 4 | // Get Browser Data 5 | 6 | // MIT License 7 | 8 | // Copyright (c) 2018 Ahmad Raza 9 | 10 | // Permission is hereby granted, free of charge, to any person obtaining a copy 11 | // of this software and associated documentation files (the "Software"), to deal 12 | // in the Software without restriction, including without limitation the rights 13 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the Software is 15 | // furnished to do so, subject to the following conditions: 16 | 17 | // The above copyright notice and this permission notice shall be included in all 18 | // copies or substantial portions of the Software. 19 | 20 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | // SOFTWARE. 27 | 28 | 29 | function isMobile() { 30 | return /Mobi/.test(navigator.userAgent); 31 | } 32 | 33 | function getBrowserName() { 34 | // Opera 8.0+ 35 | if ((window.opr && window.opr.addons) 36 | || window.opera 37 | || navigator.userAgent.indexOf(' OPR/') >= 0) { 38 | return 'Opera'; 39 | } 40 | 41 | // Firefox 1.0+ 42 | if (typeof InstallTrigger !== 'undefined') { 43 | return 'Firefox'; 44 | } 45 | 46 | // Safari 3.0+ "[object HTMLElementConstructor]" 47 | if (/constructor/i.test(window.HTMLElement) || (function (p) { 48 | return p.toString() === '[object SafariRemoteNotification]'; 49 | })(!window['safari'])) { 50 | return 'Safari'; 51 | } 52 | 53 | // Internet Explorer 6-11 54 | if (/* @cc_on!@*/false || document.documentMode) { 55 | return 'Internet Explorer'; 56 | } 57 | 58 | // Edge 20+ 59 | if (!(document.documentMode) && window.StyleMedia) { 60 | return 'Microsoft Edge'; 61 | } 62 | 63 | // Chrome 64 | if (window.chrome) { 65 | return 'Chrome'; 66 | } 67 | } 68 | 69 | function getOSName() { 70 | var os; 71 | if (isMobile()) { 72 | if (/Windows/.test(navigator.userAgent)) { 73 | os = 'Windows'; 74 | if (/Phone 8.0/.test(navigator.userAgent)) { 75 | os += ' Phone 8.0'; 76 | } else if (/Phone 10.0/.test(navigator.userAgent)) { 77 | os += ' Phone 10.0'; 78 | } 79 | } else if (/Android/.test(navigator.userAgent)) { 80 | function androidVersion() { 81 | if (/Android/.test(navigator.appVersion)) { 82 | var v = (navigator.appVersion).match(/Android (\d+).(\d+)/); 83 | return v; 84 | } 85 | } 86 | 87 | var ver = androidVersion(); 88 | os = ver[0]; 89 | } else if (/iPhone;/.test(navigator.userAgent)) { 90 | function iOSversion() { 91 | if (/iP(hone|od|ad)/.test(navigator.appVersion)) { 92 | var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); 93 | return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)]; 94 | } 95 | } 96 | 97 | var ver = iOSversion(); 98 | os = 'iOS ' + ver[0] + '.' + ver[1] + '.' + ver[2]; 99 | } else if (/iPad;/.test(navigator.userAgent)) { 100 | function iOSversion() { 101 | if (/iP(hone|od|ad)/.test(navigator.appVersion)) { 102 | var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); 103 | return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)]; 104 | } 105 | } 106 | 107 | var ver = iOSversion(); 108 | os = 'iOS ' + ver[0] + '.' + ver[1] + '.' + ver[2]; 109 | } else if (/BBd*/.test(navigator.userAgent)) { 110 | os = 'BlackBerry'; 111 | } 112 | } else { 113 | if (/Windows/.test(navigator.userAgent)) { 114 | os = 'Windows'; 115 | if (/5.1;/.test(navigator.userAgent)) { 116 | os += ' XP'; 117 | } else if (/6.0;/.test(navigator.userAgent)) { 118 | os += ' Vista'; 119 | } else if (/6.1;/.test(navigator.userAgent)) { 120 | os += ' 7'; 121 | } else if (/6.2/.test(navigator.userAgent)) { 122 | os += ' 8'; 123 | } else if (/10.0;/.test(navigator.userAgent)) { 124 | os += ' 10'; 125 | } 126 | 127 | if (/64/.test(navigator.userAgent)) { 128 | os += ' 64-bit'; 129 | } else { 130 | os += ' 32-bit'; 131 | } 132 | } else if (/Macintosh/.test(navigator.userAgent)) { 133 | os = 'Macintosh'; 134 | if (/OS X/.test(navigator.userAgent)) { 135 | os += ' OS X'; 136 | } 137 | } 138 | } 139 | 140 | return os; 141 | } 142 | 143 | function getBrowser() { 144 | return { 145 | os: getOSName(), 146 | browser: getBrowserName(), 147 | language: navigator.language, 148 | languages: navigator.languages, 149 | user_agent: navigator.userAgent, 150 | device: isMobile() ? 'Mobile' : 'Desktop', 151 | referrer: document.referrer || 'N/A', 152 | online: navigator.onLine, 153 | timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, 154 | screen_resolution: screen.width + ' x ' + screen.height, 155 | cookie_enabled: navigator.cookieEnabled, 156 | }; 157 | } 158 | 159 | 160 | // var xhr = new XMLHttpRequest(); 161 | // xhr.open('GET', 'http://ip-api.com/json'); 162 | // xhr.onreadystatechange = function () { 163 | // if (xhr.readyState == 4) { 164 | // if (xhr.status == 200) { 165 | // var IPdata = xhr.responseText; 166 | // jsonResponse = JSON.parse(IPdata); 167 | // } 168 | // } 169 | // }; 170 | // xhr.send(null); 171 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Document 9 | 10 | 11 | 12 | 13 |

14 | 	
15 | 
16 | 
17 | 


--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
   1 | {
   2 |   "name": "detect-browser",
   3 |   "version": "1.0.0",
   4 |   "lockfileVersion": 1,
   5 |   "requires": true,
   6 |   "dependencies": {
   7 |     "acorn": {
   8 |       "version": "5.5.3",
   9 |       "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
  10 |       "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ=="
  11 |     },
  12 |     "acorn-jsx": {
  13 |       "version": "3.0.1",
  14 |       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
  15 |       "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
  16 |       "requires": {
  17 |         "acorn": "3.3.0"
  18 |       },
  19 |       "dependencies": {
  20 |         "acorn": {
  21 |           "version": "3.3.0",
  22 |           "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
  23 |           "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
  24 |         }
  25 |       }
  26 |     },
  27 |     "ajv": {
  28 |       "version": "5.5.2",
  29 |       "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
  30 |       "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
  31 |       "requires": {
  32 |         "co": "4.6.0",
  33 |         "fast-deep-equal": "1.1.0",
  34 |         "fast-json-stable-stringify": "2.0.0",
  35 |         "json-schema-traverse": "0.3.1"
  36 |       }
  37 |     },
  38 |     "ajv-keywords": {
  39 |       "version": "2.1.1",
  40 |       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
  41 |       "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I="
  42 |     },
  43 |     "ansi-escapes": {
  44 |       "version": "3.0.0",
  45 |       "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
  46 |       "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ=="
  47 |     },
  48 |     "ansi-regex": {
  49 |       "version": "2.1.1",
  50 |       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
  51 |       "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
  52 |     },
  53 |     "ansi-styles": {
  54 |       "version": "2.2.1",
  55 |       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
  56 |       "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
  57 |     },
  58 |     "argparse": {
  59 |       "version": "1.0.10",
  60 |       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
  61 |       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
  62 |       "requires": {
  63 |         "sprintf-js": "1.0.3"
  64 |       }
  65 |     },
  66 |     "array-union": {
  67 |       "version": "1.0.2",
  68 |       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
  69 |       "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
  70 |       "requires": {
  71 |         "array-uniq": "1.0.3"
  72 |       }
  73 |     },
  74 |     "array-uniq": {
  75 |       "version": "1.0.3",
  76 |       "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
  77 |       "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
  78 |     },
  79 |     "arrify": {
  80 |       "version": "1.0.1",
  81 |       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
  82 |       "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
  83 |     },
  84 |     "babel-code-frame": {
  85 |       "version": "6.26.0",
  86 |       "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
  87 |       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
  88 |       "requires": {
  89 |         "chalk": "1.1.3",
  90 |         "esutils": "2.0.2",
  91 |         "js-tokens": "3.0.2"
  92 |       },
  93 |       "dependencies": {
  94 |         "chalk": {
  95 |           "version": "1.1.3",
  96 |           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
  97 |           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
  98 |           "requires": {
  99 |             "ansi-styles": "2.2.1",
 100 |             "escape-string-regexp": "1.0.5",
 101 |             "has-ansi": "2.0.0",
 102 |             "strip-ansi": "3.0.1",
 103 |             "supports-color": "2.0.0"
 104 |           }
 105 |         },
 106 |         "strip-ansi": {
 107 |           "version": "3.0.1",
 108 |           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
 109 |           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
 110 |           "requires": {
 111 |             "ansi-regex": "2.1.1"
 112 |           }
 113 |         }
 114 |       }
 115 |     },
 116 |     "balanced-match": {
 117 |       "version": "1.0.0",
 118 |       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
 119 |       "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
 120 |     },
 121 |     "brace-expansion": {
 122 |       "version": "1.1.11",
 123 |       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
 124 |       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
 125 |       "requires": {
 126 |         "balanced-match": "1.0.0",
 127 |         "concat-map": "0.0.1"
 128 |       }
 129 |     },
 130 |     "caller-path": {
 131 |       "version": "0.1.0",
 132 |       "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
 133 |       "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
 134 |       "requires": {
 135 |         "callsites": "0.2.0"
 136 |       }
 137 |     },
 138 |     "callsites": {
 139 |       "version": "0.2.0",
 140 |       "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
 141 |       "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo="
 142 |     },
 143 |     "chalk": {
 144 |       "version": "2.3.2",
 145 |       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
 146 |       "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
 147 |       "requires": {
 148 |         "ansi-styles": "3.2.1",
 149 |         "escape-string-regexp": "1.0.5",
 150 |         "supports-color": "5.3.0"
 151 |       },
 152 |       "dependencies": {
 153 |         "ansi-styles": {
 154 |           "version": "3.2.1",
 155 |           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
 156 |           "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
 157 |           "requires": {
 158 |             "color-convert": "1.9.1"
 159 |           }
 160 |         },
 161 |         "supports-color": {
 162 |           "version": "5.3.0",
 163 |           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
 164 |           "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
 165 |           "requires": {
 166 |             "has-flag": "3.0.0"
 167 |           }
 168 |         }
 169 |       }
 170 |     },
 171 |     "chardet": {
 172 |       "version": "0.4.2",
 173 |       "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
 174 |       "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
 175 |     },
 176 |     "circular-json": {
 177 |       "version": "0.3.3",
 178 |       "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
 179 |       "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A=="
 180 |     },
 181 |     "cli-cursor": {
 182 |       "version": "2.1.0",
 183 |       "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
 184 |       "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
 185 |       "requires": {
 186 |         "restore-cursor": "2.0.0"
 187 |       }
 188 |     },
 189 |     "cli-width": {
 190 |       "version": "2.2.0",
 191 |       "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
 192 |       "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
 193 |     },
 194 |     "co": {
 195 |       "version": "4.6.0",
 196 |       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
 197 |       "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
 198 |     },
 199 |     "color-convert": {
 200 |       "version": "1.9.1",
 201 |       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
 202 |       "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
 203 |       "requires": {
 204 |         "color-name": "1.1.3"
 205 |       }
 206 |     },
 207 |     "color-name": {
 208 |       "version": "1.1.3",
 209 |       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
 210 |       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
 211 |     },
 212 |     "concat-map": {
 213 |       "version": "0.0.1",
 214 |       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
 215 |       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
 216 |     },
 217 |     "concat-stream": {
 218 |       "version": "1.6.1",
 219 |       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz",
 220 |       "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==",
 221 |       "requires": {
 222 |         "inherits": "2.0.3",
 223 |         "readable-stream": "2.3.5",
 224 |         "typedarray": "0.0.6"
 225 |       }
 226 |     },
 227 |     "core-util-is": {
 228 |       "version": "1.0.2",
 229 |       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
 230 |       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
 231 |     },
 232 |     "cross-spawn": {
 233 |       "version": "5.1.0",
 234 |       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
 235 |       "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
 236 |       "requires": {
 237 |         "lru-cache": "4.1.2",
 238 |         "shebang-command": "1.2.0",
 239 |         "which": "1.3.0"
 240 |       }
 241 |     },
 242 |     "debug": {
 243 |       "version": "3.1.0",
 244 |       "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
 245 |       "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
 246 |       "requires": {
 247 |         "ms": "2.0.0"
 248 |       }
 249 |     },
 250 |     "deep-is": {
 251 |       "version": "0.1.3",
 252 |       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
 253 |       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
 254 |     },
 255 |     "del": {
 256 |       "version": "2.2.2",
 257 |       "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
 258 |       "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
 259 |       "requires": {
 260 |         "globby": "5.0.0",
 261 |         "is-path-cwd": "1.0.0",
 262 |         "is-path-in-cwd": "1.0.0",
 263 |         "object-assign": "4.1.1",
 264 |         "pify": "2.3.0",
 265 |         "pinkie-promise": "2.0.1",
 266 |         "rimraf": "2.6.2"
 267 |       }
 268 |     },
 269 |     "doctrine": {
 270 |       "version": "2.1.0",
 271 |       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
 272 |       "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
 273 |       "requires": {
 274 |         "esutils": "2.0.2"
 275 |       }
 276 |     },
 277 |     "escape-string-regexp": {
 278 |       "version": "1.0.5",
 279 |       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
 280 |       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
 281 |     },
 282 |     "eslint": {
 283 |       "version": "4.18.2",
 284 |       "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.18.2.tgz",
 285 |       "integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==",
 286 |       "requires": {
 287 |         "ajv": "5.5.2",
 288 |         "babel-code-frame": "6.26.0",
 289 |         "chalk": "2.3.2",
 290 |         "concat-stream": "1.6.1",
 291 |         "cross-spawn": "5.1.0",
 292 |         "debug": "3.1.0",
 293 |         "doctrine": "2.1.0",
 294 |         "eslint-scope": "3.7.1",
 295 |         "eslint-visitor-keys": "1.0.0",
 296 |         "espree": "3.5.4",
 297 |         "esquery": "1.0.0",
 298 |         "esutils": "2.0.2",
 299 |         "file-entry-cache": "2.0.0",
 300 |         "functional-red-black-tree": "1.0.1",
 301 |         "glob": "7.1.2",
 302 |         "globals": "11.3.0",
 303 |         "ignore": "3.3.7",
 304 |         "imurmurhash": "0.1.4",
 305 |         "inquirer": "3.3.0",
 306 |         "is-resolvable": "1.1.0",
 307 |         "js-yaml": "3.11.0",
 308 |         "json-stable-stringify-without-jsonify": "1.0.1",
 309 |         "levn": "0.3.0",
 310 |         "lodash": "4.17.5",
 311 |         "minimatch": "3.0.4",
 312 |         "mkdirp": "0.5.1",
 313 |         "natural-compare": "1.4.0",
 314 |         "optionator": "0.8.2",
 315 |         "path-is-inside": "1.0.2",
 316 |         "pluralize": "7.0.0",
 317 |         "progress": "2.0.0",
 318 |         "require-uncached": "1.0.3",
 319 |         "semver": "5.5.0",
 320 |         "strip-ansi": "4.0.0",
 321 |         "strip-json-comments": "2.0.1",
 322 |         "table": "4.0.2",
 323 |         "text-table": "0.2.0"
 324 |       }
 325 |     },
 326 |     "eslint-config-google": {
 327 |       "version": "0.9.1",
 328 |       "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.9.1.tgz",
 329 |       "integrity": "sha512-5A83D+lH0PA81QMESKbLJd/a3ic8tPZtwUmqNrxMRo54nfFaUvtt89q/+icQ+fd66c2xQHn0KyFkzJDoAUfpZA==",
 330 |       "dev": true
 331 |     },
 332 |     "eslint-scope": {
 333 |       "version": "3.7.1",
 334 |       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
 335 |       "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
 336 |       "requires": {
 337 |         "esrecurse": "4.2.1",
 338 |         "estraverse": "4.2.0"
 339 |       }
 340 |     },
 341 |     "eslint-visitor-keys": {
 342 |       "version": "1.0.0",
 343 |       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
 344 |       "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
 345 |     },
 346 |     "espree": {
 347 |       "version": "3.5.4",
 348 |       "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
 349 |       "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
 350 |       "requires": {
 351 |         "acorn": "5.5.3",
 352 |         "acorn-jsx": "3.0.1"
 353 |       }
 354 |     },
 355 |     "esprima": {
 356 |       "version": "4.0.0",
 357 |       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
 358 |       "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
 359 |     },
 360 |     "esquery": {
 361 |       "version": "1.0.0",
 362 |       "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
 363 |       "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
 364 |       "requires": {
 365 |         "estraverse": "4.2.0"
 366 |       }
 367 |     },
 368 |     "esrecurse": {
 369 |       "version": "4.2.1",
 370 |       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
 371 |       "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
 372 |       "requires": {
 373 |         "estraverse": "4.2.0"
 374 |       }
 375 |     },
 376 |     "estraverse": {
 377 |       "version": "4.2.0",
 378 |       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
 379 |       "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
 380 |     },
 381 |     "esutils": {
 382 |       "version": "2.0.2",
 383 |       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
 384 |       "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
 385 |     },
 386 |     "external-editor": {
 387 |       "version": "2.1.0",
 388 |       "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
 389 |       "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
 390 |       "requires": {
 391 |         "chardet": "0.4.2",
 392 |         "iconv-lite": "0.4.19",
 393 |         "tmp": "0.0.33"
 394 |       }
 395 |     },
 396 |     "fast-deep-equal": {
 397 |       "version": "1.1.0",
 398 |       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
 399 |       "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
 400 |     },
 401 |     "fast-json-stable-stringify": {
 402 |       "version": "2.0.0",
 403 |       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
 404 |       "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
 405 |     },
 406 |     "fast-levenshtein": {
 407 |       "version": "2.0.6",
 408 |       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
 409 |       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
 410 |     },
 411 |     "figures": {
 412 |       "version": "2.0.0",
 413 |       "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
 414 |       "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
 415 |       "requires": {
 416 |         "escape-string-regexp": "1.0.5"
 417 |       }
 418 |     },
 419 |     "file-entry-cache": {
 420 |       "version": "2.0.0",
 421 |       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
 422 |       "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
 423 |       "requires": {
 424 |         "flat-cache": "1.3.0",
 425 |         "object-assign": "4.1.1"
 426 |       }
 427 |     },
 428 |     "flat-cache": {
 429 |       "version": "1.3.0",
 430 |       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
 431 |       "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
 432 |       "requires": {
 433 |         "circular-json": "0.3.3",
 434 |         "del": "2.2.2",
 435 |         "graceful-fs": "4.1.11",
 436 |         "write": "0.2.1"
 437 |       }
 438 |     },
 439 |     "fs.realpath": {
 440 |       "version": "1.0.0",
 441 |       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
 442 |       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
 443 |     },
 444 |     "functional-red-black-tree": {
 445 |       "version": "1.0.1",
 446 |       "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
 447 |       "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
 448 |     },
 449 |     "glob": {
 450 |       "version": "7.1.2",
 451 |       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
 452 |       "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
 453 |       "requires": {
 454 |         "fs.realpath": "1.0.0",
 455 |         "inflight": "1.0.6",
 456 |         "inherits": "2.0.3",
 457 |         "minimatch": "3.0.4",
 458 |         "once": "1.4.0",
 459 |         "path-is-absolute": "1.0.1"
 460 |       }
 461 |     },
 462 |     "globals": {
 463 |       "version": "11.3.0",
 464 |       "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz",
 465 |       "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw=="
 466 |     },
 467 |     "globby": {
 468 |       "version": "5.0.0",
 469 |       "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
 470 |       "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
 471 |       "requires": {
 472 |         "array-union": "1.0.2",
 473 |         "arrify": "1.0.1",
 474 |         "glob": "7.1.2",
 475 |         "object-assign": "4.1.1",
 476 |         "pify": "2.3.0",
 477 |         "pinkie-promise": "2.0.1"
 478 |       }
 479 |     },
 480 |     "graceful-fs": {
 481 |       "version": "4.1.11",
 482 |       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
 483 |       "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
 484 |     },
 485 |     "has-ansi": {
 486 |       "version": "2.0.0",
 487 |       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
 488 |       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
 489 |       "requires": {
 490 |         "ansi-regex": "2.1.1"
 491 |       }
 492 |     },
 493 |     "has-flag": {
 494 |       "version": "3.0.0",
 495 |       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
 496 |       "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
 497 |     },
 498 |     "iconv-lite": {
 499 |       "version": "0.4.19",
 500 |       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
 501 |       "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
 502 |     },
 503 |     "ignore": {
 504 |       "version": "3.3.7",
 505 |       "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
 506 |       "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA=="
 507 |     },
 508 |     "imurmurhash": {
 509 |       "version": "0.1.4",
 510 |       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
 511 |       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
 512 |     },
 513 |     "inflight": {
 514 |       "version": "1.0.6",
 515 |       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
 516 |       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
 517 |       "requires": {
 518 |         "once": "1.4.0",
 519 |         "wrappy": "1.0.2"
 520 |       }
 521 |     },
 522 |     "inherits": {
 523 |       "version": "2.0.3",
 524 |       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
 525 |       "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
 526 |     },
 527 |     "inquirer": {
 528 |       "version": "3.3.0",
 529 |       "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
 530 |       "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
 531 |       "requires": {
 532 |         "ansi-escapes": "3.0.0",
 533 |         "chalk": "2.3.2",
 534 |         "cli-cursor": "2.1.0",
 535 |         "cli-width": "2.2.0",
 536 |         "external-editor": "2.1.0",
 537 |         "figures": "2.0.0",
 538 |         "lodash": "4.17.5",
 539 |         "mute-stream": "0.0.7",
 540 |         "run-async": "2.3.0",
 541 |         "rx-lite": "4.0.8",
 542 |         "rx-lite-aggregates": "4.0.8",
 543 |         "string-width": "2.1.1",
 544 |         "strip-ansi": "4.0.0",
 545 |         "through": "2.3.8"
 546 |       }
 547 |     },
 548 |     "is-fullwidth-code-point": {
 549 |       "version": "2.0.0",
 550 |       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
 551 |       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
 552 |     },
 553 |     "is-path-cwd": {
 554 |       "version": "1.0.0",
 555 |       "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
 556 |       "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
 557 |     },
 558 |     "is-path-in-cwd": {
 559 |       "version": "1.0.0",
 560 |       "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
 561 |       "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
 562 |       "requires": {
 563 |         "is-path-inside": "1.0.1"
 564 |       }
 565 |     },
 566 |     "is-path-inside": {
 567 |       "version": "1.0.1",
 568 |       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
 569 |       "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
 570 |       "requires": {
 571 |         "path-is-inside": "1.0.2"
 572 |       }
 573 |     },
 574 |     "is-promise": {
 575 |       "version": "2.1.0",
 576 |       "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
 577 |       "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
 578 |     },
 579 |     "is-resolvable": {
 580 |       "version": "1.1.0",
 581 |       "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
 582 |       "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
 583 |     },
 584 |     "isarray": {
 585 |       "version": "1.0.0",
 586 |       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
 587 |       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
 588 |     },
 589 |     "isexe": {
 590 |       "version": "2.0.0",
 591 |       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
 592 |       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
 593 |     },
 594 |     "js-tokens": {
 595 |       "version": "3.0.2",
 596 |       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
 597 |       "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
 598 |     },
 599 |     "js-yaml": {
 600 |       "version": "3.11.0",
 601 |       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
 602 |       "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
 603 |       "requires": {
 604 |         "argparse": "1.0.10",
 605 |         "esprima": "4.0.0"
 606 |       }
 607 |     },
 608 |     "json-schema-traverse": {
 609 |       "version": "0.3.1",
 610 |       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
 611 |       "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
 612 |     },
 613 |     "json-stable-stringify-without-jsonify": {
 614 |       "version": "1.0.1",
 615 |       "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
 616 |       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
 617 |     },
 618 |     "levn": {
 619 |       "version": "0.3.0",
 620 |       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
 621 |       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
 622 |       "requires": {
 623 |         "prelude-ls": "1.1.2",
 624 |         "type-check": "0.3.2"
 625 |       }
 626 |     },
 627 |     "lodash": {
 628 |       "version": "4.17.5",
 629 |       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
 630 |       "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
 631 |     },
 632 |     "lru-cache": {
 633 |       "version": "4.1.2",
 634 |       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
 635 |       "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
 636 |       "requires": {
 637 |         "pseudomap": "1.0.2",
 638 |         "yallist": "2.1.2"
 639 |       }
 640 |     },
 641 |     "mimic-fn": {
 642 |       "version": "1.2.0",
 643 |       "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
 644 |       "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
 645 |     },
 646 |     "minimatch": {
 647 |       "version": "3.0.4",
 648 |       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
 649 |       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
 650 |       "requires": {
 651 |         "brace-expansion": "1.1.11"
 652 |       }
 653 |     },
 654 |     "minimist": {
 655 |       "version": "0.0.8",
 656 |       "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
 657 |       "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
 658 |     },
 659 |     "mkdirp": {
 660 |       "version": "0.5.1",
 661 |       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
 662 |       "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
 663 |       "requires": {
 664 |         "minimist": "0.0.8"
 665 |       }
 666 |     },
 667 |     "ms": {
 668 |       "version": "2.0.0",
 669 |       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 670 |       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
 671 |     },
 672 |     "mute-stream": {
 673 |       "version": "0.0.7",
 674 |       "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
 675 |       "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
 676 |     },
 677 |     "natural-compare": {
 678 |       "version": "1.4.0",
 679 |       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 680 |       "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
 681 |     },
 682 |     "object-assign": {
 683 |       "version": "4.1.1",
 684 |       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
 685 |       "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
 686 |     },
 687 |     "once": {
 688 |       "version": "1.4.0",
 689 |       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
 690 |       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
 691 |       "requires": {
 692 |         "wrappy": "1.0.2"
 693 |       }
 694 |     },
 695 |     "onetime": {
 696 |       "version": "2.0.1",
 697 |       "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
 698 |       "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
 699 |       "requires": {
 700 |         "mimic-fn": "1.2.0"
 701 |       }
 702 |     },
 703 |     "optionator": {
 704 |       "version": "0.8.2",
 705 |       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
 706 |       "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
 707 |       "requires": {
 708 |         "deep-is": "0.1.3",
 709 |         "fast-levenshtein": "2.0.6",
 710 |         "levn": "0.3.0",
 711 |         "prelude-ls": "1.1.2",
 712 |         "type-check": "0.3.2",
 713 |         "wordwrap": "1.0.0"
 714 |       }
 715 |     },
 716 |     "os-tmpdir": {
 717 |       "version": "1.0.2",
 718 |       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
 719 |       "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
 720 |     },
 721 |     "path-is-absolute": {
 722 |       "version": "1.0.1",
 723 |       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
 724 |       "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
 725 |     },
 726 |     "path-is-inside": {
 727 |       "version": "1.0.2",
 728 |       "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
 729 |       "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
 730 |     },
 731 |     "pify": {
 732 |       "version": "2.3.0",
 733 |       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
 734 |       "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
 735 |     },
 736 |     "pinkie": {
 737 |       "version": "2.0.4",
 738 |       "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
 739 |       "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
 740 |     },
 741 |     "pinkie-promise": {
 742 |       "version": "2.0.1",
 743 |       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
 744 |       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
 745 |       "requires": {
 746 |         "pinkie": "2.0.4"
 747 |       }
 748 |     },
 749 |     "pluralize": {
 750 |       "version": "7.0.0",
 751 |       "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
 752 |       "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow=="
 753 |     },
 754 |     "prelude-ls": {
 755 |       "version": "1.1.2",
 756 |       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
 757 |       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
 758 |     },
 759 |     "process-nextick-args": {
 760 |       "version": "2.0.0",
 761 |       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
 762 |       "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
 763 |     },
 764 |     "progress": {
 765 |       "version": "2.0.0",
 766 |       "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
 767 |       "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8="
 768 |     },
 769 |     "pseudomap": {
 770 |       "version": "1.0.2",
 771 |       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
 772 |       "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
 773 |     },
 774 |     "readable-stream": {
 775 |       "version": "2.3.5",
 776 |       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
 777 |       "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
 778 |       "requires": {
 779 |         "core-util-is": "1.0.2",
 780 |         "inherits": "2.0.3",
 781 |         "isarray": "1.0.0",
 782 |         "process-nextick-args": "2.0.0",
 783 |         "safe-buffer": "5.1.1",
 784 |         "string_decoder": "1.0.3",
 785 |         "util-deprecate": "1.0.2"
 786 |       }
 787 |     },
 788 |     "require-uncached": {
 789 |       "version": "1.0.3",
 790 |       "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
 791 |       "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
 792 |       "requires": {
 793 |         "caller-path": "0.1.0",
 794 |         "resolve-from": "1.0.1"
 795 |       }
 796 |     },
 797 |     "resolve-from": {
 798 |       "version": "1.0.1",
 799 |       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
 800 |       "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY="
 801 |     },
 802 |     "restore-cursor": {
 803 |       "version": "2.0.0",
 804 |       "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
 805 |       "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
 806 |       "requires": {
 807 |         "onetime": "2.0.1",
 808 |         "signal-exit": "3.0.2"
 809 |       }
 810 |     },
 811 |     "rimraf": {
 812 |       "version": "2.6.2",
 813 |       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
 814 |       "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
 815 |       "requires": {
 816 |         "glob": "7.1.2"
 817 |       }
 818 |     },
 819 |     "run-async": {
 820 |       "version": "2.3.0",
 821 |       "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
 822 |       "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
 823 |       "requires": {
 824 |         "is-promise": "2.1.0"
 825 |       }
 826 |     },
 827 |     "rx-lite": {
 828 |       "version": "4.0.8",
 829 |       "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
 830 |       "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ="
 831 |     },
 832 |     "rx-lite-aggregates": {
 833 |       "version": "4.0.8",
 834 |       "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
 835 |       "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
 836 |       "requires": {
 837 |         "rx-lite": "4.0.8"
 838 |       }
 839 |     },
 840 |     "safe-buffer": {
 841 |       "version": "5.1.1",
 842 |       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
 843 |       "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
 844 |     },
 845 |     "semver": {
 846 |       "version": "5.5.0",
 847 |       "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
 848 |       "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
 849 |     },
 850 |     "shebang-command": {
 851 |       "version": "1.2.0",
 852 |       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
 853 |       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
 854 |       "requires": {
 855 |         "shebang-regex": "1.0.0"
 856 |       }
 857 |     },
 858 |     "shebang-regex": {
 859 |       "version": "1.0.0",
 860 |       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
 861 |       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
 862 |     },
 863 |     "signal-exit": {
 864 |       "version": "3.0.2",
 865 |       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
 866 |       "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
 867 |     },
 868 |     "slice-ansi": {
 869 |       "version": "1.0.0",
 870 |       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
 871 |       "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
 872 |       "requires": {
 873 |         "is-fullwidth-code-point": "2.0.0"
 874 |       }
 875 |     },
 876 |     "sprintf-js": {
 877 |       "version": "1.0.3",
 878 |       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
 879 |       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
 880 |     },
 881 |     "string-width": {
 882 |       "version": "2.1.1",
 883 |       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
 884 |       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
 885 |       "requires": {
 886 |         "is-fullwidth-code-point": "2.0.0",
 887 |         "strip-ansi": "4.0.0"
 888 |       }
 889 |     },
 890 |     "string_decoder": {
 891 |       "version": "1.0.3",
 892 |       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
 893 |       "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
 894 |       "requires": {
 895 |         "safe-buffer": "5.1.1"
 896 |       }
 897 |     },
 898 |     "strip-ansi": {
 899 |       "version": "4.0.0",
 900 |       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
 901 |       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
 902 |       "requires": {
 903 |         "ansi-regex": "3.0.0"
 904 |       },
 905 |       "dependencies": {
 906 |         "ansi-regex": {
 907 |           "version": "3.0.0",
 908 |           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
 909 |           "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
 910 |         }
 911 |       }
 912 |     },
 913 |     "strip-json-comments": {
 914 |       "version": "2.0.1",
 915 |       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
 916 |       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
 917 |     },
 918 |     "supports-color": {
 919 |       "version": "2.0.0",
 920 |       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
 921 |       "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
 922 |     },
 923 |     "table": {
 924 |       "version": "4.0.2",
 925 |       "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
 926 |       "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
 927 |       "requires": {
 928 |         "ajv": "5.5.2",
 929 |         "ajv-keywords": "2.1.1",
 930 |         "chalk": "2.3.2",
 931 |         "lodash": "4.17.5",
 932 |         "slice-ansi": "1.0.0",
 933 |         "string-width": "2.1.1"
 934 |       }
 935 |     },
 936 |     "text-table": {
 937 |       "version": "0.2.0",
 938 |       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
 939 |       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
 940 |     },
 941 |     "through": {
 942 |       "version": "2.3.8",
 943 |       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
 944 |       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
 945 |     },
 946 |     "tmp": {
 947 |       "version": "0.0.33",
 948 |       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
 949 |       "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
 950 |       "requires": {
 951 |         "os-tmpdir": "1.0.2"
 952 |       }
 953 |     },
 954 |     "type-check": {
 955 |       "version": "0.3.2",
 956 |       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
 957 |       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
 958 |       "requires": {
 959 |         "prelude-ls": "1.1.2"
 960 |       }
 961 |     },
 962 |     "typedarray": {
 963 |       "version": "0.0.6",
 964 |       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
 965 |       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
 966 |     },
 967 |     "util-deprecate": {
 968 |       "version": "1.0.2",
 969 |       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
 970 |       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
 971 |     },
 972 |     "which": {
 973 |       "version": "1.3.0",
 974 |       "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
 975 |       "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
 976 |       "requires": {
 977 |         "isexe": "2.0.0"
 978 |       }
 979 |     },
 980 |     "wordwrap": {
 981 |       "version": "1.0.0",
 982 |       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
 983 |       "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
 984 |     },
 985 |     "wrappy": {
 986 |       "version": "1.0.2",
 987 |       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 988 |       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
 989 |     },
 990 |     "write": {
 991 |       "version": "0.2.1",
 992 |       "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
 993 |       "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
 994 |       "requires": {
 995 |         "mkdirp": "0.5.1"
 996 |       }
 997 |     },
 998 |     "yallist": {
 999 |       "version": "2.1.2",
1000 |       "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
1001 |       "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
1002 |     }
1003 |   }
1004 | }
1005 | 


--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 | 	"name": "detect-browser",
 3 | 	"version": "1.0.0",
 4 | 	"description": "A JavaScript library to detect browser properties like browser name, device, OS, referrer, timezone, screen resolution and much more. \r # Documentation\r Add    at the top of your page. 
\r Add ", 5 | "main": "detect-browser.js", 6 | "devDependencies": { 7 | "eslint": "^4.18.2", 8 | "eslint-config-google": "^0.9.1" 9 | }, 10 | "scripts": { 11 | "test": "mocha" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/Ahmdrza/detect-browser.git" 16 | }, 17 | "author": "Ahmdrza", 18 | "license": "MIT", 19 | "bugs": { 20 | "url": "https://github.com/Ahmdrza/detect-browser/issues" 21 | }, 22 | "homepage": "https://github.com/Ahmdrza/detect-browser#readme" 23 | } --------------------------------------------------------------------------------