diff --git a/.eslintrc.json b/.eslintrc.json index 7b5982a..3539e30 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,14 +8,11 @@ }, "extends": [ "eslint:recommended", - "google" + "google", + "plugin:prettier/recommended" ], "rules": { "no-control-regex": 0, - "max-len": [ - 1, - 120 - ], "no-console":"warn", "require-jsdoc": 0 } diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 28d26aa..dbc78dc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,17 +12,11 @@ jobs: strategy: matrix: node-version: - - "6.x" - - "7.x" - - "8.x" - - "9.x" - - "10.x" - - "11.x" - - "12.x" - - "13.x" - - "14.x" - - "15.x" - "16.x" + - "17.x" + - "18.x" + - "19.x" + - "20.x" steps: - name: "Set up Node.js ${{ matrix.node-version }}" uses: actions/setup-node@v1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..cf0c46b --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no-install lint-staged diff --git a/CHANGELOG.md b/CHANGELOG.md index 427814b..ffb5473 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +#### 0.7.1 (2023-11-01) + +- **Database:** Added Chrome 101 to 118. + #### 0.7.0 (2022-04-21) - Sync WhichBrowser/Parser-JavaScript to [WhichBrowser/Parser-PHP@1044880](https://github.com/WhichBrowser/Parser-PHP/commit/1044880bc792dbce5948fbff22ae731c43c280d9) diff --git a/README.md b/README.md index bca913b..e0515fc 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ The useragent header looks like Opera 11.10 on Linux, but we know it's Opera Min ## Requirements -WhichBrowser requires node 6 or higher. +WhichBrowser requires Node 6 or higher to run and Node 16 or higher to build and test. ## Dependencies diff --git a/bin/update-applications.js b/bin/update-applications.js index bef8434..4dd5bcc 100644 --- a/bin/update-applications.js +++ b/bin/update-applications.js @@ -57,9 +57,9 @@ types.forEach((type) => { fileStream.write('/* This file is automatically generated, do not edit manually! */\n\n'); fileStream.write('/* eslint-disable */\n\n'); type.needsDeviceConstants && - fileStream.write('const DeviceType = require(\'../src/constants\').deviceType;\n\n'); + fileStream.write("const DeviceType = require('../src/constants').deviceType;\n\n"); type.needsBrowserConstants && - fileStream.write('const BrowserType = require(\'../src/constants\').browserType;\n\n'); + fileStream.write("const BrowserType = require('../src/constants').browserType;\n\n"); fileStream.write(`exports.${type.name} = ${result};\n\n`); fileStream.write('/* This file is automatically generated, do not edit manually! */\n'); diff --git a/bin/update-chrome.js b/bin/update-chrome.js index 925b11e..78d6db2 100644 --- a/bin/update-chrome.js +++ b/bin/update-chrome.js @@ -22,20 +22,10 @@ request('http://omahaproxy.appspot.com/history', (err, response = {}) => { omaha.forEach((line) => { const [os, stability, version] = line.split(','); if (os === 'mac' && stability === 'stable') { - stable.desktop.push( - version - .split('.') - .slice(0, 3) - .join('.') - ); + stable.desktop.push(version.split('.').slice(0, 3).join('.')); } if (os === 'android' && stability === 'stable') { - stable.mobile.push( - version - .split('.') - .slice(0, 3) - .join('.') - ); + stable.mobile.push(version.split('.').slice(0, 3).join('.')); } }); diff --git a/bin/update-indices.js b/bin/update-indices.js index e24d988..0f8566a 100644 --- a/bin/update-indices.js +++ b/bin/update-indices.js @@ -105,6 +105,9 @@ function updateIndecesFromWeb(type) { * @param {object} obj * @return {object} */ -const ksort = (obj) => Object.keys(obj).sort().reduce((acc, val) => Object.assign(acc, {[val]: obj[val]}), {}); +const ksort = (obj) => + Object.keys(obj) + .sort() + .reduce((acc, val) => Object.assign(acc, { [val]: obj[val] }), {}); types.forEach(useWeb ? updateIndecesFromWeb : updateIndeces); diff --git a/bin/update-models.js b/bin/update-models.js index af05fbc..20d0865 100644 --- a/bin/update-models.js +++ b/bin/update-models.js @@ -7,27 +7,27 @@ const models = [ needsFlagsConstants: true, hasCarrier: true, }, - {name: 'ASHA'}, - {name: 'BADA'}, - {name: 'BLACKBERRY'}, - {name: 'BREW'}, + { name: 'ASHA' }, + { name: 'BADA' }, + { name: 'BLACKBERRY' }, + { name: 'BREW' }, { name: 'FEATURE', needsDeviceConstants: true, }, - {name: 'FIREFOXOS'}, + { name: 'FIREFOXOS' }, { name: 'IOS', needsDeviceConstants: true, }, - {name: 'KDDI'}, + { name: 'KDDI' }, { name: 'PALMOS', needsDeviceConstants: true, needsDeviceSubTypeConstants: true, }, - {name: 'S30PLUS'}, - {name: 'S40'}, + { name: 'S30PLUS' }, + { name: 'S40' }, { name: 'SYMBIAN', needsFlagsConstants: true, @@ -38,7 +38,7 @@ const models = [ name: 'TIZEN', needsDeviceConstants: true, }, - {name: 'TOUCHWIZ'}, + { name: 'TOUCHWIZ' }, { name: 'WM', hasCarrier: true, @@ -105,12 +105,12 @@ models.forEach((type) => { fileStream.write('/* This file is automatically generated, do not edit manually! */\n\n'); fileStream.write('/* eslint-disable */\n\n'); type.needsDeviceConstants && - fileStream.write('const DeviceType = require(\'../src/constants\').deviceType;\n\n'); + fileStream.write("const DeviceType = require('../src/constants').deviceType;\n\n"); type.needsDeviceSubTypeConstants && - fileStream.write('const DeviceSubType = require(\'../src/constants\').deviceSubType;\n\n'); + fileStream.write("const DeviceSubType = require('../src/constants').deviceSubType;\n\n"); type.needsBrowserConstants && - fileStream.write('const BrowserType = require(\'../src/constants\').browserType;\n\n'); - type.needsFlagsConstants && fileStream.write('const Flag = require(\'../src/constants\').flag;\n\n'); + fileStream.write("const BrowserType = require('../src/constants').browserType;\n\n"); + type.needsFlagsConstants && fileStream.write("const Flag = require('../src/constants').flag;\n\n"); fileStream.write(`exports.${type.name}_MODELS = ${result};\n\n`); fileStream.write('/* This file is automatically generated, do not edit manually! */\n'); diff --git a/bin/update-profiles.js b/bin/update-profiles.js index 934124b..1d200be 100644 --- a/bin/update-profiles.js +++ b/bin/update-profiles.js @@ -13,7 +13,7 @@ request('https://api.whichbrowser.net/resources/profiles.json', (err, response = const result = JSON.parse(response.body); fileStream.write('/* This file is automatically generated, do not edit manually! */\n\n'); fileStream.write('/* eslint-disable max-len */\n\n'); - fileStream.write('const DeviceType = require(\'../src/constants\').deviceType;\n\n'); + fileStream.write("const DeviceType = require('../src/constants').deviceType;\n\n"); fileStream.write('exports.PROFILES = {\n'); result.forEach( (profile) => diff --git a/bin/update-regexes.js b/bin/update-regexes.js index 1447e3e..77e78b7 100644 --- a/bin/update-regexes.js +++ b/bin/update-regexes.js @@ -35,7 +35,7 @@ function updateRegexes(type) { */ function getSet(list) { const set = new Set(); - list.forEach(({id}) => set.add(id)); + list.forEach(({ id }) => set.add(id)); return set; } diff --git a/data/browsers-chrome.js b/data/browsers-chrome.js index 9a30eb0..49cb07f 100644 --- a/data/browsers-chrome.js +++ b/data/browsers-chrome.js @@ -103,6 +103,24 @@ module.exports = { '98.0.4758': 'stable', '99.0.4844': 'stable', '100.0.4896': 'stable', + '101.0.4951': 'stable', + '102.0.5005': 'stable', + '103.0.5060': 'stable', + '104.0.5112': 'stable', + '105.0.5195': 'stable', + '106.0.5249': 'stable', + '107.0.5304': 'stable', + '108.0.5359': 'stable', + '109.0.5414': 'stable', + '110.0.5481': 'stable', + '111.0.5563': 'stable', + '112.0.5615': 'stable', + '113.0.5672': 'stable', + '114.0.5735': 'stable', + '115.0.5790': 'stable', + '116.0.5845': 'stable', + '117.0.5938': 'stable', + '118.0.5993': 'stable', }, MOBILE: { '16.0.912': 'beta', @@ -180,5 +198,23 @@ module.exports = { '98.0.4758': 'stable', '99.0.4844': 'stable', '100.0.4896': 'stable', + '101.0.4951': 'stable', + '102.0.5005': 'stable', + '103.0.5060': 'stable', + '104.0.5112': 'stable', + '105.0.5195': 'stable', + '106.0.5249': 'stable', + '107.0.5304': 'stable', + '108.0.5359': 'stable', + '109.0.5414': 'stable', + '110.0.5481': 'stable', + '111.0.5563': 'stable', + '112.0.5615': 'stable', + '113.0.5672': 'stable', + '114.0.5735': 'stable', + '115.0.5790': 'stable', + '116.0.5845': 'stable', + '117.0.5938': 'stable', + '118.0.5993': 'stable', }, }; diff --git a/data/build-android.js b/data/build-android.js index 05c4083..3141454 100644 --- a/data/build-android.js +++ b/data/build-android.js @@ -1,117 +1,117 @@ exports.ANDROID_BUILDS = { - 'CUPCAKE': '1.5', - 'DONUT': '1.6', - 'ECLAIR': '2.0', - 'FROYO': '2.2', - 'GINGERBREAD': '2.3', - 'DRC83': '1.6', - 'DRC92': '1.6', - 'DRD08': '1.6', - 'DRD20': '1.6', - 'DMD64': '1.6', - 'ESD20': '2.0', - 'ESD56': '2.0.1', - 'ERD79': '2.1', - 'ERE27': '2.1', - 'EPE54B': '2.1', - 'ESE81': '2.1', - 'EPF21B': '2.1', - 'FRF85B': '2.2', - 'FRF91': '2.2', - 'FRG01B': '2.2', - 'FRG22D': '2.2', - 'FRG83': '2.2.1', - 'FRG83D': '2.2.1', - 'FRG83G': '2.2.2', - 'FRK76': '2.2.3', - 'FRK76C': '2.2.3', - 'GRH55': '2.3', - 'GRH78': '2.3.1', - 'GRH78C': '2.3.2', - 'GRI40': '2.3.3', - 'GRI54': '2.3.3', - 'GRJ06D': '2.3.4', - 'GRJ22': '2.3.4', - 'GRJ90': '2.3.5', - 'GRK39C': '2.3.6', - 'GRK39F': '2.3.6', - 'GWK74': '2.3.7', + CUPCAKE: '1.5', + DONUT: '1.6', + ECLAIR: '2.0', + FROYO: '2.2', + GINGERBREAD: '2.3', + DRC83: '1.6', + DRC92: '1.6', + DRD08: '1.6', + DRD20: '1.6', + DMD64: '1.6', + ESD20: '2.0', + ESD56: '2.0.1', + ERD79: '2.1', + ERE27: '2.1', + EPE54B: '2.1', + ESE81: '2.1', + EPF21B: '2.1', + FRF85B: '2.2', + FRF91: '2.2', + FRG01B: '2.2', + FRG22D: '2.2', + FRG83: '2.2.1', + FRG83D: '2.2.1', + FRG83G: '2.2.2', + FRK76: '2.2.3', + FRK76C: '2.2.3', + GRH55: '2.3', + GRH78: '2.3.1', + GRH78C: '2.3.2', + GRI40: '2.3.3', + GRI54: '2.3.3', + GRJ06D: '2.3.4', + GRJ22: '2.3.4', + GRJ90: '2.3.5', + GRK39C: '2.3.6', + GRK39F: '2.3.6', + GWK74: '2.3.7', - 'HRI39': '3.0', - 'HRI66': '3.0', - 'HWI69': '3.0', - 'HRI83': '3.0', - 'HMJ37': '3.1', - 'HTJ85B': '3.2', - 'HTK55D': '3.2.1', - 'HTK75': '3.2.1', - 'HTK75D': '3.2.1', - 'HLK75C': '3.2.2', - 'HLK75D': '3.2.2', - 'HLK75F': '3.2.4', - 'HLK75H': '3.2.6', - 'ITL41D': '4.0.1', - 'ITL41E': '4.0.1', - 'ITL41F': '4.0.1', - 'ICL53F': '4.0.2', - 'IML74K': '4.0.3', - 'IML77': '4.0.3', - 'IMM76': '4.0.4', - 'IMM76D': '4.0.4', - 'IMM76I': '4.0.4', - 'IMM76K': '4.0.4', - 'IMM76L': '4.0.4', - 'JRO03C': '4.1.1', - 'JRO03D': '4.1.1', - 'JRO03E': '4.1.1', - 'JRO03H': '4.1.1', - 'JRO03L': '4.1.1', - 'JRO03O': '4.1.1', - 'JRO03R': '4.1.1', - 'JRO03S': '4.1.1', - 'JZO54K': '4.1.2', - 'JZO54M': '4.1.2', - 'JVP15S': '4.2', // Interim build used by the Nexus 7 - 'JOP40C': '4.2', - 'JOP40D': '4.2.1', - 'JOP40F': '4.2.1', - 'JOP40G': '4.2.1', - 'JDQ39': '4.2.2', - 'JDQ39B': '4.2.2', - 'JDQ39E': '4.2.2', - 'JWR66L': '4.3', - 'JWR66N': '4.3', + HRI39: '3.0', + HRI66: '3.0', + HWI69: '3.0', + HRI83: '3.0', + HMJ37: '3.1', + HTJ85B: '3.2', + HTK55D: '3.2.1', + HTK75: '3.2.1', + HTK75D: '3.2.1', + HLK75C: '3.2.2', + HLK75D: '3.2.2', + HLK75F: '3.2.4', + HLK75H: '3.2.6', + ITL41D: '4.0.1', + ITL41E: '4.0.1', + ITL41F: '4.0.1', + ICL53F: '4.0.2', + IML74K: '4.0.3', + IML77: '4.0.3', + IMM76: '4.0.4', + IMM76D: '4.0.4', + IMM76I: '4.0.4', + IMM76K: '4.0.4', + IMM76L: '4.0.4', + JRO03C: '4.1.1', + JRO03D: '4.1.1', + JRO03E: '4.1.1', + JRO03H: '4.1.1', + JRO03L: '4.1.1', + JRO03O: '4.1.1', + JRO03R: '4.1.1', + JRO03S: '4.1.1', + JZO54K: '4.1.2', + JZO54M: '4.1.2', + JVP15S: '4.2', // Interim build used by the Nexus 7 + JOP40C: '4.2', + JOP40D: '4.2.1', + JOP40F: '4.2.1', + JOP40G: '4.2.1', + JDQ39: '4.2.2', + JDQ39B: '4.2.2', + JDQ39E: '4.2.2', + JWR66L: '4.3', + JWR66N: '4.3', 'JWR66N.S005': '4.3', // Google Play Edition - Samsung Galaxy S4 - 'JWR66V': '4.3', + JWR66V: '4.3', 'JWR66V.H10': '4.3', // Google Play Edition - HTC One 'JWR66V.S014': '4.3', // Google Play Edition - Samsung Galaxy S4 - 'JWR66Y': '4.3', + JWR66Y: '4.3', 'JWR66Y.S003': '4.3', // Google Play Edition - Samsung Galaxy S4 - 'JSR78D': '4.3', - 'JSS15J': '4.3', - 'JSS15Q': '4.3', - 'KRT16S': '4.4', - 'KRT16M': '4.4', - 'KOT49E': '4.4.1', - 'KOT49H': '4.4.2', - 'KVT49L': '4.4.2', - 'KTU84L': '4.4.3', - 'KTU84M': '4.4.3', - 'KTU84P': '4.4.4', - 'LPV79': {'value': '5.0', 'alias': 'L'}, - 'LPV81C': {'value': '5.0', 'alias': 'L'}, - 'LPX13D': {'value': '5.0', 'alias': 'L'}, - 'LRX21L': '5.0', - 'LRX21M': '5.0', - 'LRX21O': '5.0', - 'LRX21P': '5.0', - 'LRX21Q': '5.0', - 'LRX21R': '5.0', - 'LRX21T': '5.0', - 'LRX21V': '5.0', - 'LRX22C': '5.0.1', - 'LRX22G': '5.0.2', - 'LRX22L': '5.0.2', + JSR78D: '4.3', + JSS15J: '4.3', + JSS15Q: '4.3', + KRT16S: '4.4', + KRT16M: '4.4', + KOT49E: '4.4.1', + KOT49H: '4.4.2', + KVT49L: '4.4.2', + KTU84L: '4.4.3', + KTU84M: '4.4.3', + KTU84P: '4.4.4', + LPV79: { value: '5.0', alias: 'L' }, + LPV81C: { value: '5.0', alias: 'L' }, + LPX13D: { value: '5.0', alias: 'L' }, + LRX21L: '5.0', + LRX21M: '5.0', + LRX21O: '5.0', + LRX21P: '5.0', + LRX21Q: '5.0', + LRX21R: '5.0', + LRX21T: '5.0', + LRX21V: '5.0', + LRX22C: '5.0.1', + LRX22G: '5.0.2', + LRX22L: '5.0.2', 'LGZ23.S3': '5.0.2', // Sony Bravia Android TV 'LGZ23.S15': '5.0.2', // Sony Bravia Android TV 'LGZ23.S37': '5.0.2', // Sony Bravia Android TV @@ -127,15 +127,15 @@ exports.ANDROID_BUILDS = { 'LGY75.S131': '5.0.2', // Sony Bravia Android TV 'LGY75.S143': '5.0.2', // Sony Bravia Android TV 'LGY75.S147': '5.0.2', // Sony Bravia Android TV - 'LMY47D': '5.1', - 'LMY47E': '5.1', - 'LMY47I': '5.1', - 'LMY47M': '5.1', - 'LMY47O': '5.1', - 'LMY47V': '5.1.1', - 'LMY47X': '5.1.1', - 'LMY47Z': '5.1.1', - 'LMY48B': '5.1.1', + LMY47D: '5.1', + LMY47E: '5.1', + LMY47I: '5.1', + LMY47M: '5.1', + LMY47O: '5.1', + LMY47V: '5.1.1', + LMY47X: '5.1.1', + LMY47Z: '5.1.1', + LMY48B: '5.1.1', 'LMY48E.S1': '5.1.1', // Sony Bravia Android TV 'LMY48E.S39': '5.1.1', // Sony Bravia Android TV 'LMY48E.S63': '5.1.1', // Sony Bravia Android TV @@ -153,80 +153,80 @@ exports.ANDROID_BUILDS = { 'LMY48E.S195': '5.1.1', // Sony Bravia Android TV 'LMY48E.S197': '5.1.1', // Sony Bravia Android TV 'LMY48E.S223': '5.1.1', // Sony Bravia Android TV - 'LMY48G': '5.1.1', - 'LMY48I': '5.1.1', - 'LMY48J': '5.1.1', - 'LMY48M': '5.1.1', - 'LMY48N': '5.1.1', - 'LMY48P': '5.1.1', - 'LMY48T': '5.1.1', - 'LMY48U': '5.1.1', - 'LMY48W': '5.1.1', - 'LMY48X': '5.1.1', - 'LMY48Y': '5.1.1', - 'LMY48Z': '5.1.1', - 'LMY49F': '5.1.1', - 'LMY49G': '5.1.1', - 'LMY49H': '5.1.1', - 'LMY49I': '5.1.1', - 'LMY49J': '5.1.1', - 'LVY48C': '5.1.1', - 'LVY48E': '5.1.1', - 'LVY48F': '5.1.1', - 'LVY48H': '5.1.1', - 'LYZ28E': '5.1.1', - 'LYZ28J': '5.1.1', - 'LYZ28K': '5.1.1', - 'LYZ28M': '5.1.1', - 'LYZ28N': '5.1.1', - 'MPZ44Q': {'value': '6.0', 'alias': 'M'}, - 'MPZ79M': {'value': '6.0', 'alias': 'M'}, - 'MRA58K': '6.0', - 'MRA58N': '6.0', - 'MRA58U': '6.0', - 'MRA58V': '6.0', - 'MRA58X': '6.0', - 'MRA59B': '6.0', - 'MDA89D': '6.0', - 'MDA89E': '6.0', - 'MDB08I': '6.0', - 'MDB08K': '6.0', - 'MDB08L': '6.0', - 'MDB08M': '6.0', - 'MMB29N': '6.0', - 'MMB29K': '6.0.1', - 'MMB29M': '6.0.1', - 'MMB29O': '6.0.1', - 'MMB29P': '6.0.1', - 'MMB29S': '6.0.1', - 'MMB29T': '6.0.1', - 'MMB29Q': '6.0.1', - 'MMB29R': '6.0.1', - 'MMB29U': '6.0.1', - 'MMB29V': '6.0.1', - 'MMB29X': '6.0.1', - 'MHC19I': '6.0.1', - 'MHC19J': '6.0.1', - 'MHC19Q': '6.0.1', - 'MOB30D': '6.0.1', - 'MOB30G': '6.0.1', - 'MOB30H': '6.0.1', - 'MOB30I': '6.0.1', - 'MOB30J': '6.0.1', - 'MTC19T': '6.0.1', - 'MXB48J': '6.0.1', - 'MXB48K': '6.0.1', - 'MXB48T': '6.0.1', - 'MXC14G': '6.0.1', - 'MXC89F': '6.0.1', - 'M5C14J': '6.0.1', - 'NPC56P': {'value': '7.0', 'alias': 'N'}, - 'NPC56W': {'value': '7.0', 'alias': 'N'}, - 'NPC56X': {'value': '7.0', 'alias': 'N'}, - 'NPC91K': {'value': '7.0', 'alias': 'N'}, - 'NPD35K': {'value': '7.0', 'alias': 'N'}, - 'NRD21D': {'value': '7.0', 'alias': 'N'}, - 'NRD28C': {'value': '7.0', 'alias': 'N'}, + LMY48G: '5.1.1', + LMY48I: '5.1.1', + LMY48J: '5.1.1', + LMY48M: '5.1.1', + LMY48N: '5.1.1', + LMY48P: '5.1.1', + LMY48T: '5.1.1', + LMY48U: '5.1.1', + LMY48W: '5.1.1', + LMY48X: '5.1.1', + LMY48Y: '5.1.1', + LMY48Z: '5.1.1', + LMY49F: '5.1.1', + LMY49G: '5.1.1', + LMY49H: '5.1.1', + LMY49I: '5.1.1', + LMY49J: '5.1.1', + LVY48C: '5.1.1', + LVY48E: '5.1.1', + LVY48F: '5.1.1', + LVY48H: '5.1.1', + LYZ28E: '5.1.1', + LYZ28J: '5.1.1', + LYZ28K: '5.1.1', + LYZ28M: '5.1.1', + LYZ28N: '5.1.1', + MPZ44Q: { value: '6.0', alias: 'M' }, + MPZ79M: { value: '6.0', alias: 'M' }, + MRA58K: '6.0', + MRA58N: '6.0', + MRA58U: '6.0', + MRA58V: '6.0', + MRA58X: '6.0', + MRA59B: '6.0', + MDA89D: '6.0', + MDA89E: '6.0', + MDB08I: '6.0', + MDB08K: '6.0', + MDB08L: '6.0', + MDB08M: '6.0', + MMB29N: '6.0', + MMB29K: '6.0.1', + MMB29M: '6.0.1', + MMB29O: '6.0.1', + MMB29P: '6.0.1', + MMB29S: '6.0.1', + MMB29T: '6.0.1', + MMB29Q: '6.0.1', + MMB29R: '6.0.1', + MMB29U: '6.0.1', + MMB29V: '6.0.1', + MMB29X: '6.0.1', + MHC19I: '6.0.1', + MHC19J: '6.0.1', + MHC19Q: '6.0.1', + MOB30D: '6.0.1', + MOB30G: '6.0.1', + MOB30H: '6.0.1', + MOB30I: '6.0.1', + MOB30J: '6.0.1', + MTC19T: '6.0.1', + MXB48J: '6.0.1', + MXB48K: '6.0.1', + MXB48T: '6.0.1', + MXC14G: '6.0.1', + MXC89F: '6.0.1', + M5C14J: '6.0.1', + NPC56P: { value: '7.0', alias: 'N' }, + NPC56W: { value: '7.0', alias: 'N' }, + NPC56X: { value: '7.0', alias: 'N' }, + NPC91K: { value: '7.0', alias: 'N' }, + NPD35K: { value: '7.0', alias: 'N' }, + NRD21D: { value: '7.0', alias: 'N' }, + NRD28C: { value: '7.0', alias: 'N' }, }; // Source: http://source.android.com/source/build-numbers.html diff --git a/data/manufacturer-names.js b/data/manufacturer-names.js index b7f284f..50a775f 100644 --- a/data/manufacturer-names.js +++ b/data/manufacturer-names.js @@ -2,38 +2,38 @@ module.exports = { MANUFACTURERS: { GENERIC: { 'LG Electronics': 'LG', - 'LGE': 'LG', - 'TOSHIBA': 'Toshiba', - 'SAMSUNG': 'Samsung', - 'SHARP': 'Sharp', - 'SONY': 'Sony', + LGE: 'LG', + TOSHIBA: 'Toshiba', + SAMSUNG: 'Samsung', + SHARP: 'Sharp', + SONY: 'Sony', }, TELEVISION: { - 'ALDISUED': 'Aldi', - 'BANGOLUFSEN': 'Bang & Olufsen', - 'CHANGHONG': 'Changhong', - 'changhong': 'Changhong', - 'FINLUX': 'Finlux', + ALDISUED: 'Aldi', + BANGOLUFSEN: 'Bang & Olufsen', + CHANGHONG: 'Changhong', + changhong: 'Changhong', + FINLUX: 'Finlux', 'HHW HAIER': 'Haier', - 'HITACHI': 'Hitachi', - 'HYUNDAI': 'Hyundai', - 'inverto': 'Inverto', - 'LOEWE': 'Loewe', - 'MEDION': 'Medion', + HITACHI: 'Hitachi', + HYUNDAI: 'Hyundai', + inverto: 'Inverto', + LOEWE: 'Loewe', + MEDION: 'Medion', 'Nagra OpenTV': 'NAGRA', - 'PANASONIC': 'Panasonic', - 'Sagemcom_Broadband_SAS': 'Sagemcom', - 'SERAPHIC': 'Seraphic', - 'selevision': 'Selevision', - 'smart': 'Smart', - 'Sky_worth': 'Skyworth', + PANASONIC: 'Panasonic', + Sagemcom_Broadband_SAS: 'Sagemcom', + SERAPHIC: 'Seraphic', + selevision: 'Selevision', + smart: 'Smart', + Sky_worth: 'Skyworth', 'TechnoTrend Goerler': 'TechnoTrend', 'TechnoTrend Goerler/Kathrein': 'TechnoTrend', - 'TELEFUNKEN': 'Telefunken', - 'THOM': 'Thomson', - 'THOMSON': 'Thomson', - 'tv2n': 'TV2N', - 'VESTEL': 'Vestel', + TELEFUNKEN: 'Telefunken', + THOM: 'Thomson', + THOMSON: 'Thomson', + tv2n: 'TV2N', + VESTEL: 'Vestel', }, }, }; diff --git a/data/os-cfnetwork.js b/data/os-cfnetwork.js index 10cd683..1dbc98d 100644 --- a/data/os-cfnetwork.js +++ b/data/os-cfnetwork.js @@ -1,96 +1,96 @@ module.exports = { CFNetwork: { OSX: { - '1.1': {'value': '10.2'}, - '1.2.1': {'value': '10.3.2'}, - '1.2.2': {'value': '10.3.9'}, - '1.2.6': {'value': '10.3.9'}, - '128': {'value': '10.4'}, - '128.2': {'value': '10.4.2'}, - '129.5': {'value': '10.4.3'}, - '129.9': {'value': '10.4.4'}, - '129.10': {'value': '10.4.4'}, - '129.13': {'value': '10.4.6'}, - '129.16': {'value': '10.4.7'}, - '129.18': {'value': '10.4.8'}, - '129.20': {'value': '10.4.9'}, - '129.21': {'value': '10.4.10'}, - '129.22': {'value': '10.4.11'}, - '217': {'value': '10.5'}, - '220': {'value': '10.5.1'}, - '221.5': {'value': '10.5.2'}, - '330': {'value': '10.5.3'}, - '330.4': {'value': '10.5.4'}, - '339.5': {'value': '10.5.5'}, - '422.11': {'value': '10.5.6'}, - '438.12': {'value': '10.5.7'}, - '438.14': {'value': '10.5.8'}, - '454.4': {'value': '10.6.0'}, - '454.5': {'value': '10.6.2'}, - '454.9.4': {'value': '10.6.3'}, - '454.9.7': {'value': '10.6.4'}, - '454.11.5': {'value': '10.6.5'}, - '454.11.12': {'value': '10.6.7'}, - '454.12.4': {'value': '10.6.8'}, - '520.0.13': {'value': '10.7.1'}, - '520.2.5': {'value': '10.7.2'}, - '520.3.2': {'value': '10.7.3'}, - '520.4.3': {'value': '10.7.4'}, - '520.5.1': {'value': '10.7.5'}, - '596.1': {'value': '10.8.1'}, - '596.2.3': {'value': '10.8.2'}, - '596.3.3': {'value': '10.8.3'}, - '596.4.3': {'value': '10.8.4'}, - '596.5': {'value': '10.8.5'}, - '673.0.3': {'value': '10.9'}, - '673.2.1': {'value': '10.9.2'}, - '673.4': {'value': '10.9.3'}, - '720.0.9': {'value': '10.10'}, - '720.1.1': {'value': '10.10.1'}, - '720.2.4': {'value': '10.10.2'}, - '720.3.13': {'value': '10.10.3'}, - '720.4.4': {'value': '10.10.4'}, - '720.5.7': {'value': '10.10.5'}, - '760.0.5': {'value': '10.11'}, - '760.1.2': {'value': '10.11.1'}, - '760.2.6': {'value': '10.11.2'}, - '760.4.2': {'value': '10.11.4'}, - '760.5': {'value': '10.11.4'}, - '760.5.1': {'value': '10.11.5'}, + 1.1: { value: '10.2' }, + '1.2.1': { value: '10.3.2' }, + '1.2.2': { value: '10.3.9' }, + '1.2.6': { value: '10.3.9' }, + 128: { value: '10.4' }, + 128.2: { value: '10.4.2' }, + 129.5: { value: '10.4.3' }, + 129.9: { value: '10.4.4' }, + '129.10': { value: '10.4.4' }, + 129.13: { value: '10.4.6' }, + 129.16: { value: '10.4.7' }, + 129.18: { value: '10.4.8' }, + '129.20': { value: '10.4.9' }, + 129.21: { value: '10.4.10' }, + 129.22: { value: '10.4.11' }, + 217: { value: '10.5' }, + 220: { value: '10.5.1' }, + 221.5: { value: '10.5.2' }, + 330: { value: '10.5.3' }, + 330.4: { value: '10.5.4' }, + 339.5: { value: '10.5.5' }, + 422.11: { value: '10.5.6' }, + 438.12: { value: '10.5.7' }, + 438.14: { value: '10.5.8' }, + 454.4: { value: '10.6.0' }, + 454.5: { value: '10.6.2' }, + '454.9.4': { value: '10.6.3' }, + '454.9.7': { value: '10.6.4' }, + '454.11.5': { value: '10.6.5' }, + '454.11.12': { value: '10.6.7' }, + '454.12.4': { value: '10.6.8' }, + '520.0.13': { value: '10.7.1' }, + '520.2.5': { value: '10.7.2' }, + '520.3.2': { value: '10.7.3' }, + '520.4.3': { value: '10.7.4' }, + '520.5.1': { value: '10.7.5' }, + 596.1: { value: '10.8.1' }, + '596.2.3': { value: '10.8.2' }, + '596.3.3': { value: '10.8.3' }, + '596.4.3': { value: '10.8.4' }, + 596.5: { value: '10.8.5' }, + '673.0.3': { value: '10.9' }, + '673.2.1': { value: '10.9.2' }, + 673.4: { value: '10.9.3' }, + '720.0.9': { value: '10.10' }, + '720.1.1': { value: '10.10.1' }, + '720.2.4': { value: '10.10.2' }, + '720.3.13': { value: '10.10.3' }, + '720.4.4': { value: '10.10.4' }, + '720.5.7': { value: '10.10.5' }, + '760.0.5': { value: '10.11' }, + '760.1.2': { value: '10.11.1' }, + '760.2.6': { value: '10.11.2' }, + '760.4.2': { value: '10.11.4' }, + 760.5: { value: '10.11.4' }, + '760.5.1': { value: '10.11.5' }, }, IOS: { - '459': {'value': '3.1.3'}, - '467.12': {'value': '3.2'}, - '485.2': {'value': '4.0'}, - '485.10.2': {'value': '4.1'}, - '485.12.7': {'value': '4.2.1'}, - '485.12.30': {'value': '4.2.8'}, - '485.13.9': {'value': '4.3'}, - '548.0.3': {'value': '5.0'}, - '548.0.4': {'value': '5.0.1'}, - '548.1.4': {'value': '5.1'}, - '602': {'value': '6.0'}, - '609': {'value': '6.0'}, - '609.1.4': {'value': '6.1.2'}, - '671': {'value': '7.0'}, - '672.0.2': {'value': '7.0'}, - '672.0.8': {'value': '7.0.3'}, - '672.1.13': {'value': '7.1'}, - '672.1.14': {'value': '7.1.1'}, - '672.1.15': {'value': '7.1.2'}, - '711.0.6': {'value': '8.0'}, - '711.1.12': {'value': '8.1'}, - '711.1.16': {'value': '8.1.1'}, - '711.2.23': {'value': '8.2'}, - '711.3.18': {'value': '8.3'}, - '711.4.6': {'value': '8.4'}, - '711.5.6': {'value': '8.4.1'}, - '758.0.2': {'value': '9.0'}, - '758.1.6': {'value': '9.1'}, - '758.2.7': {'value': '9.2'}, - '758.2.8': {'value': '9.2'}, - '758.3.15': {'value': '9.3'}, - '758.4.3': {'value': '9.3.2'}, + 459: { value: '3.1.3' }, + 467.12: { value: '3.2' }, + 485.2: { value: '4.0' }, + '485.10.2': { value: '4.1' }, + '485.12.7': { value: '4.2.1' }, + '485.12.30': { value: '4.2.8' }, + '485.13.9': { value: '4.3' }, + '548.0.3': { value: '5.0' }, + '548.0.4': { value: '5.0.1' }, + '548.1.4': { value: '5.1' }, + 602: { value: '6.0' }, + 609: { value: '6.0' }, + '609.1.4': { value: '6.1.2' }, + 671: { value: '7.0' }, + '672.0.2': { value: '7.0' }, + '672.0.8': { value: '7.0.3' }, + '672.1.13': { value: '7.1' }, + '672.1.14': { value: '7.1.1' }, + '672.1.15': { value: '7.1.2' }, + '711.0.6': { value: '8.0' }, + '711.1.12': { value: '8.1' }, + '711.1.16': { value: '8.1.1' }, + '711.2.23': { value: '8.2' }, + '711.3.18': { value: '8.3' }, + '711.4.6': { value: '8.4' }, + '711.5.6': { value: '8.4.1' }, + '758.0.2': { value: '9.0' }, + '758.1.6': { value: '9.1' }, + '758.2.7': { value: '9.2' }, + '758.2.8': { value: '9.2' }, + '758.3.15': { value: '9.3' }, + '758.4.3': { value: '9.3.2' }, }, }, }; diff --git a/data/os-darwin.js b/data/os-darwin.js index 074a193..47d3f48 100644 --- a/data/os-darwin.js +++ b/data/os-darwin.js @@ -1,26 +1,26 @@ module.exports = { DARWIN: { OSX: { - '1': {'value': '10.0'}, - '5': {'value': '10.1'}, - '6': {'value': '10.2'}, - '7': {'value': '10.3'}, - '8': {'value': '10.4'}, - '9': {'value': '10.5'}, - '10': {'value': '10.6'}, - '11': {'value': '10.7'}, - '12': {'value': '10.8'}, - '13': {'value': '10.9'}, - '14': {'value': '10.10'}, - '15': {'value': '10.11'}, + 1: { value: '10.0' }, + 5: { value: '10.1' }, + 6: { value: '10.2' }, + 7: { value: '10.3' }, + 8: { value: '10.4' }, + 9: { value: '10.5' }, + 10: { value: '10.6' }, + 11: { value: '10.7' }, + 12: { value: '10.8' }, + 13: { value: '10.9' }, + 14: { value: '10.10' }, + 15: { value: '10.11' }, }, IOS: { - '9': {'value': '1'}, - '10': {'value': '4'}, - '11': {'value': '5'}, - '13': {'value': '6'}, - '14': {'value': '7'}, - '15': {'value': '9'}, + 9: { value: '1' }, + 10: { value: '4' }, + 11: { value: '5' }, + 13: { value: '6' }, + 14: { value: '7' }, + 15: { value: '9' }, }, }, }; diff --git a/data/profiles.js b/data/profiles.js index c8beaf0..be6de69 100644 --- a/data/profiles.js +++ b/data/profiles.js @@ -1124,43 +1124,43 @@ exports.PROFILES = { ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5020A.xml': [ 'Alcatel', - 'One Touch M\'Pop', + "One Touch M'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5020D.xml': [ 'Alcatel', - 'One Touch M\'Pop', + "One Touch M'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5020E.xml': [ 'Alcatel', - 'One Touch M\'Pop', + "One Touch M'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5020N.xml': [ 'Alcatel', - 'One Touch M\'Pop', + "One Touch M'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5020T.xml': [ 'Alcatel', - 'One Touch M\'Pop', + "One Touch M'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5020W.xml': [ 'Alcatel', - 'One Touch M\'Pop', + "One Touch M'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5020X.xml': [ 'Alcatel', - 'One Touch M\'Pop', + "One Touch M'Pop", 'Android', DeviceType.MOBILE, ], @@ -1521,31 +1521,31 @@ exports.PROFILES = { ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4030A.xml': [ 'Alcatel', - 'One Touch S\'Pop', + "One Touch S'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4030D.xml': [ 'Alcatel', - 'One Touch S\'Pop', + "One Touch S'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4030E.xml': [ 'Alcatel', - 'One Touch S\'Pop', + "One Touch S'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4030X.xml': [ 'Alcatel', - 'One Touch S\'Pop', + "One Touch S'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4030Y.xml': [ 'Alcatel', - 'One Touch S\'Pop', + "One Touch S'Pop", 'Android', DeviceType.MOBILE, ], @@ -1658,31 +1658,31 @@ exports.PROFILES = { ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4010A.xml': [ 'Alcatel', - 'One Touch T\'Pop', + "One Touch T'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4010D.xml': [ 'Alcatel', - 'One Touch T\'Pop', + "One Touch T'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4010E.xml': [ 'Alcatel', - 'One Touch T\'Pop', + "One Touch T'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4010X.xml': [ 'Alcatel', - 'One Touch T\'Pop', + "One Touch T'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_4011X.xml': [ 'Alcatel', - 'One Touch T\'Pop', + "One Touch T'Pop", 'Android', DeviceType.MOBILE, ], @@ -1696,19 +1696,19 @@ exports.PROFILES = { 'http://www-ccpp.tcl-ta.com/files/ALCATEL-OT-V670.rdf': ['Alcatel', 'One Touch V670', null, DeviceType.MOBILE], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5035D.xml': [ 'Alcatel', - 'One Touch X\'Pop', + "One Touch X'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5035E.xml': [ 'Alcatel', - 'One Touch X\'Pop', + "One Touch X'Pop", 'Android', DeviceType.MOBILE, ], 'http://www-ccpp.tcl-ta.com/files/ALCATEL_ONE_TOUCH_5035X.xml': [ 'Alcatel', - 'One Touch X\'Pop', + "One Touch X'Pop", 'Android', DeviceType.MOBILE, ], @@ -2217,8 +2217,8 @@ exports.PROFILES = { 'http://files.bq.com/uaprof/fnac_aquaris_E5_HD_KK.xml': ['bq', 'Aquaris E5 HD', 'Android', DeviceType.MOBILE], 'http://files.bq.com/uaprof/bq_aquaris_E6_KK.xml': ['bq', 'Aquaris E6', 'Android', DeviceType.MOBILE], 'http://files.bq.com/uaprof/bq_edison_3_KK.xml': ['bq', 'Edison 3', 'Android', DeviceType.TABLET], - 'http://uaprof.vtext.com/pcd/c771/c771.xml': ['Casio', 'Gz\'One Commando', 'Android', DeviceType.MOBILE], - 'http://uaprof.vtext.com/pcd/vzw/vzw.xml': ['Casio', 'Gz\'One Commando 811', 'Android', DeviceType.MOBILE], + 'http://uaprof.vtext.com/pcd/c771/c771.xml': ['Casio', "Gz'One Commando", 'Android', DeviceType.MOBILE], + 'http://uaprof.vtext.com/pcd/vzw/vzw.xml': ['Casio', "Gz'One Commando 811", 'Android', DeviceType.MOBILE], 'http://uaprof.vtext.com/pcd/vietnam/vietnam.xml': ['Casio', 'GzOne CA201', 'Android', DeviceType.MOBILE], 'http://uaprof.vtext.com/pcd/c811/c811.xml': ['Casio', 'GzOne Commando 811', 'Android', DeviceType.MOBILE], 'http://www.catphones.com/uaprof/Cat_B10-2_UAprofile.xml': ['Cat', 'B15', 'Android', DeviceType.MOBILE], @@ -3747,7 +3747,7 @@ exports.PROFILES = { 'Android', DeviceType.MOBILE, ], - 'http://device.sprintpcs.com/HTC/HTCPN702-SPRINT/benny\'s 43.rdf': ['HTC', 'One', 'Android', DeviceType.MOBILE], + "http://device.sprintpcs.com/HTC/HTCPN702-SPRINT/benny's 43.rdf": ['HTC', 'One', 'Android', DeviceType.MOBILE], 'http://device.sprintpcs.com/HTC/HTCPN702-SPRINT/BSC Tranquil One RLS42.rdf': [ 'HTC', 'One', @@ -7725,12 +7725,8 @@ exports.PROFILES = { 'http://wap1.huawei.com/uaprof/LUA-U03_UAProfile.xml': ['Huawei', 'Y3 II', 'Android', DeviceType.MOBILE], 'http://wap1.huawei.com/uaprof/LUA-U22_UAProfile.xml': ['Huawei', 'Y3 II', 'Android', DeviceType.MOBILE], 'http://wap1.huawei.com/uaprof/LUA-U23_UAProfile.xml': ['Huawei', 'Y3 II', 'Android', DeviceType.MOBILE], - 'http://wap1.huawei.com/uaprof/HUAWEI_CANCUN_UAProfile.xml,http://wap1.huawei.com/uaprof/HUAWEI_CUN_L_UAProfile.xml': [ - 'Huawei', - 'Y5 II', - 'Android', - DeviceType.MOBILE, - ], + 'http://wap1.huawei.com/uaprof/HUAWEI_CANCUN_UAProfile.xml,http://wap1.huawei.com/uaprof/HUAWEI_CUN_L_UAProfile.xml': + ['Huawei', 'Y5 II', 'Android', DeviceType.MOBILE], 'http://wap1.huawei.com/uaprof/HUAWEI_CUN_L_UAProfile.xml': ['Huawei', 'Y5 II', 'Android', DeviceType.MOBILE], 'http://wap1.huawei.com/uaprof/HUAWEI_CUN_U_UAProfile.xml': ['Huawei', 'Y5 II', 'Android', DeviceType.MOBILE], 'http://wap1.huawei.com/uaprof/HW_SCC-U21_UAProfile.xml': ['Huawei', 'Y6', 'Android', DeviceType.MOBILE], @@ -19903,12 +19899,8 @@ exports.PROFILES = { ], 'http://wap.samsungmobile.com/uaprof/SM-G928F.xml': ['Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType.MOBILE], 'http://wap.samsungmobile.com/uaprof/SM-G928G.xml': ['Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType.MOBILE], - 'Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G928P Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/5.0 Chrome/51.0.2704.106 Mobile Safari/537.36': [ - 'Samsung', - 'Galaxy S6 Edge+', - 'Android', - DeviceType.MOBILE, - ], + 'Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G928P Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/5.0 Chrome/51.0.2704.106 Mobile Safari/537.36': + ['Samsung', 'Galaxy S6 Edge+', 'Android', DeviceType.MOBILE], 'http://wap.samsungmobile.com/uaprof/SC-05G.xml': ['Samsung', 'GALAXY S6 SC-05G', 'Android', DeviceType.MOBILE], 'http://device.sprintpcs.com/Samsung/SM-G930P-BOOST/PH7.rdf': [ 'Samsung', @@ -23198,12 +23190,8 @@ exports.PROFILES = { 'http://www-ccpp.tcl-ta.com/files/TCL_Y710.xml': ['TCL', 'Y710', 'Android', DeviceType.MOBILE], 'http://www-ccpp.tcl-ta.com/files/TCL_Y900.xml': ['TCL', 'Y900', 'Android', DeviceType.MOBILE], 'http://www-ccpp.tcl-ta.com/files/TCL_Y910.xml': ['TCL', 'Y910', 'Android', DeviceType.MOBILE], - 'Mozilla/5.0 (Linux; U; Android 4.4; zh-cn;TECNO L7 Build/ AppleWebKit/534.30 (KHTML, like Gecko) Version/4.4 Mobile Safari/534.30': [ - 'Tecno', - 'L6', - 'Android', - DeviceType.MOBILE, - ], + 'Mozilla/5.0 (Linux; U; Android 4.4; zh-cn;TECNO L7 Build/ AppleWebKit/534.30 (KHTML, like Gecko) Version/4.4 Mobile Safari/534.30': + ['Tecno', 'L6', 'Android', DeviceType.MOBILE], 'http://www.1066.cn/uaprof/prof/Tecno/Tecno_N7.xml': ['TECNO', 'N7', 'Android', DeviceType.MOBILE], 'http://www-ccpp.tcl-ta.com/file/ALCATEL_one_touch_7018.xml': ['Tecno', 'P3', 'Android', DeviceType.MOBILE], 'http://www.zte.com.cn/mobile/uaprof/Preo_Teknosa_P1.xml': ['Teknosa', 'Preo P1', 'Android', DeviceType.MOBILE], @@ -23331,7 +23319,7 @@ exports.PROFILES = { null, DeviceType.MOBILE, ], - 'http://uaprof.vtext.com/utstar/gz1s/gz1sv1.xml': ['UTStarcom', 'G\'zOne Type-S', null, DeviceType.MOBILE], + 'http://uaprof.vtext.com/utstar/gz1s/gz1sv1.xml': ['UTStarcom', "G'zOne Type-S", null, DeviceType.MOBILE], 'http://www.bellwave.co.uk/uaprof/UAProfile_GPRS778.xml': ['UTStarcom', 'GPRS778', null, DeviceType.MOBILE], 'http://pcdgsmlab.com/gpt380/GPT380.xml': ['UTstarcom', 'GPT380', null, DeviceType.MOBILE], 'http://uaprof.utstar.co.kr/uaprof/gsm/UTSTARCOM-GTX75.xml': ['UTStarcom', 'GTX75', null, DeviceType.MOBILE], diff --git a/package-lock.json b/package-lock.json index f799331..90ea8ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3808 +1,4433 @@ { "name": "which-browser", - "version": "0.7.0", - "lockfileVersion": 1, + "version": "0.7.1", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "packages": { + "": { + "name": "which-browser", + "version": "0.7.1", + "license": "MIT", + "devDependencies": { + "@hapi/code": "^9.0.3", + "@hapi/lab": "^25.1.3", + "eslint": "^8.52.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.1", + "husky": "^8.0.0", + "lint-staged": "^15.0.2", + "nyc": "^15.1.0", + "prettier": "^3.0.3", + "request": "^2.88.2", + "sinon": "^17.0.0", + "yamljs": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", + "integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", + "dev": true, + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/template/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/template/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@hapi/boom": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-10.0.1.tgz", + "integrity": "sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@hapi/bossy": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@hapi/bossy/-/bossy-6.0.1.tgz", + "integrity": "sha512-FDccJWwjorRgnbYfRGAweq1QU3kQqTeGJNY0SwWssMo+L2CXRylifQ9VcYOz2yO2rtB/wtMe/Cyow2t7pcBs5g==", + "dev": true, + "dependencies": { + "@hapi/boom": "^10.0.1", + "@hapi/bounce": "^3.0.1", + "@hapi/bourne": "^3.0.0", + "@hapi/hoek": "^11.0.2", + "@hapi/validate": "^2.0.1" + } + }, + "node_modules/@hapi/bounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@hapi/bounce/-/bounce-3.0.1.tgz", + "integrity": "sha512-G+/Pp9c1Ha4FDP+3Sy/Xwg2O4Ahaw3lIZFSX+BL4uWi64CmiETuZPxhKDUD4xBMOUZbBlzvO8HjiK8ePnhBadA==", + "dev": true, + "dependencies": { + "@hapi/boom": "^10.0.1", + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@hapi/bourne": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-3.0.0.tgz", + "integrity": "sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==", + "dev": true + }, + "node_modules/@hapi/code": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@hapi/code/-/code-9.0.3.tgz", + "integrity": "sha512-g50b7qz861Xfnt1NWtcba1zVxlHLPDJh/4ys6pva6jMmQgbTDLgAkbORDHYbVSA7mYxZ2cHZ2n7ZeFb5j/ZhQw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@hapi/eslint-plugin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@hapi/eslint-plugin/-/eslint-plugin-6.0.0.tgz", + "integrity": "sha512-6eN1fnBO742nTTSpQtYB35aFGAT9I7r4u2v/+R2c9ToYTQp4QBoPOBA5R3+C7+Az3I0ugs+lTIqAsMPDLpsRAg==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.14.3", + "@babel/eslint-parser": "^7.14.3" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@babel/eslint-parser": { + "optional": true + } + } + }, + "node_modules/@hapi/hoek": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.2.tgz", + "integrity": "sha512-aKmlCO57XFZ26wso4rJsW4oTUnrgTFw2jh3io7CAtO9w4UltBNwRXvXIVzzyfkaaLRo3nluP/19msA8vDUUuKw==", + "dev": true + }, + "node_modules/@hapi/lab": { + "version": "25.1.3", + "resolved": "https://registry.npmjs.org/@hapi/lab/-/lab-25.1.3.tgz", + "integrity": "sha512-WRvcRcCTUmZGSFue9z6iz8RGyY8ihZHOu1PpPG7YpmLsfKvViIiw5fOjYBMsVe+HRLZXjRRH4lcKWlVYzcnM8Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.0", + "@hapi/bossy": "^6.0.0", + "@hapi/eslint-plugin": "^6.0.0", + "@hapi/hoek": "^11.0.2", + "diff": "^5.0.0", + "eslint": "8.x.x", + "find-rc": "4.x.x", + "globby": "^11.1.0", + "handlebars": "4.x.x", + "mo-walk": "^1.2.0", + "seedrandom": "3.x.x", + "source-map": "0.7.x", + "source-map-support": "0.5.x", + "supports-color": "^8.1.1", + "will-call": "1.x.x" + }, + "bin": { + "lab": "bin/lab" + }, + "peerDependencies": { + "@hapi/eslint-plugin": "^6.0.0", + "typescript": ">=3.6.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@hapi/lab/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@hapi/lab/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@hapi/lab/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@hapi/lab/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@hapi/lab/node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "dev": true + }, + "node_modules/@hapi/lab/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@hapi/lab/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@hapi/validate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/validate/-/validate-2.0.1.tgz", + "integrity": "sha512-NZmXRnrSLK8MQ9y/CMqE9WSspgB9xA41/LlYR0k967aSZebWr4yNrpxIbov12ICwKy4APSlWXZga9jN5p6puPA==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^11.0.2", + "@hapi/topo": "^6.0.1" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aggregate-error/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" + "engines": { + "node": "*" } }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, - "requires": { - "any-observable": "^0.3.0" + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true + "node_modules/caniuse-lite": { + "version": "1.0.30001558", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001558.tgz", + "integrity": "sha512-/Et7DwLqpjS47JPEcz6VnxU9PwcIdVi0ciLXRWBQdj1XFye68pSQYpV0QtPTfUKWuOaEig+/Vez2l74eDc1tPQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "requires": { - "acorn": "^3.0.4" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, - "requires": { - "debug": "4" + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "optional": true + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "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 + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "sprintf-js": "~1.0.2" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", - "dev": true + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "node_modules/color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "dev": true, + "dependencies": { + "color-name": "1.1.1" + } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "node_modules/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", "dev": true }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "requires": { - "array-uniq": "^1.0.1" + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } }, - "arrify": { + "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "node_modules/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 }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "node_modules/cross-spawn/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "node_modules/cross-spawn/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "node_modules/cross-spawn/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "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=", + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "dependencies": { + "assert-plus": "^1.0.0" }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "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 + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } }, - "bossy": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bossy/-/bossy-3.0.4.tgz", - "integrity": "sha1-+a6fJugbQaMY9O4Ng2huSlwlB7k=", + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, - "requires": { - "hoek": "4.x.x", - "joi": "10.x.x" - }, "dependencies": { - "isemail": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", - "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=", - "dev": true - }, - "joi": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", - "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==", - "dev": true, - "requires": { - "hoek": "4.x.x", - "isemail": "2.x.x", - "items": "2.x.x", - "topo": "2.x.x" - } - } + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "requires": { - "callsites": "^2.0.0" - }, "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { - "callsites": "^0.2.0" - }, "dependencies": { - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - } + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "node_modules/electron-to-chromium": { + "version": "1.4.570", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.570.tgz", + "integrity": "sha512-5GxH0PLSIfXKOUMMHMCT4M0olwj1WwAxsQHzVW5Vh3kbsvGw8b4k7LHQmTLC2aRhsgFzrF57XJomca4XLc/WHA==", "dev": true }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "node_modules/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, - "requires": { - "restore-cursor": "^2.0.0" + "engines": { + "node": ">=0.8.0" } }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } + "node_modules/eslint": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.52.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "codacy-coverage": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", - "integrity": "sha512-A0ats3/gZtOw76muu++HZ6QrInztWjjLefkLJmmBpjPfyn6nNwNLoApmGmj3F3dfgl2+o6u5GwPnUBkKdfKXTQ==", + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", "dev": true, - "requires": { - "bluebird": "^3.5.x", - "commander": "^2.x", - "jacoco-parse": "^2.x", - "joi": "^13.x", - "lcov-parse": "^1.x", - "lodash": "^4.17.4", - "log-driver": "^1.x", - "request": "^2.88.0", - "request-promise": "^4.x" + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "code": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/code/-/code-4.1.0.tgz", - "integrity": "sha1-IJrRHQWvigwceq9pTZ+k0sfZW4U=", + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, - "requires": { - "hoek": "4.x.x" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codecov": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz", - "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==", + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", "dev": true, - "requires": { - "argv": "0.0.2", - "ignore-walk": "3.0.3", - "js-yaml": "3.13.1", - "teeny-request": "6.0.1", - "urlgrey": "0.4.4" + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "color-name": "1.1.1" + "engines": { + "node": ">=4.0" } }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "requires": { - "delayed-stream": "~1.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", - "dev": true + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "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=", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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=", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/eslint/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, - "requires": { - "assert-plus": "^1.0.0" + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "node_modules/eslint/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "engines": { + "node": ">=8" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "requires": { - "esutils": "^2.0.2" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "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.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - } + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, "dependencies": { - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "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" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - } + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-config-google": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.8.1.tgz", - "integrity": "sha512-pVRvIPElH6JivuOsvnMKIWhX3JCJNOZnY7f0G5dX43ha4ZL4KI7P2dOiPqfD+Pkft1TJSbm7SuTmEx0SpvFCxQ==", - "dev": true + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "eslint-config-hapi": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-hapi/-/eslint-config-hapi-10.1.0.tgz", - "integrity": "sha512-tAUedyvZla1qKt6jhOx7mj5tYDVCwdSyImpEK7wk/A/atKUjg18aHUK6Q6qWWM6rq21I1F/A8JAhIpkk0SvFMQ==", - "dev": true + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "eslint-plugin-hapi": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-hapi/-/eslint-plugin-hapi-4.1.0.tgz", - "integrity": "sha512-z1yUoSWArx6pXaC0FoWRFpqjbHn8QWonJiTVhJmiC14jOAT7FZKdKWCkhM4jQrgrkEK9YEv3p2HuzSf5dtWmuQ==", + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "hapi-capitalize-modules": "1.x.x", - "hapi-for-you": "1.x.x", - "hapi-no-var": "1.x.x", - "hapi-scope-start": "2.x.x", - "no-arrowception": "1.x.x" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { - "eslint-visitor-keys": "^1.0.0" + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "estraverse": "^4.0.0" + "engines": { + "node": ">=4.0" } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "estraverse": "^4.1.0" + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "extend": { + "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "extsprintf": { + "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, - "fast-json-stable-stringify": { + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "dependencies": { + "reusify": "^1.0.4" } }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "find-rc": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/find-rc/-/find-rc-3.0.1.tgz", - "integrity": "sha1-VKQXg3DxC8k3H6jRssKAmir6DM4=", + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-rc": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/find-rc/-/find-rc-4.0.1.tgz", + "integrity": "sha512-YEox27Ie95/zoqkxm6BYSPguJsvYz9d9G1YuaNKhxjSgZbjMC9q5blmvbL4+Ail8yacQIE0OObhDb+ZwvfJafw==", "dev": true }, - "find-up": { + "node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "requires": { + "dependencies": { "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "node_modules/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" } }, - "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "node_modules/flat-cache/node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", - "dev": true + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } }, - "forever-agent": { + "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } }, - "form-data": { + "node_modules/form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, - "requires": { + "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" } }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, - "requires": { - "samsam": "1.x" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, - "requires": { - "map-cache": "^0.2.2" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "g-status": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", - "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "requires": { - "arrify": "^1.0.1", - "matcher": "^1.0.0", - "simple-git": "^1.85.0" + "engines": { + "node": ">=6.9.0" } }, - "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", - "dev": true - }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "requires": { - "pump": "^3.0.0" + "engines": { + "node": ">=8.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "getpass": { + "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, - "requires": { + "dependencies": { "assert-plus": "^1.0.0" } }, - "glob": { + "node_modules/glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "globals": { + "node_modules/globals": { "version": "11.10.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "engines": { + "node": ">=4" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "handlebars": { + "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", - "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "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 - } + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "hapi-capitalize-modules": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/hapi-capitalize-modules/-/hapi-capitalize-modules-1.1.6.tgz", - "integrity": "sha1-eZEXFBXhXmqjIx5k3ac8gUZmUxg=", - "dev": true - }, - "hapi-for-you": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hapi-for-you/-/hapi-for-you-1.0.0.tgz", - "integrity": "sha1-02L77o172pwseAHiB+WlzRoLans=", - "dev": true - }, - "hapi-no-var": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hapi-no-var/-/hapi-no-var-1.0.1.tgz", - "integrity": "sha512-kk2xyyTzI+eQ/oA1rO4eVdCpYsrPHVERHa6+mTHD08XXFLaAkkaEs6reMg1VyqGh2o5xPt//DO4EhCacLx/cRA==", - "dev": true - }, - "hapi-scope-start": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/hapi-scope-start/-/hapi-scope-start-2.1.1.tgz", - "integrity": "sha1-dJWnJv5yt7yo3izcwdh82M5qtPI=", - "dev": true + "node_modules/handlebars/node_modules/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, + "engines": { + "node": ">=0.10.0" + } }, - "har-schema": { + "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } + "engines": { + "node": ">=4" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "requires": { - "ansi-regex": "^2.0.0" + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "engines": { + "node": ">=4" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "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.5" - } - } + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "engines": { + "node": ">=8" } }, - "http-signature": { + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, - "requires": { + "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - }, - "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - } - } - }, - "husky": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-2.4.1.tgz", - "integrity": "sha512-ZRwMWHr7QruR22dQ5l3rEGXQ7rAQYsJYqaeCd+NyOsIFczAtqaApZQP3P4HwLZjCtFbm3SUNYoKuoBXX3AYYfw==", - "dev": true, - "requires": { - "cosmiconfig": "^5.2.0", - "execa": "^1.0.0", - "find-up": "^3.0.0", - "get-stdin": "^7.0.0", - "is-ci": "^2.0.0", - "pkg-dir": "^4.1.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^5.1.1", - "run-node": "^1.0.0", - "slash": "^3.0.0" }, - "dependencies": { - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "engines": { + "node": ">=16.17.0" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, - "requires": { - "minimatch": "^3.0.4" + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" } }, - "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "engines": { + "node": ">= 4" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ip-regex": { + "node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-3.0.0.tgz", - "integrity": "sha512-T8wDtjy+Qf2TAPDQmBp0eGKJ8GavlWlUnamr3wRn6vvdZlKVuJXXMlSncYFRYgVHOM3If5NR1H4+OvVQU9Idvg==", - "dev": true + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "engines": { + "node": ">=0.10.0" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, - "requires": { - "ci-info": "^2.0.0" + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "engines": { + "node": ">=0.12.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, - "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 + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-fullwidth-code-point": { + "node_modules/isexe": { "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=", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "engines": { + "node": ">=8" } }, - "is-number": { + "node_modules/istanbul-lib-hook": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, - "requires": { - "symbol-observable": "^1.1.0" + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "requires": { - "is-path-inside": "^1.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, - "requires": { - "path-is-inside": "^1.0.1" + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/istanbul-lib-processinfo/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { - "isobject": "^3.0.1" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "requires": { - "punycode": "2.x.x" + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "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" - } - } + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" } }, - "items": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", - "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=", - "dev": true - }, - "jacoco-parse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jacoco-parse/-/jacoco-parse-2.0.0.tgz", - "integrity": "sha512-bKneBFwHF+afsH1ByniUyjDCwiYhb2RYk7aovcNgOKqbayVgDQ1U9h5Fy/PMGI9/iJwIuc3yqpZvEtqY6s81lQ==", + "node_modules/istanbul-lib-source-maps/node_modules/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, - "requires": { - "mocha": "^5.2.0", - "xml2js": "^0.4.9" + "engines": { + "node": ">=0.10.0" } }, - "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "requires": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - }, "dependencies": { - "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", - "dev": true - }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "dev": true, - "requires": { - "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", - "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==", - "dev": true - } - } - } + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, - "requires": { + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsbn": { + "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "requires": { - "jsonify": "~0.0.0" + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" } }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "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.5" - } - }, - "lab": { - "version": "14.3.4", - "resolved": "https://registry.npmjs.org/lab/-/lab-14.3.4.tgz", - "integrity": "sha512-IFnuYVRd6CtnFTFgUbjPCFrrCIked5BvGH/dX+/h+6pi3IrQrK21JsKy/J1CshEm6sMe980+oswtK8lZCusHSA==", - "dev": true, - "requires": { - "bossy": "3.x.x", - "code": "4.1.x", - "diff": "3.5.x", - "eslint": "4.19.x", - "eslint-config-hapi": "10.x.x", - "eslint-plugin-hapi": "4.x.x", - "espree": "3.5.x", - "find-rc": "3.0.x", - "handlebars": "4.x.x", - "hoek": "4.x.x", - "items": "2.x.x", - "json-stable-stringify": "1.x.x", - "json-stringify-safe": "5.x.x", - "mkdirp": "0.5.x", - "seedrandom": "2.4.x", - "source-map": "0.6.x", - "source-map-support": "0.4.x", - "supports-color": "4.4.x" - }, - "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 - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "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 - }, - "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" - } - }, - "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" - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - } - } + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lint-staged": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", - "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.2.0", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "del": "^3.0.0", - "execa": "^1.0.0", - "g-status": "^2.0.2", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "listr": "^0.14.2", - "listr-update-renderer": "^0.5.0", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.2", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2", - "yup": "^0.27.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "dev": true, - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - } + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" } }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "node_modules/lint-staged": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", + "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", "dev": true, - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "2.1.0", + "listr2": "7.0.2", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.3" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/listr2": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", + "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=16.0.0" } }, - "locate-path": { + "node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "requires": { + "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, - "requires": { - "chalk": "^2.0.1" - }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "dependencies": { + "yallist": "^3.0.2" } }, - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.4" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "bin": { + "semver": "bin/semver.js" } }, - "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "requires": { - "mime-db": "~1.35.0" + "engines": { + "node": ">= 8" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "requires": { - "brace-expansion": "^1.1.7" + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "requires": { - "minimist": "0.0.8" + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "engines": { + "node": ">=12" }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "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_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "node_modules/mo-walk": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mo-walk/-/mo-walk-1.2.0.tgz", + "integrity": "sha512-rat9d/EMjr08N56/u2MwMaykb/bGuByYmTgG8eJIJbUxPtSuoW76el6Tm1+cUqY0lmhuss4IIO3x2lWLojmRTA==", + "dev": true, + "dependencies": { + "pkg-up": "3.x.x" + }, + "engines": { + "node": ">=12" } }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "node_modules/nise": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz", + "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^2.0.0", + "@sinonjs/fake-timers": "^10.0.2", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } }, - "no-arrowception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/no-arrowception/-/no-arrowception-1.0.0.tgz", - "integrity": "sha1-W/PpXrnEG1c4SoBTM9qjtzTuMno=", + "node_modules/nise/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, - "requires": { - "whatwg-url": "^5.0.0" + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "requires": { - "abbrev": "1" + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } + "node_modules/nyc/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "node_modules/nyc/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { - "which": "^1.2.10" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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=", + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "requires": { - "path-key": "^2.0.0" + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "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 + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "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 + "node_modules/nyc/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/nyc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { - "isobject": "^3.0.0" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "requires": { - "isobject": "^3.0.1" + "engines": { + "node": "*" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "requires": { - "mimic-fn": "^1.0.0" + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "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": { + "node_modules/p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "p-locate": { + "node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "requires": { + "dependencies": { "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { - "callsites": "^3.0.0" + "engines": { + "node": ">=6" } }, - "parse-json": { + "node_modules/package-hash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "path-exists": { + "node_modules/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 + "dev": true, + "engines": { + "node": ">=4" + } }, - "path-is-absolute": { + "node_modules/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 + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "dependencies": { + "isarray": "0.0.1" + } }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "performance-now": { + "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, - "requires": { - "pinkie": "^2.0.0" + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "requires": { + "dependencies": { "find-up": "^4.0.0" }, - "dependencies": { - "find-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz", - "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==", - "dev": true, - "requires": { - "locate-path": "^5.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } + "engines": { + "node": ">=8" } }, - "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz", + "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==", "dev": true, - "requires": { - "semver-compare": "^1.0.0" + "dependencies": { + "locate-path": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } }, - "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", - "dev": true + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", - "dev": true + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } }, - "psl": { + "node_modules/psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { + "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "qs": { + "node_modules/qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "read-pkg": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", - "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^4.0.0", - "type-fest": "^0.4.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "engines": { + "node": ">=0.6" } }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, - "requires": { + "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", @@ -3810,7 +4435,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -3820,526 +4445,451 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, - "dependencies": { - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } + "engines": { + "node": ">= 6" } }, - "request-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", - "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "engines": { + "node": ">=0.10.0" } }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "requires": { - "lodash": "^4.13.1" + "engines": { + "node": ">=4" } }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", "dev": true, - "requires": { - "glob": "^7.1.3" + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "node_modules/run-applescript/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "requires": { - "is-promise": "^2.1.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "requires": { - "rx-lite": "*" + "engines": { + "node": ">=6" } }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "requires": { - "tslib": "^1.9.0" + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "safe-buffer": { + "node_modules/run-applescript/node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/run-applescript/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "requires": { - "ret": "~0.1.10" + "engines": { + "node": ">=8" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "samsam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", - "dev": true + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "node_modules/sinon": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.0.tgz", + "integrity": "sha512-p4lJiYKBoOEVUxxVIC9H1MM2znG1/c8gud++I2BauJA5hsz7hHsst35eurNWXTusBsIq66FzOQbZ/uMdpvbPIQ==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.1.0", + "nise": "^5.1.5", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/sinon/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, - "requires": { - "shebang-regex": "^1.0.0" + "engines": { + "node": ">=0.3.1" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-git": { - "version": "1.113.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.113.0.tgz", - "integrity": "sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g==", + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "debug": "^4.0.1" + "engines": { + "node": ">=8" } }, - "sinon": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", - "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==", + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "diff": "^3.1.0", - "formatio": "1.2.0", - "lolex": "^1.6.0", - "native-promise-only": "^0.8.1", - "path-to-regexp": "^1.7.0", - "samsam": "^1.1.3", - "text-encoding": "0.6.4", - "type-detect": "^4.0.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "dev": true, + "engines": { + "node": ">=8" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "requires": { - "kind-of": "^3.2.0" + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "node_modules/source-map-support/node_modules/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, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "engines": { + "node": ">=0.10.0" } }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "requires": { - "source-map": "^0.5.6" - }, "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 - } + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "node_modules/spawn-wrap/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "node_modules/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { - "extend-shallow": "^3.0.0" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, - "requires": { + "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", @@ -4349,643 +4899,548 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" } }, - "staged-git-files": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", - "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" } }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "requires": { - "stubs": "^3.0.0" + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", + "node_modules/string-width/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "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=", - "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" - } - } + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=8" } }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", "dev": true, - "requires": { - "ansi-regex": "^2.0.0" + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "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": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", - "dev": true - }, - "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 - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - }, - "synchronous-promise": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.9.tgz", - "integrity": "sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg==", - "dev": true - }, - "table": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz", - "integrity": "sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==", - "dev": true, - "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "teeny-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", - "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^4.0.0", - "node-fetch": "^2.2.0", - "stream-events": "^1.0.5", - "uuid": "^3.3.2" + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "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 - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "engines": { + "node": ">=4" } }, - "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { - "hoek": "4.x.x" + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", - "dev": true - }, - "tough-cookie": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.0.tgz", - "integrity": "sha512-LHMvg+RBP/mAVNqVbOX8t+iJ+tqhBA/t49DuI7+IDAWHrASnesqSu1vWbKB7UrE2yk+HMFUBMadRGMkB4VCfog==", + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, - "requires": { - "ip-regex": "^3.0.0", + "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "tunnel-agent": { + "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "tweetnacl": { + "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, - "type-detect": { + "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } }, - "uglify-js": { + "node_modules/uglify-js": { "version": "3.10.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.3.tgz", "integrity": "sha512-Lh00i69Uf6G74mvYpHCI9KVVXLcHW/xu79YTvH7Mkc9zyKUeSPz0owW0dguj0Scavns3ZOh3wY63J0Zb97Za2g==", "dev": true, - "optional": true + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "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" - } - } - } + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "urlgrey": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "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 - }, - "uuid": { + "node_modules/uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "bin": { + "uuid": "bin/uuid" } }, - "verror": { + "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, - "requires": { + "engines": [ + "node >=0.6.0" + ], + "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "node_modules/will-call": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/will-call/-/will-call-1.0.1.tgz", + "integrity": "sha512-1hEeV8SfBYhNRc/bNXeQfyUBX8Dl9SCYME3qXh99iZP9wJcnhnlBsoBw8Y0lXVZ3YuPsoxImTzBiol1ouNR/hg==", + "dev": true }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "requires": { - "string-width": "^2.1.1", - "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=", - "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" - } - } + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yamljs": { + "node_modules/yaml": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yamljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", "dev": true, - "requires": { + "dependencies": { "argparse": "^1.0.7", "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "yup": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", - "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "fn-name": "~2.0.1", - "lodash": "^4.17.11", - "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", - "toposort": "^2.0.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/package.json b/package.json index 295226f..75c059b 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,12 @@ { "name": "which-browser", - "version": "0.7.0", + "version": "0.7.1", "description": "Browser sniffing tool and UA parser. Browser sniffing gone too far — A useragent parser library for JavaScript", "main": "src/Parser.js", "types": "which-browser.d.ts", "scripts": { - "pre-commit": "lint-staged", - "test": "lab -a code -v", - "test-and-coverage": "istanbul cover lab --report lcovonly -- -a code -v --timeout 10000 -l", + "test": "lab -a @hapi/code -v", + "test-and-coverage": "nyc lab -a @hapi/code -v --timeout 10000 -l", "lint": "eslint --quiet .", "update-applications": "node ./bin/update-applications", "update-browser-ids": "node ./bin/update-browser-ids", @@ -16,7 +15,8 @@ "update-models": "node ./bin/update-models", "update-profiles": "node ./bin/update-profiles", "update-regexes": "node ./bin/update-regexes", - "update-all": "npm run update-applications && npm run update-browser-ids && npm run update-chrome && npm run update-indices && npm run update-models && npm run update-profiles && npm run update-regexes" + "update-all": "npm run update-applications && npm run update-browser-ids && npm run update-chrome && npm run update-indices && npm run update-models && npm run update-profiles && npm run update-regexes", + "prepare": "husky install" }, "engines": { "node": ">=6.0.0" @@ -38,30 +38,29 @@ "author": "Simone Mariotti", "license": "MIT", "devDependencies": { - "codacy-coverage": "^3.4.0", - "code": "^4.1.0", - "codecov": "^3.1.0", - "eslint": "^5.12.1", - "eslint-config-google": "^0.8.0", - "husky": "^2.4.1", - "istanbul": "^0.4.5", - "lab": "^14.3.2", - "lint-staged": "^8.1.0", - "prettier": "^1.11.1", - "request": "^2.83.0", - "sinon": "^2.4.1", + "@hapi/code": "^9.0.3", + "@hapi/lab": "^25.1.3", + "eslint": "^8.52.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.1", + "husky": "^8.0.0", + "lint-staged": "^15.0.2", + "nyc": "^15.1.0", + "prettier": "^3.0.3", + "request": "^2.88.2", + "sinon": "^17.0.0", "yamljs": "^0.3.0" }, "lint-staged": { "*.js": [ - "prettier --print-width 117 --single-quote --write", - "eslint --fix", - "git add" + "prettier --write", + "eslint --fix" ] }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } + "prettier": { + "singleQuote": true, + "printWidth": 117, + "trailingComma": "es5" } } diff --git a/src/Analyser.js b/src/Analyser.js index c84503d..2592afe 100644 --- a/src/Analyser.js +++ b/src/Analyser.js @@ -1,5 +1,5 @@ const Main = require('./model/Main'); -const {Camouflage, Corrections, Derive, Header} = require('./Analyser/'); +const { Camouflage, Corrections, Derive, Header } = require('./Analyser/'); /** * Class that parse the user-agent diff --git a/src/Analyser/Camouflage.js b/src/Analyser/Camouflage.js index fb2c3fc..34f62d9 100644 --- a/src/Analyser/Camouflage.js +++ b/src/Analyser/Camouflage.js @@ -118,7 +118,7 @@ class Camouflage { if (this.data.isOs('Windows')) { this.data.os.reset(); } - this.data.engine.reset({name: 'Gecko'}); + this.data.engine.reset({ name: 'Gecko' }); this.data.device.type = 'mobile'; } let match; @@ -126,7 +126,7 @@ class Camouflage { if ((match = /UBrowser\/?([0-9.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'UC Browser'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = null; } @@ -168,7 +168,7 @@ class Camouflage { /* If it claims not to be Webkit, but it is probably Webkit running camouflage mode */ if (this.options.engine & Constants.engineType.WEBKIT) { this.data.features.push('webkit'); - if (this.data.engine.name && (this.data.engine.name !== 'Blink' && this.data.engine.name !== 'Webkit')) { + if (this.data.engine.name && this.data.engine.name !== 'Blink' && this.data.engine.name !== 'Webkit') { this.data.camouflage = true; } if (this.data.browser.name && this.data.browser.name === 'Internet Explorer') { @@ -209,9 +209,9 @@ class Camouflage { this.data.features.push('chrome'); if ( this.data.engine.name && - (this.data.engine.name !== 'EdgeHTML' && - this.data.engine.name !== 'Blink' && - this.data.engine.name !== 'Webkit') + this.data.engine.name !== 'EdgeHTML' && + this.data.engine.name !== 'Blink' && + this.data.engine.name !== 'Webkit' ) { this.data.camouflage = true; } diff --git a/src/Analyser/Derive.js b/src/Analyser/Derive.js index 9f886e6..3868b83 100644 --- a/src/Analyser/Derive.js +++ b/src/Analyser/Derive.js @@ -73,10 +73,10 @@ class Derive { this.data.engine.reset(); } if (version >= 5 && version < 5.5 && !this.data.isEngine('WebCore')) { - this.data.engine.reset({name: 'WebCore'}); + this.data.engine.reset({ name: 'WebCore' }); } if (version >= 5.5 && !this.data.isEngine('WebKit')) { - this.data.engine.reset({name: 'WebKit'}); + this.data.engine.reset({ name: 'WebKit' }); } } } @@ -85,35 +85,35 @@ class Derive { if (this.data.isBrowser('Opera') || this.data.isBrowser('Opera Mobile')) { const version = this.data.browser.getVersion(); if (version >= 3.5 && version < 7 && !this.data.isEngine('Electra')) { - this.data.engine.reset({name: 'Electra'}); + this.data.engine.reset({ name: 'Electra' }); } if (version >= 7 && version < 13 && !this.data.isEngine('Presto')) { - this.data.engine.reset({name: 'Presto'}); + this.data.engine.reset({ name: 'Presto' }); } } if (this.data.isBrowser('Opera Mini') && !this.data.isOs('iOS') && !this.data.isEngine('Presto')) { - this.data.engine.reset({name: 'Presto'}); + this.data.engine.reset({ name: 'Presto' }); } } static deriveNetFrontRenderingEngine() { if (this.data.isBrowser('NetFront') && !this.data.isEngine('NetFront')) { - this.data.engine.reset({name: 'NetFront'}); + this.data.engine.reset({ name: 'NetFront' }); } } static deriveTrident() { if (this.data.isType('desktop') && this.data.isBrowser('Internet Explorer') && !this.data.engine.getName()) { if (this.data.isBrowser('Internet Explorer', '>=', 4)) { - this.data.engine.set({name: 'Trident'}); + this.data.engine.set({ name: 'Trident' }); } } if (this.data.isMobile() && this.data.isBrowser('Mobile Internet Explorer') && !this.data.engine.getName()) { if (this.data.isBrowser('Mobile Internet Explorer', '=', 6)) { - this.data.engine.set({name: 'Trident'}); + this.data.engine.set({ name: 'Trident' }); } if (this.data.isBrowser('Mobile Internet Explorer', '=', 7)) { - this.data.engine.set({name: 'Trident', version: new Version({value: '3.1'})}); + this.data.engine.set({ name: 'Trident', version: new Version({ value: '3.1' }) }); } } } @@ -125,31 +125,31 @@ class Derive { if (this.data.os.name && this.data.os.name === 'Firefox OS' && this.data.engine.name === 'Gecko') { switch (this.data.engine.getVersion()) { case '18.0': - this.data.os.version = new Version({value: '1.0.1'}); + this.data.os.version = new Version({ value: '1.0.1' }); break; case '18.1': - this.data.os.version = new Version({value: '1.1'}); + this.data.os.version = new Version({ value: '1.1' }); break; case '26.0': - this.data.os.version = new Version({value: '1.2'}); + this.data.os.version = new Version({ value: '1.2' }); break; case '28.0': - this.data.os.version = new Version({value: '1.3'}); + this.data.os.version = new Version({ value: '1.3' }); break; case '30.0': - this.data.os.version = new Version({value: '1.4'}); + this.data.os.version = new Version({ value: '1.4' }); break; case '32.0': - this.data.os.version = new Version({value: '2.0'}); + this.data.os.version = new Version({ value: '2.0' }); break; case '34.0': - this.data.os.version = new Version({value: '2.1'}); + this.data.os.version = new Version({ value: '2.1' }); break; case '37.0': - this.data.os.version = new Version({value: '2.2'}); + this.data.os.version = new Version({ value: '2.2' }); break; case '44.0': - this.data.os.version = new Version({value: '2.5'}); + this.data.os.version = new Version({ value: '2.5' }); break; } } @@ -161,25 +161,21 @@ class Derive { this.data.browser.version = null; if (this.data.engine.getName() === 'Presto') { const data = { - '2.12': '3.4', - '2.11': '3.3', + 2.12: '3.4', + 2.11: '3.3', '2.10': '3.2', - '2.9': '3.1', - '2.8': '3.0', - '2.7': '2.9', - '2.6': '2.8', - '2.4': '10.3', - '2.3': '10', - '2.2': '9.7', - '2.1': '9.6', + 2.9: '3.1', + 2.8: '3.0', + 2.7: '2.9', + 2.6: '2.8', + 2.4: '10.3', + 2.3: '10', + 2.2: '9.7', + 2.1: '9.6', }; - const key = this.data.engine - .getVersion() - .split('.') - .slice(0, 2) - .join('.'); + const key = this.data.engine.getVersion().split('.').slice(0, 2).join('.'); if (data[key]) { - this.data.browser.version = new Version({value: data[key]}); + this.data.browser.version = new Version({ value: data[key] }); } else { this.data.browser.version = null; } @@ -192,33 +188,33 @@ class Derive { const flag = this.data.device.flag; if (flag === Constants.flag.NOKIAX) { this.data.os.name = 'Nokia X Platform'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.version = null; this.data.device.flag = null; } if (flag === Constants.flag.FIREOS) { this.data.os.name = 'FireOS'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); if (this.data.os.version && this.data.os.version.value) { switch (this.data.os.version.value) { case '2.3.3': case '2.3.4': - this.data.os.version = new Version({value: '1'}); + this.data.os.version = new Version({ value: '1' }); break; case '4.0.3': - this.data.os.version = new Version({value: '2'}); + this.data.os.version = new Version({ value: '2' }); break; case '4.2.2': - this.data.os.version = new Version({value: '3'}); + this.data.os.version = new Version({ value: '3' }); break; case '4.4.2': - this.data.os.version = new Version({value: '4'}); + this.data.os.version = new Version({ value: '4' }); break; case '4.4.3': - this.data.os.version = new Version({value: '4.5'}); + this.data.os.version = new Version({ value: '4.5' }); break; case '5.1.1': - this.data.os.version = new Version({value: '5'}); + this.data.os.version = new Version({ value: '5' }); break; default: this.data.os.version = null; @@ -227,28 +223,28 @@ class Derive { } if (this.data.isBrowser('Chrome')) { this.data.browser.reset(); - this.data.browser.using = new Using({name: 'Amazon WebView'}); + this.data.browser.using = new Using({ name: 'Amazon WebView' }); } if (this.data.browser.isUsing('Chromium WebView')) { - this.data.browser.using = new Using({name: 'Amazon WebView'}); + this.data.browser.using = new Using({ name: 'Amazon WebView' }); } this.data.device.flag = null; } if (flag === Constants.flag.GOOGLETV) { this.data.os.name = 'Google TV'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.version = null; this.data.device.flag = null; } if (flag === Constants.flag.ANDROIDTV) { this.data.os.name = 'Android TV'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.device.flag = null; this.data.device.series = null; } if (flag === Constants.flag.ANDROIDWEAR) { this.data.os.name = 'Android Wear'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.version = null; this.data.device.flag = null; if (this.data.browser.isUsing('Chrome Content Shell')) { @@ -257,7 +253,7 @@ class Derive { } } if (flag === Constants.flag.GOOGLEGLASS) { - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.name = null; this.data.os.version = null; this.data.device.flag = null; diff --git a/src/Analyser/Header.js b/src/Analyser/Header.js index 2b45580..650d677 100644 --- a/src/Analyser/Header.js +++ b/src/Analyser/Header.js @@ -1,7 +1,7 @@ /* eslint-disable require-jsdoc */ const Constants = require('../constants'); -const {Baidu, BrowserId, OperaMini, Puffin, UCBrowserNew, UCBrowserOld, Useragent, Wap} = require('./Header/'); +const { Baidu, BrowserId, OperaMini, Puffin, UCBrowserNew, UCBrowserOld, Useragent, Wap } = require('./Header/'); class Header { static analyseHeaders() { @@ -119,7 +119,7 @@ class Header { static getHeader(h) { /* Find the header that matches */ - for (let header of Object.keys(this.headers)) { + for (const header of Object.keys(this.headers)) { if (h.toLowerCase() === header.toLowerCase()) { /* And return the first 1024 bytes */ return (this.headers[header] || '').substring(0, 1024); diff --git a/src/Analyser/Header/Baidu.js b/src/Analyser/Header/Baidu.js index 58ee086..3bd9891 100644 --- a/src/Analyser/Header/Baidu.js +++ b/src/Analyser/Header/Baidu.js @@ -3,7 +3,7 @@ * Class for baidu detection */ class Baidu { - constructor(header, data = {browser: {}}) { + constructor(header, data = { browser: {} }) { this.data = data; if (!this.data.browser.name || this.data.browser.name !== 'Baidu Browser') { this.data.browser.name = 'Baidu Browser'; diff --git a/src/Analyser/Header/BrowserId.js b/src/Analyser/Header/BrowserId.js index 1891ac0..c731ac8 100644 --- a/src/Analyser/Header/BrowserId.js +++ b/src/Analyser/Header/BrowserId.js @@ -6,7 +6,7 @@ const Constants = require('../../constants'); const BrowserIds = require('../../data/BrowserIds'); class BrowserId { - constructor(header, data = {browser: {}}) { + constructor(header, data = { browser: {} }) { if (header === 'XMLHttpRequest') { return; } @@ -21,7 +21,7 @@ class BrowserId { this.data.browser.reset(); this.data.browser.using = new Using({ name: 'Chromium WebView', - version: new Version({value: version.split('.')[0]}), + version: new Version({ value: version.split('.')[0] }), }); } diff --git a/src/Analyser/Header/UCBrowserNew.js b/src/Analyser/Header/UCBrowserNew.js index 0d26947..879b6cd 100644 --- a/src/Analyser/Header/UCBrowserNew.js +++ b/src/Analyser/Header/UCBrowserNew.js @@ -15,7 +15,7 @@ class UCBrowserNew { this.data.browser.stock = false; this.data.browser.version = null; if ((match = /pr\(UCBrowser(?:\/([0-9.]+))/u.exec(header))) { - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); } } } diff --git a/src/Analyser/Header/UCBrowserOld.js b/src/Analyser/Header/UCBrowserOld.js index eee4eab..3c9587a 100644 --- a/src/Analyser/Header/UCBrowserOld.js +++ b/src/Analyser/Header/UCBrowserOld.js @@ -19,9 +19,9 @@ class UCBrowserOld { } this.data.browser.mode = 'proxy'; - this.data.engine.reset({name: 'Gecko'}); + this.data.engine.reset({ name: 'Gecko' }); - const extra = new Parser({headers: {'User-Agent': header}}); + const extra = new Parser({ headers: { 'User-Agent': header } }); if (extra.device.type !== Constants.deviceType.DESKTOP) { if (extra.os.getName() !== '' && (this.data.os.getName() === '' || extra.os.getVersion() !== '')) { diff --git a/src/Analyser/Header/Useragent.js b/src/Analyser/Header/Useragent.js index bbcb4ad..4174e96 100644 --- a/src/Analyser/Header/Useragent.js +++ b/src/Analyser/Header/Useragent.js @@ -1,6 +1,6 @@ /* eslint-disable require-jsdoc */ -const {Application, Bot, Browser, Device, Engine, Os, Using} = require('./Useragent/'); +const { Application, Bot, Browser, Device, Engine, Os, Using } = require('./Useragent/'); class Useragent { constructor(header, data, options) { diff --git a/src/Analyser/Header/Useragent/Application.js b/src/Analyser/Header/Useragent/Application.js index cb63e00..60dcbb7 100644 --- a/src/Analyser/Header/Useragent/Application.js +++ b/src/Analyser/Header/Useragent/Application.js @@ -63,7 +63,7 @@ class Application { this.data.browser.type = Constants.browserType.APP_MEDIAPLAYER; this.data.os.reset({ name: 'Android', - version: new Version({value: match[2]}), + version: new Version({ value: match[2] }), }); this.data.device.model = match[1]; this.data.device.identified |= Constants.id.PATTERN; @@ -77,9 +77,10 @@ class Application { /* "Android Application" */ if (/Android Application/iu.test(ua)) { if ( - (match = /^(.+) Android Application \([0-9]+, .+ v[0-9.]+\) - [a-z-]+ (.*) [a-z_-]+ - [0-9A-F]{8,8}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{12,12}$/iu.exec( - ua - )) + (match = + /^(.+) Android Application \([0-9]+, .+ v[0-9.]+\) - [a-z-]+ (.*) [a-z_-]+ - [0-9A-F]{8,8}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{12,12}$/iu.exec( + ua + )) ) { this.data.browser.name = match[1]; this.data.browser.version = null; @@ -97,9 +98,10 @@ class Application { } } if ( - (match = /^(.+) Android Application - (.*) Build\/(.+) {2}- [0-9A-F]{8,8}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{12,12}$/iu.exec( - ua - )) + (match = + /^(.+) Android Application - (.*) Build\/(.+) {2}- [0-9A-F]{8,8}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{4,4}-[0-9A-F]{12,12}$/iu.exec( + ua + )) ) { this.data.browser.name = match[1]; this.data.browser.version = null; @@ -144,7 +146,7 @@ class Application { this.data.browser.type = Constants.browserType.APP; this.data.os.reset({ name: 'Android', - version: new Version({value: match[1]}), + version: new Version({ value: match[1] }), }); this.data.device.model = match[2]; this.data.device.identified |= Constants.id.PATTERN; @@ -157,16 +159,17 @@ class Application { } /* Instagram */ if ( - (match = /^Instagram ([0-9.]+) Android (?:IC )?\([0-9]+\/([0-9.]+); [0-9]+dpi; [0-9]+x[0-9]+; [^;]+; ([^;]*);/iu.exec( - ua - )) + (match = + /^Instagram ([0-9.]+) Android (?:IC )?\([0-9]+\/([0-9.]+); [0-9]+dpi; [0-9]+x[0-9]+; [^;]+; ([^;]*);/iu.exec( + ua + )) ) { this.data.browser.name = 'Instagram'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.APP_SOCIAL; this.data.os.reset({ name: 'Android', - version: new Version({value: match[2]}), + version: new Version({ value: match[2] }), }); this.data.device.model = match[3]; this.data.device.identified |= Constants.id.PATTERN; @@ -180,11 +183,11 @@ class Application { /* Pinterest */ if ((match = /^Pinterest for Android( Tablet)?\/([0-9.]+) \(([^;]+); ([0-9.]+)\)/iu.exec(ua))) { this.data.browser.name = 'Pinterest'; - this.data.browser.version = new Version({value: match[2]}); + this.data.browser.version = new Version({ value: match[2] }); this.data.browser.type = Constants.browserType.APP_SOCIAL; this.data.os.reset({ name: 'Android', - version: new Version({value: match[4]}), + version: new Version({ value: match[4] }), }); this.data.device.model = match[3]; this.data.device.identified |= Constants.id.PATTERN; @@ -209,7 +212,7 @@ class Application { this.data.browser.type = Constants.browserType.APP_ANTIVIRUS; this.data.os.reset({ name: 'Android', - version: new Version({value: match[3]}), + version: new Version({ value: match[3] }), }); this.data.device.type = Constants.deviceType.MOBILE; device = DeviceModels.identify('android', match[2]); @@ -228,7 +231,7 @@ class Application { this.data.browser.type = Constants.browserType.APP; this.data.os.reset({ name: 'Android', - version: new Version({value: match[3]}), + version: new Version({ value: match[3] }), }); this.data.device.type = Constants.deviceType.MOBILE; device = DeviceModels.identify('android', match[2]); @@ -247,7 +250,7 @@ class Application { this.data.browser.type = Constants.browserType.APP_SHOPPING; this.data.os.reset({ name: 'Android', - version: new Version({value: match[2]}), + version: new Version({ value: match[2] }), }); this.data.device.type = Constants.deviceType.MOBILE; this.data.device.model = match[3]; @@ -259,9 +262,10 @@ class Application { } /* Whatsapp */ if ( - (match = /WhatsApp\+?\/([0-9.]+?) (Android|S60Version|WP7)\/([0-9._]+?) Device\/([^-]+?)-(.*?)(?:-\([0-9]+?\.[0-9]+?\))?(?:-H[0-9]+?\.[0-9]+?\.[0-9]+?\.[0-9]+?)?$/u.exec( - ua - )) + (match = + /WhatsApp\+?\/([0-9.]+?) (Android|S60Version|WP7)\/([0-9._]+?) Device\/([^-]+?)-(.*?)(?:-\([0-9]+?\.[0-9]+?\))?(?:-H[0-9]+?\.[0-9]+?\.[0-9]+?\.[0-9]+?)?$/u.exec( + ua + )) ) { this.data.browser.name = 'WhatsApp'; this.data.browser.version = new Version({ @@ -303,7 +307,7 @@ class Application { if (match[2] === 'S60Version') { this.data.os.reset({ name: 'Series60', - version: new Version({value: match[3]}), + version: new Version({ value: match[3] }), family: new Family({ name: 'Symbian', }), @@ -331,9 +335,10 @@ class Application { } /* Yahoo */ if ( - (match = /YahooMobile(?:Messenger|Mail|Weather)\/1.0 \(Android (Messenger|Mail|Weather); ([0-9.]+)\) \([^;]+; ?[^;]+; ?([^;]+); ?([0-9.]+)\/[^;)/]+\)/u.exec( - ua - )) + (match = + /YahooMobile(?:Messenger|Mail|Weather)\/1.0 \(Android (Messenger|Mail|Weather); ([0-9.]+)\) \([^;]+; ?[^;]+; ?([^;]+); ?([0-9.]+)\/[^;)/]+\)/u.exec( + ua + )) ) { this.data.browser.name = `Yahoo ${match[1]}`; this.data.browser.version = new Version({ @@ -353,7 +358,7 @@ class Application { } this.data.os.reset({ name: 'Android', - version: new Version({value: match[4]}), + version: new Version({ value: match[4] }), }); this.data.device.type = Constants.deviceType.MOBILE; device = DeviceModels.identify('android', match[3]); @@ -364,9 +369,10 @@ class Application { } /* Yahoo Mobile App */ if ( - (match = /YahooJMobileApp\/[0-9.]+ \(Android [a-z]+; ([0-9.]+)\) \([^;]+; ?[^;]+; ?[^;]+; ?([^;]+); ?([0-9.]+)\/[^;)/]+\)/u.exec( - ua - )) + (match = + /YahooJMobileApp\/[0-9.]+ \(Android [a-z]+; ([0-9.]+)\) \([^;]+; ?[^;]+; ?[^;]+; ?([^;]+); ?([0-9.]+)\/[^;)/]+\)/u.exec( + ua + )) ) { this.data.browser.name = 'Yahoo Mobile'; this.data.browser.version = new Version({ @@ -376,7 +382,7 @@ class Application { this.data.browser.type = Constants.browserType.APP_SEARCH; this.data.os.reset({ name: 'Android', - version: new Version({value: match[3]}), + version: new Version({ value: match[3] }), }); this.data.device.type = Constants.deviceType.MOBILE; device = DeviceModels.identify('android', match[2]); @@ -395,7 +401,7 @@ class Application { this.data.browser.type = Constants.browserType.APP_CHAT; this.data.os.reset({ name: 'Android', - version: new Version({value: match[2]}), + version: new Version({ value: match[2] }), }); this.data.device.type = Constants.deviceType.MOBILE; device = DeviceModels.identify('android', match[3]); @@ -418,7 +424,7 @@ class Application { } this.data.os.reset({ name: 'Android', - version: new Version({value: match[3]}), + version: new Version({ value: match[3] }), }); this.data.device.type = Constants.deviceType.MOBILE; device = DeviceModels.identify('android', match[2]); @@ -439,7 +445,7 @@ class Application { this.data.browser.type = Constants.browserType.APP_SOCIAL; this.data.os.reset({ name: 'Android', - version: new Version({value: match[2]}), + version: new Version({ value: match[2] }), }); this.data.device.model = match[3]; this.data.device.identified |= Constants.id.PATTERN; diff --git a/src/Analyser/Header/Useragent/Browser.js b/src/Analyser/Header/Useragent/Browser.js index 8076723..050614f 100644 --- a/src/Analyser/Header/Useragent/Browser.js +++ b/src/Analyser/Header/Useragent/Browser.js @@ -95,7 +95,7 @@ class Browser { this.data.browser.stock = this.data.os.name === 'OS X'; if ((match = /Version\/([0-9.]+)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if (/AppleWebKit\/[0-9.]+\+/u.test(ua)) { @@ -140,7 +140,7 @@ class Browser { if ((match = /Chrome\/([789][0-9]|[1-9][0-9][0-9])\.0\.0\.0 /u.exec(ua))) { reduced = true; } - this.data.browser.version = new Version({value: version}); + this.data.browser.version = new Version({ value: version }); if (this.data.os.name && this.data.os.name === 'Android') { if (reduced) { @@ -159,16 +159,10 @@ class Browser { /* Webview for Android 4.4 and higher */ - if ( - version - .split('.') - .slice(1, 3) - .join('.') === '0.0' && - (/Version\//u.test(ua) || /Release\//u.test(ua)) - ) { + if (version.split('.').slice(1, 3).join('.') === '0.0' && (/Version\//u.test(ua) || /Release\//u.test(ua))) { this.data.browser.using = new Using({ name: 'Chromium WebView', - version: new Version({value: version.split('.')[0]}), + version: new Version({ value: version.split('.')[0] }), }); this.data.browser.type = Constants.browserType.UNKNOWN; this.data.browser.stock = true; @@ -181,7 +175,7 @@ class Browser { if (/; wv\)/u.test(ua)) { this.data.browser.using = new Using({ name: 'Chromium WebView', - version: new Version({value: version.split('.')[0]}), + version: new Version({ value: version.split('.')[0] }), }); this.data.browser.type = Constants.browserType.UNKNOWN; this.data.browser.stock = true; @@ -211,7 +205,7 @@ class Browser { this.data.browser.name = 'Samsung Internet'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: '1.0'}); + this.data.browser.version = new Version({ value: '1.0' }); } /* Version 1.5 */ @@ -219,7 +213,7 @@ class Browser { this.data.browser.name = 'Samsung Internet'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: '1.5'}); + this.data.browser.version = new Version({ value: '1.5' }); } /* Version 1.6 */ @@ -227,7 +221,7 @@ class Browser { this.data.browser.name = 'Samsung Internet'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: '1.6'}); + this.data.browser.version = new Version({ value: '1.6' }); } /* Version 2.0 */ @@ -235,7 +229,7 @@ class Browser { this.data.browser.name = 'Samsung Internet'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: '2.0'}); + this.data.browser.version = new Version({ value: '2.0' }); } /* Version 2.1 */ @@ -243,7 +237,7 @@ class Browser { this.data.browser.name = 'Samsung Internet'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: '2.1'}); + this.data.browser.version = new Version({ value: '2.1' }); } } @@ -252,7 +246,7 @@ class Browser { this.data.browser.name = 'Samsung Internet'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); if (/Mobile VR/.test(ua)) { this.data.device.manufacturer = 'Samsung'; @@ -291,7 +285,7 @@ class Browser { this.data.browser.name = 'Samsung Internet'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.os.name = 'Android'; this.data.os.version = null; @@ -335,7 +329,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /Chromium\/([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if (this.data.device.type === '') { @@ -346,7 +340,7 @@ class Browser { /* Chrome Content Shell */ if (/Chrome\/[0-9]+\.77\.34\.5/u.test(ua)) { - this.data.browser.using = new Using({name: 'Chrome Content Shell'}); + this.data.browser.using = new Using({ name: 'Chrome Content Shell' }); this.data.browser.type = Constants.browserType.UNKNOWN; this.data.browser.stock = false; @@ -358,7 +352,7 @@ class Browser { /* Chromium WebView by Amazon */ if (/AmazonWebAppPlatform\//u.test(ua)) { - this.data.browser.using = new Using({name: 'Amazon WebView'}); + this.data.browser.using = new Using({ name: 'Amazon WebView' }); this.data.browser.type = Constants.browserType.UNKNOWN; this.data.browser.stock = false; @@ -372,7 +366,7 @@ class Browser { if ((match = /Crosswalk\/([0-9.]*)/u.exec(ua))) { this.data.browser.using = new Using({ name: 'Crosswalk WebView', - version: new Version({value: match[1], details: 1}), + version: new Version({ value: match[1], details: 1 }), }); this.data.browser.type = Constants.browserType.UNKNOWN; @@ -387,7 +381,7 @@ class Browser { if (this.data.isBrowser('Chrome') || this.data.isBrowser('Chromium')) { this.data.browser.family = new Family({ name: 'Chrome', - version: this.data.browser.version ? new Version({value: this.data.browser.version.getMajor()}) : null, + version: this.data.browser.version ? new Version({ value: this.data.browser.version.getMajor() }) : null, }); } } @@ -398,13 +392,13 @@ class Browser { let match; if ((match = /\(IE ([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Internet Explorer'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /Browser\/IE([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Internet Explorer'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -456,20 +450,20 @@ class Browser { if ((match = /Trident\/[789][^)]+; rv:([0-9.]*)\)/u.exec(ua))) { this.data.browser.name = 'Internet Explorer'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /Trident\/[789][^)]+; Touch; rv:([0-9.]*);\s+IEMobile\//u.exec(ua))) { this.data.browser.name = 'Mobile Internet Explorer'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /Trident\/[789][^)]+; Touch; rv:([0-9.]*); WPDesktop/u.exec(ua))) { this.data.browser.mode = 'desktop'; this.data.browser.name = 'Mobile Internet Explorer'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -481,14 +475,14 @@ class Browser { if (/Microsoft Pocket Internet Explorer\//u.test(ua)) { this.data.browser.name = 'Pocket Internet Explorer'; - this.data.browser.version = new Version({value: '1.0'}); + this.data.browser.version = new Version({ value: '1.0' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.MOBILE; } if ((match = /MSPIE ([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Pocket Internet Explorer2'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.MOBILE; } @@ -529,7 +523,7 @@ class Browser { if ((match = /MSIE ([0-9.]*)/u.exec(ua))) { this.data.browser.using = new Using({ name: 'Internet Explorer', - version: new Version({value: match[1]}), + version: new Version({ value: match[1] }), }); } } @@ -553,7 +547,7 @@ class Browser { this.data.browser.name = 'Edge'; this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = ''; - this.data.browser.version = new Version({value: match[1], details: 1}); + this.data.browser.version = new Version({ value: match[1], details: 1 }); this.data.browser.family = null; } @@ -590,7 +584,7 @@ class Browser { this.data.browser.stock = false; this.data.browser.channel = ''; this.data.browser.name = 'Opera'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; if (/Edition Developer/iu.test(ua)) { @@ -612,7 +606,7 @@ class Browser { if ((match = /OMI\/([0-9]+\.[0-9]+)/u.exec(ua))) { this.data.browser.name = 'Opera Devices'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.TELEVISION; @@ -629,12 +623,12 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /Opera[/| ]?([0-9.]+)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if ((match = /Version\/([0-9.]+)/u.exec(ua))) { if (parseFloat(match[1]) >= 10) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } @@ -719,7 +713,7 @@ class Browser { if ((match = /OPiOS\/([0-9.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'Opera Mini'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -728,35 +722,35 @@ class Browser { this.data.browser.name = 'Opera Touch'; this.data.browser.type = Constants.browserType.BROWSER; if (match[1]) { - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); } } if ((match = /Coast\/([0-9.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'Coast by Opera'; - this.data.browser.version = new Version({value: match[1], details: 3}); + this.data.browser.version = new Version({ value: match[1], details: 3 }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /Oupeng(?:HD)?[/-]([0-9.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'Opera Oupeng'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /\sMMS\/([0-9.]*)$/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'Opera Neon'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /OPRGX\/([0-9.]*)$/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'Opera GX'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; } } @@ -779,7 +773,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /Firefox\/([0-9ab.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); if (/a/u.test(match[1])) { this.data.browser.channel = 'Aurora'; @@ -792,7 +786,7 @@ class Browser { if ((match = /Aurora\/([0-9ab.]*)/u.exec(ua))) { this.data.browser.channel = 'Aurora'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if (/Fennec/u.test(ua)) { @@ -808,7 +802,7 @@ class Browser { device.identified |= this.data.device.identified; this.data.device = device; if (!this.data.isOs('KaiOS')) { - this.data.os.reset({name: 'Firefox OS'}); + this.data.os.reset({ name: 'Firefox OS' }); } } } @@ -820,7 +814,7 @@ class Browser { if (/Viera;(?: ([^;]+);)? rv/u.test(ua)) { this.data.device.type = Constants.deviceType.TELEVISION; - this.data.os.reset({name: 'Firefox OS'}); + this.data.os.reset({ name: 'Firefox OS' }); } if ( @@ -842,7 +836,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = new RegExp(`${match[1]}/([0-9ab.]*)`, 'u').exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } @@ -852,7 +846,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /Fennec\/([0-9ab.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } this.data.browser.channel = 'Fennec'; @@ -863,19 +857,19 @@ class Browser { this.data.browser.name = match[1]; this.data.browser.type = Constants.browserType.BROWSER; if ((match = new RegExp(`${match[1]}/([0-9ab.]*)`, 'u').exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } if ((match = /FxiOS\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Firefox'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /Focus\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Firefox Focus'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -894,7 +888,7 @@ class Browser { } if (this.data.isBrowser('Minimo')) { - this.data.browser.family = new Family({name: 'Firefox'}); + this.data.browser.family = new Family({ name: 'Firefox' }); } } @@ -908,14 +902,14 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /SeaMonkey\/([0-9ab.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } if ((match = /PmWFx\/([0-9ab.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'SeaMonkey'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } } @@ -957,7 +951,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /Netscape[0-9]?\/([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } @@ -965,7 +959,7 @@ class Browser { this.data.browser.stock = false; this.data.browser.name = 'Netscape Navigator'; this.data.browser.type = Constants.browserType.BROWSER; - this.data.browser.version = new Version({value: match[1], details: 3}); + this.data.browser.version = new Version({ value: match[1], details: 3 }); } } @@ -978,85 +972,84 @@ class Browser { } if ( - (match = /(?:NCSA[ _])?Mosaic(?:\(tm\))?(?: for the X Window System| for Windows)?\/(?:Version )?([0-9.]*)/u.exec( - ua - )) + (match = + /(?:NCSA[ _])?Mosaic(?:\(tm\))?(?: for the X Window System| for Windows)?\/(?:Version )?([0-9.]*)/u.exec(ua)) ) { this.data.browser.name = 'NCSA Mosaic'; - this.data.browser.version = new Version({value: match[1]}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1] }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /AIR_Mosaic(?:\(16bit\))?\/v([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'AIR Mosaic'; - this.data.browser.version = new Version({value: match[1], details: 2}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /(?:MosaicView|Spyglass[ _]Mosaic)\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Spyglass Mosaic'; - this.data.browser.version = new Version({value: match[1]}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1] }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /SPRY_Mosaic(?:\(16bit\))?\/v([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'SPRY Mosaic'; - this.data.browser.version = new Version({value: match[1], details: 2}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /DCL SuperMosaic\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'SuperMosaic'; - this.data.browser.version = new Version({value: match[1], details: 2}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /VMS_Mosaic\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'VMS Mosaic'; - this.data.browser.version = new Version({value: match[1]}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1] }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /mMosaic\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'mMosaic'; - this.data.browser.version = new Version({value: match[1]}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1] }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /Quarterdeck Mosaic Version ([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Quarterdeck Mosaic'; - this.data.browser.version = new Version({value: match[1]}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1] }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /WinMosaic\/Version ([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'WinMosaic'; - this.data.browser.version = new Version({value: match[1]}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1] }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; } if ((match = /Device Mosaic ([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Device Mosaic'; - this.data.browser.version = new Version({value: match[1]}); - this.data.browser.family = new Family({name: 'Mosaic'}); + this.data.browser.version = new Version({ value: match[1] }); + this.data.browser.family = new Family({ name: 'Mosaic' }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.stock = false; @@ -1101,12 +1094,13 @@ class Browser { } if ( - (match = /^JUC ?\(Linux; ?U; ?(?:Android)? ?([0-9.]+)[^;]*; ?[^;]+; ?([^;]*[^\s])\s*; ?[0-9]+\*[0-9]+;?\)/u.exec( - ua - )) + (match = + /^JUC ?\(Linux; ?U; ?(?:Android)? ?([0-9.]+)[^;]*; ?[^;]+; ?([^;]*[^\s])\s*; ?[0-9]+\*[0-9]+;?\)/u.exec( + ua + )) ) { this.data.os.name = 'Android'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device = DeviceModels.identify('android', match[2]); } @@ -1127,7 +1121,7 @@ class Browser { if ((match = /\((?:Linux|MIDP-2.0); U; Adr ([0-9.]+)(?:-update[0-9])?; [^;]+; ([^;]*[^\s])\)/u.exec(ua))) { this.data.os.name = 'Android'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.model = match[2]; this.data.device.identified |= Constants.id.PATTERN; @@ -1142,7 +1136,7 @@ class Browser { if (/\((?:iOS|iPhone);/u.test(ua)) { this.data.os.name = 'iOS'; - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); if ((match = /OS[_ ]([0-9_]*);/u.exec(ua))) { this.data.os.version = new Version({ @@ -1163,10 +1157,10 @@ class Browser { if (/\(Symbian;/u.test(ua)) { this.data.os.name = 'Series60'; this.data.os.version = null; - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.family = new Family({ name: 'Symbian' }); if ((match = /S60 V([0-9])/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /; Nokia([^;]+)\)/iu.exec(ua))) { @@ -1189,16 +1183,16 @@ class Browser { if ((match = /wds ([0-9]+\.[0-9])/u.exec(ua))) { switch (match[1]) { case '7.1': - this.data.os.version = new Version({value: '7.5'}); + this.data.os.version = new Version({ value: '7.5' }); break; case '8.0': - this.data.os.version = new Version({value: '8.0'}); + this.data.os.version = new Version({ value: '8.0' }); break; case '8.1': - this.data.os.version = new Version({value: '8.1'}); + this.data.os.version = new Version({ value: '8.1' }); break; case '10.0': - this.data.os.version = new Version({value: '10.0'}); + this.data.os.version = new Version({ value: '10.0' }); break; } } @@ -1221,7 +1215,7 @@ class Browser { if ((match = /Ucweb\/([0-9]*[.][0-9]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'UC Browser'; - this.data.browser.version = new Version({value: match[1], details: 3}); + this.data.browser.version = new Version({ value: match[1], details: 3 }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -1251,7 +1245,7 @@ class Browser { if ((match = /UC ?Browser\/?([0-9.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'UC Browser'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = null; @@ -1264,7 +1258,7 @@ class Browser { if ((match = /UBrowser\/?([0-9.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'UC Browser'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = null; @@ -1273,7 +1267,7 @@ class Browser { if ((match = /UCLite\/([0-9.]*)/u.exec(ua))) { this.data.browser.stock = false; this.data.browser.name = 'UC Browser'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = null; @@ -1363,7 +1357,7 @@ class Browser { if ((match = /CNF\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Compact NetFront'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.MOBILE; } @@ -1376,7 +1370,7 @@ class Browser { this.data.browser.channel = null; if ((match = /NetFront[ /]?([0-9.]*)/iu.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } /* Detect device type based on NetFront identifier */ @@ -1428,7 +1422,7 @@ class Browser { (match = /(?:Browser\/(?:NF|NetFr?ont-)|NF-Browser\/|ACS-NF\/|NetFront FullBrowser\/)([0-9.]*)/iu.exec(ua)) ) { this.data.browser.name = 'NetFront'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = null; @@ -1439,7 +1433,7 @@ class Browser { if ((match = /(?:AVE-Front|AveFront)\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'NetFront'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; if ((match = /Category=([^);]+)[);]/u.exec(ua))) { @@ -1479,7 +1473,7 @@ class Browser { if ((match = /NX[/ ]([0-9.]+)/u.exec(ua))) { this.data.browser.name = 'NetFront NX'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = null; @@ -1506,7 +1500,7 @@ class Browser { /* Obigo */ static detectObigo(ua) { - const processObigoVersion = function(version) { + const processObigoVersion = function (version) { const result = { value: version, }; @@ -1574,13 +1568,13 @@ class Browser { let match; if ((match = /ANTFresco\/([0-9.]+)/iu.exec(ua))) { this.data.browser.name = 'ANT Fresco'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /ANTGalio\/([0-9.]+)/iu.exec(ua))) { this.data.browser.name = 'ANT Galio'; - this.data.browser.version = new Version({value: match[1], details: 3}); + this.data.browser.version = new Version({ value: match[1], details: 3 }); this.data.browser.type = Constants.browserType.BROWSER; } } @@ -1597,7 +1591,7 @@ class Browser { let match; if ((match = /SRAF\/([0-9.]+)/iu.exec(ua))) { this.data.browser.name = 'Seraphic Sraf'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.TELEVISION; } @@ -1610,7 +1604,7 @@ class Browser { if ((match = /mbxtWebKit\/([0-9.]*)/u.exec(ua))) { this.data.os.name = ''; this.data.browser.name = 'MachBlue XT'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.TELEVISION; } @@ -1641,7 +1635,7 @@ class Browser { } let match; if ((match = /Espial(?: Browser|TVBrowser)?\/(?:sig)?([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if ((match = /;(L6200|L7200)/u.exec(ua))) { @@ -1664,7 +1658,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; let match; if ((match = /Iris\/([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if ((match = / WM([0-9]) /u.exec(ua))) { @@ -1673,7 +1667,7 @@ class Browser { this.data.os.reset(); this.data.os.name = 'Windows Mobile'; - this.data.os.version = new Version({value: `${match[1]}.0`}); + this.data.os.version = new Version({ value: `${match[1]}.0` }); } if (/Windows NT/u.test(ua)) { @@ -1696,11 +1690,11 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; let match; if ((match = /(?:Dolfin|Jasmine)\/([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if ((match = /Browser\/Dolfin([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } } @@ -1769,7 +1763,7 @@ class Browser { if (this.data.os.name && (this.data.os.name !== 'Android' || this.data.os.name !== 'FireOS')) { this.data.os.name = 'FireOS'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.alias = null; this.data.os.version = null; } @@ -1869,7 +1863,7 @@ class Browser { if (device.identified) { device.identified |= this.data.device.identified; this.data.os.name = 'Nokia Asha Platform'; - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); this.data.device = device; if ((match = /java_runtime_version=Nokia_Asha_([0-9_]+);/u.exec(ua))) { @@ -1918,7 +1912,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; let match; if ((match = /[k|K]onqueror\/([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } if (this.data.device.type === '') { @@ -2001,7 +1995,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /IBM[- ]WebExplorer[ -]?(?:DLL ?|Window API ?)?\/v([0-9]\.[0-9.]+)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } this.data.os.name = 'OS/2'; @@ -2024,7 +2018,7 @@ class Browser { if ((match = /Midori\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Midori'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.manufacturer = null; @@ -2044,7 +2038,7 @@ class Browser { this.data.device.type = Constants.deviceType.DESKTOP; if ((match = /midori\/([0-9.]*)$/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } @@ -2078,7 +2072,7 @@ class Browser { if ((match = /^Browse\/([0-9.]+)/u.exec(ua))) { this.data.browser.name = 'Browse'; this.data.browser.channel = ''; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -2087,7 +2081,7 @@ class Browser { if ((match = / Flow\/([0-9.]+)/iu.exec(ua))) { this.data.browser.name = 'Flow'; this.data.browser.channel = ''; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.family = null; @@ -2112,14 +2106,14 @@ class Browser { /* Huawei Browser */ if ((match = /HuaweiBrowser\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Huawei Browser'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; } /* Xiaomi MIUI Browser */ if ((match = /MiuiBrowser\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'MIUI Browser'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; if (!this.data.os.isFamily('Android')) { this.data.os.reset(); @@ -2135,7 +2129,7 @@ class Browser { if ((match = /Ninesky(?:-android-mobile(?:-cn)?)?\/([0-9.]*)/u.exec(ua))) { this.data.browser.reset(); this.data.browser.name = 'NineSky'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; if (this.data.device.manufacturer && this.data.device.manufacturer === 'Apple') { @@ -2154,7 +2148,7 @@ class Browser { if ((match = /Skyfire\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Skyfire'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.MOBILE; @@ -2167,7 +2161,7 @@ class Browser { if ((match = /Dolphin(?:HD|Browser)?(?:INT|CN)?\/(?:INT|CN)?-?([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Dolphin'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.MOBILE; @@ -2183,7 +2177,7 @@ class Browser { version = `${version[0]}.${version[1]}`; } - this.data.browser.version = new Version({value: version, details: 2}); + this.data.browser.version = new Version({ value: version, details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = ''; @@ -2194,7 +2188,7 @@ class Browser { if ((match = /MQQBrowser\/[0-9.]+\/Adr \(Linux; U; ([0-9.]+); [^;]+; (.+) Build/u.exec(ua))) { this.data.os.reset({ name: 'Android', - version: new Version({value: match[1]}), + version: new Version({ value: match[1] }), }); this.data.device.type = Constants.deviceType.MOBILE; @@ -2211,7 +2205,7 @@ class Browser { if ((match = /MQQBrowser\/[0-9.]+\/WP7 \([^;]+;WPOS:([0-9]\.[0-9])[0-9.]*;([^;]+); ([^)]+)\)/u.exec(ua))) { this.data.os.reset({ name: 'Windows Phone', - version: new Version({value: match[1]}), + version: new Version({ value: match[1] }), }); this.data.device.type = Constants.deviceType.MOBILE; @@ -2229,14 +2223,14 @@ class Browser { if ((match = /MQQBrowser\/Mini([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'QQ Browser Mini'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = ''; } if ((match = /QQ\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'QQ Browser'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.browser.channel = ''; } @@ -2253,7 +2247,7 @@ class Browser { this.data.browser.name = 'Qihoo 360 Browser'; this.data.browser.family = null; this.data.browser.channel = ''; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; if (!this.data.os.isFamily('Android')) { @@ -2268,7 +2262,7 @@ class Browser { this.data.browser.name = 'Qihoo 360 Browser'; this.data.browser.family = null; this.data.browser.channel = ''; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -2280,7 +2274,7 @@ class Browser { this.data.browser.name = 'Qihoo 360 Browser'; this.data.browser.channel = ''; - this.data.browser.version = new Version({value: version}); + this.data.browser.version = new Version({ value: version }); this.data.browser.type = Constants.browserType.BROWSER; if (!this.data.isOs('iOS')) { @@ -2301,7 +2295,7 @@ class Browser { this.data.browser.name = 'Mercury Browser'; this.data.browser.channel = ''; - this.data.browser.version = new Version({value: version}); + this.data.browser.version = new Version({ value: version }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -2315,14 +2309,14 @@ class Browser { version = `${version[0]}.${version[1]}`; } - this.data.browser.version = new Version({value: version, details: 2}); + this.data.browser.version = new Version({ value: version, details: 2 }); this.data.browser.channel = ''; this.data.browser.type = Constants.browserType.BROWSER; } if ((match = /iBrowser\/Mini([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'iBrowser Mini'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.channel = ''; this.data.browser.type = Constants.browserType.BROWSER; } @@ -2343,13 +2337,13 @@ class Browser { switch (match[2]) { case 'A': if (!this.data.isOs('Android')) { - this.data.os.reset({name: 'Android'}); + this.data.os.reset({ name: 'Android' }); } break; case 'I': if (!this.data.isOs('iOS')) { - this.data.os.reset({name: 'iOS'}); + this.data.os.reset({ name: 'iOS' }); } break; } @@ -2382,7 +2376,7 @@ class Browser { if ((match = /MiniBr?owserM(?:obile)?\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'MiniBrowser'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.MOBILE; @@ -2413,7 +2407,7 @@ class Browser { if ((match = /SogouAndroidBrowser\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Sogou Mobile'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; if (this.data.device.manufacturer && this.data.device.manufacturer === 'Apple') { @@ -2427,7 +2421,7 @@ class Browser { if ((match = /Xiino\/([0-9.]+)/u.exec(ua))) { this.data.browser.name = 'Xiino'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.PDA; @@ -2435,7 +2429,7 @@ class Browser { this.data.os.name = 'Palm OS'; if ((match = /\(v. ([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } @@ -2443,7 +2437,7 @@ class Browser { if ((match = /Palmscape\/(?:PR)?([0-9.]+)/u.exec(ua))) { this.data.browser.name = 'Palmscape'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.PDA; @@ -2451,7 +2445,7 @@ class Browser { this.data.os.name = 'Palm OS'; if ((match = /\(v. ([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } @@ -2463,7 +2457,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if ((match = /WebPro\/?([0-9.]*)/u.exec(ua))) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } @@ -2471,7 +2465,7 @@ class Browser { if ((match = /(?:Vision-Browser|Novarra-Vision)\/?([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Novarra Vision'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.family = null; this.data.browser.mode = 'proxy'; this.data.browser.type = Constants.browserType.BROWSER; @@ -2492,7 +2486,7 @@ class Browser { let match; if (/Roku/u.test(ua) && (match = /Web\/([0-9.]+)/u.exec(ua))) { this.data.browser.name = 'Web'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; } @@ -2500,7 +2494,7 @@ class Browser { if ((match = /LG Browser\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'LG Browser'; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.type = Constants.deviceType.TELEVISION; } @@ -2522,7 +2516,7 @@ class Browser { if ((match = /DreamKey\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Dreamkey'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.setIdentification({ @@ -2537,7 +2531,7 @@ class Browser { if ((match = /DreamPassport\/([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Dream Passport'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; this.data.device.setIdentification({ @@ -2552,7 +2546,7 @@ class Browser { if ((match = /Planetweb\/v?([0-9.]*)/u.exec(ua))) { this.data.browser.name = 'Planetweb'; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.type = Constants.browserType.BROWSER; if (/Dreamcast/u.test(ua)) { @@ -2594,13 +2588,13 @@ class Browser { if ((match = /Browser\/Dorado([0-9.]*)/iu.exec(ua))) { this.data.browser.name = 'Dorado WAP'; this.data.browser.type = Constants.browserType.BROWSER; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); } if ((match = /Dorado WAP-Browser\/([0-9.]*)/iu.exec(ua))) { this.data.browser.name = 'Dorado WAP'; this.data.browser.type = Constants.browserType.BROWSER; - this.data.browser.version = new Version({value: match[1], details: 2}); + this.data.browser.version = new Version({ value: match[1], details: 2 }); } if ((match = /MAUI[ _]WAP[ _]Browser(?:\/([0-9.]*))?/iu.exec(ua))) { @@ -2608,7 +2602,7 @@ class Browser { this.data.browser.type = Constants.browserType.BROWSER; if (match[1]) { - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); } } diff --git a/src/Analyser/Header/Useragent/Device/Ereader.js b/src/Analyser/Header/Useragent/Device/Ereader.js index 2972ea9..e237e98 100644 --- a/src/Analyser/Header/Useragent/Device/Ereader.js +++ b/src/Analyser/Header/Useragent/Device/Ereader.js @@ -53,7 +53,7 @@ class Ereader { static detectNook(ua) { if (/nook browser/u.test(ua)) { - this.data.os.reset({name: 'Android'}); + this.data.os.reset({ name: 'Android' }); this.data.device.setIdentification({ manufacturer: 'Barnes & Noble', series: 'NOOK', diff --git a/src/Analyser/Header/Useragent/Device/Media.js b/src/Analyser/Header/Useragent/Device/Media.js index c4e2bf7..34cfc9d 100644 --- a/src/Analyser/Header/Useragent/Device/Media.js +++ b/src/Analyser/Header/Useragent/Device/Media.js @@ -56,10 +56,10 @@ class Media { } /* Generation 6 with Android */ if ((match = /ARCHOS; GOGI; A5[SH]; Version ([0-9]\.[0-9])/u.exec(ua))) { - const version = new Version({value: match[1]}); + const version = new Version({ value: match[1] }); this.data.os.reset({ name: 'Android', - version: new Version({value: version.is('<', '1.7') ? '1.5' : '1.6'}), + version: new Version({ value: version.is('<', '1.7') ? '1.5' : '1.6' }), }); this.data.device.setIdentification({ manufacturer: 'Archos', diff --git a/src/Analyser/Header/Useragent/Device/Mobile.js b/src/Analyser/Header/Useragent/Device/Mobile.js index b281ff2..24ee73f 100644 --- a/src/Analyser/Header/Useragent/Device/Mobile.js +++ b/src/Analyser/Header/Useragent/Device/Mobile.js @@ -33,7 +33,7 @@ class Mobile { let match; if ((match = /KIN\.(One|Two) ([0-9.]*)/iu.exec(ua))) { this.data.os.name = 'Kin OS'; - this.data.os.version = new Version({value: match[2], details: 2}); + this.data.os.version = new Version({ value: match[2], details: 2 }); switch (match[1]) { case 'One': this.data.device.manufacturer = 'Microsoft'; @@ -76,9 +76,9 @@ class Mobile { this.data.device = device; if (!this.data.os.name || this.data.os.name !== 'Nokia Asha Platform') { this.data.os.name = 'Nokia Asha Platform'; - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); if ((match = /java_runtime_version=Nokia_Asha_([0-9_]+)[;)]/u.exec(ua))) { - this.data.os.version = new Version({value: match[1].replace(/_/g, '.')}); + this.data.os.version = new Version({ value: match[1].replace(/_/g, '.') }); } } } @@ -102,7 +102,7 @@ class Mobile { if (!this.data.os.name || this.data.os.name !== 'Series60') { this.data.os.name = 'Series60'; this.data.os.version = null; - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.family = new Family({ name: 'Symbian' }); } } } @@ -153,10 +153,10 @@ class Mobile { this.data.os.name = 'Touchwiz'; switch (version) { case '0.8': - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); break; case '1.0': - this.data.os.version = new Version({value: '2.0', alias: '2.0 or earlier'}); + this.data.os.version = new Version({ value: '2.0', alias: '2.0 or earlier' }); break; } } @@ -170,10 +170,10 @@ class Mobile { this.data.os.name = 'Bada'; switch (version) { case '2.0': - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); break; case '2.2': - this.data.os.version = new Version({value: '1.2'}); + this.data.os.version = new Version({ value: '1.2' }); break; } } else { @@ -184,13 +184,13 @@ class Mobile { this.data.os.name = 'Touchwiz'; switch (version) { case '1.0': - this.data.os.version = new Version({value: '2.0', alias: '2.0 or earlier'}); + this.data.os.version = new Version({ value: '2.0', alias: '2.0 or earlier' }); break; case '1.5': - this.data.os.version = new Version({value: '2.0'}); + this.data.os.version = new Version({ value: '2.0' }); break; case '2.0': - this.data.os.version = new Version({value: '3.0'}); + this.data.os.version = new Version({ value: '3.0' }); break; } } @@ -253,14 +253,14 @@ class Mobile { this.data.device.identifyModel(/ maui ([a-z0-9]+)/u, ua, { type: Constants.deviceType.MOBILE, manufacturer: 'BenQ', - model: function(model) { + model: function (model) { return `Maui ${model.toUpperCase()}`; }, }); this.data.device.identifyModel(/ALCATEL[_-]([^\/]*)/iu, ua, { type: Constants.deviceType.MOBILE, manufacturer: 'Alcatel', - model: function(model) { + model: function (model) { if ((match = /^TRIBE ([^\s]+)/iu.exec(model))) { model = `One Touch Tribe ${match[1]}`; } else if ((match = /^ONE TOUCH ([^\s]*)/iu.exec(model))) { @@ -447,7 +447,7 @@ class Mobile { this.data.device.identifyModel(/PHILIPS-([a-zA-Z0-9@]+(?: [0-9]+)?)/u, ua, { type: Constants.deviceType.MOBILE, manufacturer: 'Philips', - model: function(model) { + model: function (model) { if ((match = /Az@lis([0-9]{3,3})/iu.exec(model))) { return `Az@lis ${match[1]}`; } @@ -505,7 +505,7 @@ class Mobile { this.data.device.identifyModel(/SonyE?ricsson ?([^\/\);]+)/iu, ua, { type: Constants.deviceType.MOBILE, manufacturer: 'Sony Ericsson', - model: function(model) { + model: function (model) { if ((match = /^([A-Z]) ([0-9]+)$/u.exec(model))) { model = `${match[1]}${match[2]}`; } @@ -590,7 +590,7 @@ class Mobile { this.data.device.identifyModel(/ZTE[-_\s]?([^\s\/();,]+)/iu, ua, { type: Constants.deviceType.MOBILE, manufacturer: 'ZTE', - model: function(model) { + model: function (model) { return /[A-Z]+[0-9]+/iu.test(model) ? model.toUpperCase() : model; }, }); @@ -612,7 +612,7 @@ class Mobile { if (/^DoCoMo/u.test(ua)) { ua = ua.replace( /\\x([0-9A-Fa-f]{2})/g, - function(m) { + function (m) { return String.fromCharCode(parseInt(m.substring(2), 16)); }, ua @@ -751,7 +751,7 @@ class Mobile { case 'F07B': case 'F08B': case 'SH07B': - this.data.os.reset({family: new Family({name: 'Symbian'})}); + this.data.os.reset({ family: new Family({ name: 'Symbian' }) }); this.data.device.flag = Constants.flag.MOAPS; break; } @@ -954,7 +954,7 @@ class Mobile { candidates.splice(i, 1); } } - for (let id of candidates) { + for (const id of candidates) { Mobile.identifyBasedOnIdUsingOs.call(this, id); if (this.data.device.identified & Constants.id.MATCH_UA) { return; @@ -973,13 +973,13 @@ class Mobile { if (this.data.device.model) { ids.push(this.data.device.model); } - for (let id of ids) { + for (const id of ids) { Mobile.identifyBasedOnIdUsingOs.call(this, id); if (this.data.device.identified & Constants.id.MATCH_UA) { return; } } - for (let id of ids) { + for (const id of ids) { Mobile.identifyBasedOnId.call(this, id); if (this.data.device.identified & Constants.id.MATCH_UA) { return; @@ -1072,7 +1072,7 @@ class Mobile { device.identified |= this.data.device.identified; this.data.device = device; this.data.os.reset({ - family: new Family({name: 'Symbian'}), + family: new Family({ name: 'Symbian' }), }); } } diff --git a/src/Analyser/Header/Useragent/Device/Pda.js b/src/Analyser/Header/Useragent/Device/Pda.js index 2cb9603..e652438 100644 --- a/src/Analyser/Header/Useragent/Device/Pda.js +++ b/src/Analyser/Header/Useragent/Device/Pda.js @@ -47,7 +47,7 @@ class Pda { this.data.os.name = 'Palm OS'; this.data.device.type = Constants.deviceType.PDA; if ((match = /PalmOS ([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /; ([^;)]+)\)/u.exec(ua))) { device = DeviceModels.identify('palmos', match[1]); @@ -66,7 +66,7 @@ class Pda { } if ((match = /Palm OS ([0-9.]*)/iu.exec(ua))) { this.data.os.name = 'Palm OS'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.PDA; } if ((match = /PalmSource/u.exec(ua))) { @@ -106,7 +106,7 @@ class Pda { this.data.browser.version = null; this.data.browser.type = Constants.browserType.BROWSER; this.data.os.name = 'EPOC'; - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.family = new Family({ name: 'Symbian' }); this.data.device.manufacturer = 'Psion'; this.data.device.identified |= Constants.id.MATCH_UA; this.data.device.type = Constants.deviceType.PDA; diff --git a/src/Analyser/Header/Useragent/Device/Television.js b/src/Analyser/Header/Useragent/Device/Television.js index b9353e9..e6fbe38 100644 --- a/src/Analyser/Header/Useragent/Device/Television.js +++ b/src/Analyser/Header/Useragent/Device/Television.js @@ -603,44 +603,44 @@ class Television { this.data.device.type = Constants.deviceType.TELEVISION; const models = { - '2000': 'HD', - '2050': 'XD', - '2100': 'XDS', - '2400': 'LT', - '2450': 'LT', - '2500': 'HD', - '2700': 'LT', - '2710': '1 SE', - '2720': '2', - '3000': '2 HD', - '3050': '2 XD', - '3100': '2 XS', - '3400': 'Streaming Stick, MHL', - '3420': 'Streaming Stick, MHL', - '3500': 'Streaming Stick, HDMI', - '3600': 'Streaming Stick', - '3700': 'Express', - '3710': 'Express+', - '3800': 'Streaming Stick', - '3810': 'Streaming Stick+', - '3900': 'Express', - '3910': 'Express+', - '3920': 'Premiere', - '3921': 'Premiere+', - '3930': 'Express', - '3931': 'Express+', - '4200': '3', - '4210': '2', - '4230': '3', - '4400': '4', - '4620': 'Premiere', - '4630': 'Premiere+', - '4640': 'Ultra', - '4660': 'Ultra', - '4661': 'Ultra', - '4662': 'Ultra LT', - '4670': 'Ultra', - '4800': 'Ultra', + 2000: 'HD', + 2050: 'XD', + 2100: 'XDS', + 2400: 'LT', + 2450: 'LT', + 2500: 'HD', + 2700: 'LT', + 2710: '1 SE', + 2720: '2', + 3000: '2 HD', + 3050: '2 XD', + 3100: '2 XS', + 3400: 'Streaming Stick, MHL', + 3420: 'Streaming Stick, MHL', + 3500: 'Streaming Stick, HDMI', + 3600: 'Streaming Stick', + 3700: 'Express', + 3710: 'Express+', + 3800: 'Streaming Stick', + 3810: 'Streaming Stick+', + 3900: 'Express', + 3910: 'Express+', + 3920: 'Premiere', + 3921: 'Premiere+', + 3930: 'Express', + 3931: 'Express+', + 4200: '3', + 4210: '2', + 4230: '3', + 4400: '4', + 4620: 'Premiere', + 4630: 'Premiere+', + 4640: 'Ultra', + 4660: 'Ultra', + 4661: 'Ultra', + 4662: 'Ultra LT', + 4670: 'Ultra', + 4800: 'Ultra', }; if (match[1] || match[2]) { @@ -666,10 +666,10 @@ class Television { '04': '3', '07': 'LT', '09': 'Streaming Stick', - '29': 'Ultra', - '30': ['TCL', '4K Roku TV'], - '51': 'Express', - 'AE': 'Express', + 29: 'Ultra', + 30: ['TCL', '4K Roku TV'], + 51: 'Express', + AE: 'Express', }; if (match[1]) { diff --git a/src/Analyser/Header/Useragent/Engine.js b/src/Analyser/Header/Useragent/Engine.js index 5ea202b..f8ddecc 100644 --- a/src/Analyser/Header/Useragent/Engine.js +++ b/src/Analyser/Header/Useragent/Engine.js @@ -21,16 +21,16 @@ class Engine { let match; if ((match = /WebKit\/([0-9.]*)/iu.exec(ua))) { this.data.engine.name = 'Webkit'; - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); if ((match = /(?:Chrome|Chromium)\/([0-9]*)/u.exec(ua))) { if (parseInt(match[1], 10) >= 27) { - this.data.engine.reset({name: 'Blink'}); + this.data.engine.reset({ name: 'Blink' }); } } } if ((match = /Browser\/AppleWebKit\/?([0-9.]*)/iu.exec(ua))) { this.data.engine.name = 'Webkit'; - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); } if (/AppleWebkit\(like Gecko\)/iu.test(ua)) { this.data.engine.name = 'Webkit'; @@ -45,7 +45,7 @@ class Engine { let match; if ((match = /KHTML\/([0-9.]*)/u.exec(ua))) { this.data.engine.name = 'KHTML'; - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); } } @@ -55,7 +55,7 @@ class Engine { if (/Gecko/u.test(ua) && !/like Gecko/iu.test(ua)) { this.data.engine.name = 'Gecko'; if ((match = /; rv:([^);]+)[);]/u.exec(ua))) { - this.data.engine.version = new Version({value: match[1], details: 3}); + this.data.engine.version = new Version({ value: match[1], details: 3 }); } } } @@ -65,7 +65,7 @@ class Engine { let match; if ((match = /Servo\/([0-9.]*)/u.exec(ua))) { this.data.engine.name = 'Servo'; - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); } } @@ -75,10 +75,10 @@ class Engine { if (/Goanna/u.test(ua)) { this.data.engine.name = 'Goanna'; if ((match = /Goanna\/([0-9]\.[0-9.]+)/u.exec(ua))) { - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); } if (/Goanna\/20[0-9]{6,6}/u.test(ua) && (match = /; rv:([^);]+)[);]/u.exec(ua))) { - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); } } } @@ -88,7 +88,7 @@ class Engine { let match; if ((match = /Presto\/([0-9.]*)/u.exec(ua))) { this.data.engine.name = 'Presto'; - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); } } @@ -97,22 +97,22 @@ class Engine { let match; if ((match = /Trident\/([0-9.]*)/u.exec(ua))) { this.data.engine.name = 'Trident'; - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); if (this.data.browser.version && this.data.browser.name && this.data.browser.name === 'Internet Explorer') { if (this.data.engine.version.toNumber() >= 7 && this.data.browser.version.toFloat() < 11) { - this.data.browser.version = new Version({value: '11.0'}); + this.data.browser.version = new Version({ value: '11.0' }); this.data.browser.mode = 'compat'; } if (this.data.engine.version.toNumber() === 6 && this.data.browser.version.toFloat() < 10) { - this.data.browser.version = new Version({value: '10.0'}); + this.data.browser.version = new Version({ value: '10.0' }); this.data.browser.mode = 'compat'; } if (this.data.engine.version.toNumber() === 5 && this.data.browser.version.toFloat() < 9) { - this.data.browser.version = new Version({value: '9.0'}); + this.data.browser.version = new Version({ value: '9.0' }); this.data.browser.mode = 'compat'; } if (this.data.engine.version.toNumber() === 4 && this.data.browser.version.toFloat() < 8) { - this.data.browser.version = new Version({value: '8.0'}); + this.data.browser.version = new Version({ value: '8.0' }); this.data.browser.mode = 'compat'; } } @@ -124,10 +124,10 @@ class Engine { this.data.browser.name === 'Mobile Internet Explorer' ) { if (this.data.engine.version.toNumber() === 7 && this.data.os.version.toFloat() < 8.1) { - this.data.os.version = new Version({value: '8.1', details: 2}); + this.data.os.version = new Version({ value: '8.1', details: 2 }); } if (this.data.engine.version.toNumber() === 5 && this.data.os.version.toFloat() < 7.5) { - this.data.os.version = new Version({value: '7.5', details: 2}); + this.data.os.version = new Version({ value: '7.5', details: 2 }); } } } @@ -138,7 +138,7 @@ class Engine { let match; if ((match = /Edge\/([0-9.]*)/u.exec(ua))) { this.data.engine.name = 'EdgeHTML'; - this.data.engine.version = new Version({value: match[1], hidden: true}); + this.data.engine.version = new Version({ value: match[1], hidden: true }); } } @@ -147,7 +147,7 @@ class Engine { let match; if ((match = /EkiohFlow\/([0-9.]*)/u.exec(ua))) { this.data.engine.name = 'EkiohFlow'; - this.data.engine.version = new Version({value: match[1]}); + this.data.engine.version = new Version({ value: match[1] }); } } } diff --git a/src/Analyser/Header/Useragent/Os.js b/src/Analyser/Header/Useragent/Os.js index f88dea7..c383db3 100644 --- a/src/Analyser/Header/Useragent/Os.js +++ b/src/Analyser/Header/Useragent/Os.js @@ -58,7 +58,7 @@ class Os { this.data.os.name = 'iOS'; if (/CPU like Mac OS X/u.test(ua)) { - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); } if ((match = /OS (.*) like Mac OS X/u.exec(ua))) { @@ -221,19 +221,19 @@ class Os { ua.replace('-update', ',') )) ) { - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.version = new Version({ value: match[1], details: 3 }); } if ((match = /Android [0-9][0-9].[0-9][0-9].[0-9][0-9]\(([^)]+)\);/u.exec(ua.replace('-update', ',')))) { - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.version = new Version({ value: match[1], details: 3 }); } if (/Android Eclair/u.test(ua)) { - this.data.os.version = new Version({value: '2.0', details: 3}); + this.data.os.version = new Version({ value: '2.0', details: 3 }); } if (/Android KeyLimePie/u.test(ua)) { - this.data.os.version = new Version({value: '4.4', details: 3}); + this.data.os.version = new Version({ value: '4.4', details: 3 }); } if (/Android (?:L|4.4.99);/u.test(ua)) { @@ -297,9 +297,10 @@ class Os { const Useragent = require('../../Header/Useragent.js'); // removed this regex /^(?U)([^\/]+)(?U)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*)? Linux\/[0-9.+]+ Android\/[0-9.]+/u if ( - (match = /^([^\/]+?)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*?)? Linux\/[0-9.+]+? Android\/[0-9.]+?/u.exec( - Useragent.removeKnownPrefixes(ua) - )) + (match = + /^([^\/]+?)(?:(?:_CMCC_TD|_CMCC|_TD|_TDLTE|_LTE)?\/[^\/]*?)? Linux\/[0-9.+]+? Android\/[0-9.]+?/u.exec( + Useragent.removeKnownPrefixes(ua) + )) ) { candidates.push(match[1]); } else if ( @@ -319,9 +320,10 @@ class Os { /* Old Android useragent strings */ if ( - (match = /Linux; (?:arm; |arm_64; )?(?:U; )?Android [^;]+; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?(?:[^;]+; ?)?([^\/;]+)\) /u.exec( - ua - )) + (match = + /Linux; (?:arm; |arm_64; )?(?:U; )?Android [^;]+; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?(?:[^;]+; ?)?([^\/;]+)\) /u.exec( + ua + )) ) { candidates.push(match[1]); } else if ((match = /\(([^;]+);U;Android\/[^;]+;[0-9]+\*[0-9]+;CTC\/2.0\)/u.exec(ua))) { @@ -397,9 +399,8 @@ class Os { } if ( - (match = /\(Linux; (?:U; )?(?:([0-9.]+); )?(?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?([^;]+) Build/u.exec( - ua - )) + (match = + /\(Linux; (?:U; )?(?:([0-9.]+); )?(?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?([^;]+) Build/u.exec(ua)) ) { falsepositive = false; @@ -414,7 +415,7 @@ class Os { this.data.os.name = 'Android'; if (match[1]) { - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.version = new Version({ value: match[1], details: 3 }); } device = DeviceModels.identify('android', match[2]); @@ -428,9 +429,10 @@ class Os { } if ( - (match = /Linux x86_64; ([^;\)]+)(?:; [a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?)?\) AppleWebKit\/534.24 \(KHTML, like Gecko\) Chrome\/11.0.696.34 Safari\/534.24/u.exec( - ua - )) + (match = + /Linux x86_64; ([^;\)]+)(?:; [a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?)?\) AppleWebKit\/534.24 \(KHTML, like Gecko\) Chrome\/11.0.696.34 Safari\/534.24/u.exec( + ua + )) ) { device = DeviceModels.identify('android', match[1]); if (device.identified) { @@ -463,7 +465,7 @@ class Os { this.data.os.version = new Version(); if ((match = /; Android ([0-9\.]+);/u.exec(ua))) { - this.data.os.family = new Family({name: 'Android', version: new Version({value: match[1], details: 3})}); + this.data.os.family = new Family({ name: 'Android', version: new Version({ value: match[1], details: 3 }) }); } } @@ -471,15 +473,15 @@ class Os { if (/Aliyun/u.test(ua) || /YunOs/iu.test(ua)) { this.data.os.name = 'Aliyun OS'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.version = new Version(); if ((match = /YunOs[ \/]([0-9.]+)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.version = new Version({ value: match[1], details: 3 }); } if ((match = /AliyunOS ([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.version = new Version({ value: match[1], details: 3 }); } this.data.device.type = Constants.deviceType.MOBILE; @@ -502,25 +504,25 @@ class Os { if (/Android/u.test(ua)) { if ((match = /Android v(1.[0-9][0-9])_[0-9][0-9].[0-9][0-9]-/u.exec(ua))) { this.data.os.name = 'Aliyun OS'; - this.data.os.family = new Family({name: 'Android'}); - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.family = new Family({ name: 'Android' }); + this.data.os.version = new Version({ value: match[1], details: 3 }); } if ((match = /Android[ \/](1.[0-9].[0-9].[0-9]+)-R?T/u.exec(ua))) { this.data.os.name = 'Aliyun OS'; - this.data.os.family = new Family({name: 'Android'}); - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.family = new Family({ name: 'Android' }); + this.data.os.version = new Version({ value: match[1], details: 3 }); } if ((match = /Android ([12].[0-9].[0-9]+)-R-20[0-9]+/u.exec(ua))) { this.data.os.name = 'Aliyun OS'; - this.data.os.family = new Family({name: 'Android'}); - this.data.os.version = new Version({value: match[1], details: 3}); + this.data.os.family = new Family({ name: 'Android' }); + this.data.os.version = new Version({ value: match[1], details: 3 }); } if ((match = /Android 20[0-9]+\./u.exec(ua))) { this.data.os.name = 'Aliyun OS'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.version = null; } } @@ -529,7 +531,7 @@ class Os { if (/Baidu Yi/u.test(ua)) { this.data.os.name = 'Baidu Yi'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.version = null; } @@ -537,7 +539,7 @@ class Os { if (/GoogleTV/u.test(ua)) { this.data.os.name = 'Google TV'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.device.type = Constants.deviceType.TELEVISION; @@ -560,10 +562,10 @@ class Os { if (/LeOS/u.test(ua)) { this.data.os.name = 'LeOS'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); if ((match = /LeOS([0-9\.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.TABLET; @@ -587,10 +589,10 @@ class Os { if (/WoPhone/u.test(ua)) { this.data.os.name = 'WoPhone'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); if ((match = /WoPhone\/([0-9\.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.MOBILE; @@ -601,20 +603,20 @@ class Os { if (/(COS|(China|Chinese) Operating System)/iu.test(ua)) { if ((match = /COS[\/ ]?([0-9]\.[0-9.]+)/iu.exec(ua))) { this.data.os.name = 'COS'; - this.data.os.family = new Family({name: 'Android'}); - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.family = new Family({ name: 'Android' }); + this.data.os.version = new Version({ value: match[1], details: 2 }); } else if ((match = /(?:\(|; )(?:China|Chinese) Operating System ([0-9]\.[0-9.]*);/iu.exec(ua))) { this.data.os.name = 'COS'; - this.data.os.family = new Family({name: 'Android'}); - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.family = new Family({ name: 'Android' }); + this.data.os.version = new Version({ value: match[1], details: 2 }); } else if ((match = /COS like Android/iu.exec(ua))) { this.data.os.name = 'COS'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); this.data.os.version = null; this.data.device.type = Constants.deviceType.MOBILE; } else if ((match = /(COS like Android|COSBrowser\/|\(COS;|\(COS 998;)/iu.exec(ua))) { this.data.os.name = 'COS'; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); } } @@ -623,15 +625,15 @@ class Os { if (/RemixOS/u.test(ua)) { this.data.os.name = 'Remix OS'; this.data.os.version = null; - this.data.os.family = new Family({name: 'Android'}); + this.data.os.family = new Family({ name: 'Android' }); if ((match = /RemixOS ([0-9]\.[0-9])/u.exec(ua))) { switch (match[1]) { case '5.1': - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); break; case '6.0': - this.data.os.version = new Version({value: '2.0'}); + this.data.os.version = new Version({ value: '2.0' }); break; } } @@ -679,19 +681,19 @@ class Os { /* Windows NT */ if (/Windows 2000/u.test(ua)) { - this.data.os.version = new Version({value: '5.0', alias: '2000'}); + this.data.os.version = new Version({ value: '5.0', alias: '2000' }); } if (/(Windows XP|WinXP)/u.test(ua)) { - this.data.os.version = new Version({value: '5.1', alias: 'XP'}); + this.data.os.version = new Version({ value: '5.1', alias: 'XP' }); } if (/Windows Vista/u.test(ua)) { - this.data.os.version = new Version({value: '6.0', alias: 'Vista'}); + this.data.os.version = new Version({ value: '6.0', alias: 'Vista' }); } if ((match = /(?:Windows NT |WinNT)([0-9][0-9]?\.[0-9])/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); switch (match[1]) { case '10.1': @@ -732,7 +734,7 @@ class Os { break; case '6.1': - this.data.os.version = new Version({value: match[1], alias: '7'}); + this.data.os.version = new Version({ value: match[1], alias: '7' }); break; case '6.0': this.data.os.version = new Version({ @@ -780,29 +782,29 @@ class Os { /* Windows */ if (/(Windows 95|Win95)/u.test(ua)) { - this.data.os.version = new Version({value: '4.0', alias: '95'}); + this.data.os.version = new Version({ value: '4.0', alias: '95' }); } if (/(Windows 98|Win98)/u.test(ua)) { - this.data.os.version = new Version({value: '4.1', alias: '98'}); + this.data.os.version = new Version({ value: '4.1', alias: '98' }); } if (/(Windows M[eE]|WinME)/u.test(ua)) { - this.data.os.version = new Version({value: '4.9', alias: 'ME'}); + this.data.os.version = new Version({ value: '4.9', alias: 'ME' }); } if ((match = /(?:Windows|Win 9x) (([1234]\.[0-9])[0-9\.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); switch (match[2]) { case '4.0': - this.data.os.version = new Version({value: '4.0', alias: '95'}); + this.data.os.version = new Version({ value: '4.0', alias: '95' }); break; case '4.1': - this.data.os.version = new Version({value: '4.1', alias: '98'}); + this.data.os.version = new Version({ value: '4.1', alias: '98' }); break; case '4.9': - this.data.os.version = new Version({value: '4.9', alias: 'ME'}); + this.data.os.version = new Version({ value: '4.9', alias: 'ME' }); break; } } @@ -811,14 +813,14 @@ class Os { if (/WPDesktop/u.test(ua)) { this.data.os.name = 'Windows Phone'; - this.data.os.version = new Version({value: '8.0', details: 2}); + this.data.os.version = new Version({ value: '8.0', details: 2 }); this.data.device.type = Constants.deviceType.MOBILE; this.data.browser.mode = 'desktop'; } if (/WP7/u.test(ua)) { this.data.os.name = 'Windows Phone'; - this.data.os.version = new Version({value: '7', details: 1}); + this.data.os.version = new Version({ value: '7', details: 1 }); this.data.device.type = Constants.deviceType.MOBILE; this.data.browser.mode = 'desktop'; } @@ -828,7 +830,7 @@ class Os { this.data.device.type = Constants.deviceType.MOBILE; if ((match = /WinMobile\/([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } } @@ -840,29 +842,29 @@ class Os { if (/ IEMobile\/9/u.test(ua)) { this.data.os.name = 'Windows Phone'; - this.data.os.version = new Version({value: '7.5', details: 2}); + this.data.os.version = new Version({ value: '7.5', details: 2 }); } if (/ IEMobile 8/u.test(ua)) { - this.data.os.version = new Version({value: '6.5', details: 2}); + this.data.os.version = new Version({ value: '6.5', details: 2 }); } if (/ IEMobile 7/u.test(ua)) { - this.data.os.version = new Version({value: '6.1', details: 2}); + this.data.os.version = new Version({ value: '6.1', details: 2 }); } if (/ IEMobile 6/u.test(ua)) { - this.data.os.version = new Version({value: '6.0', details: 2}); + this.data.os.version = new Version({ value: '6.0', details: 2 }); } } else { this.data.os.name = 'Windows CE'; if ((match = /WindowsCEOS\/([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } if ((match = /Windows CE ([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } } @@ -870,9 +872,10 @@ class Os { if ( !model && - (match = /IEMobile [0-9.]+\)\s{1,2}(?:PPC; |SP; |Smartphone; )?(?:[0-9]+[Xx][0-9]+;? )?(?:VZW; )?([^;\(]+)/u.exec( - ua - )) + (match = + /IEMobile [0-9.]+\)\s{1,2}(?:PPC; |SP; |Smartphone; )?(?:[0-9]+[Xx][0-9]+;? )?(?:VZW; )?([^;\(]+)/u.exec( + ua + )) ) { if (!/(Profile\/MIDP|UNTRUSTED)/u.test(match[1])) { model = match[1]; @@ -932,9 +935,10 @@ class Os { if ( !model && - (match = /MSIE [0-9.]+; Windows CE; ([^;\)]+)(?:; (?:PPC|SP|Smartphone); [0-9]+x[0-9]+)?\)( \[[a-zA-Z\-]+\])?$/u.exec( - ua - )) + (match = + /MSIE [0-9.]+; Windows CE; ([^;\)]+)(?:; (?:PPC|SP|Smartphone); [0-9]+x[0-9]+)?\)( \[[a-zA-Z\-]+\])?$/u.exec( + ua + )) ) { if (!/^(IEMobile|MIDP-2.0|Smartphone|PPC$)/u.test(match[1])) { model = match[1]; @@ -992,7 +996,7 @@ class Os { this.data.device.type = Constants.deviceType.MOBILE; if ((match = /Windows ?Mobile[\/ ]([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } if ((match = /Windows Mobile; (?:SHARP\/)?([^;]+); (?:PPC|Smartphone);/u.exec(ua))) { @@ -1023,7 +1027,7 @@ class Os { this.data.device.type = Constants.deviceType.MOBILE; if ((match = /Windows Phone(?: OS)?[ \/]([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); if (parseInt(match[1], 10) < 7) { this.data.os.name = 'Windows Mobile'; @@ -1061,9 +1065,10 @@ class Os { /* Windows Phone 7 and 8 */ if ( - (match = /IEMobile\/[^;]+;(?: ARM; Touch; )?(?:rv:[0-9]+; )?(?: WpsLondonTest; )?\s*([^;\s][^;\)]*);\s*([^;\)\s][^;\)]*)[;|\)]/u.exec( - ua - )) + (match = + /IEMobile\/[^;]+;(?: ARM; Touch; )?(?:rv:[0-9]+; )?(?: WpsLondonTest; )?\s*([^;\s][^;\)]*);\s*([^;\)\s][^;\)]*)[;|\)]/u.exec( + ua + )) ) { this.data.device.manufacturer = match[1]; this.data.device.model = match[2]; @@ -1078,9 +1083,10 @@ class Os { /* Windows Phone 10 */ if ( - (match = /Windows Phone 1[0-9]\.[0-9]; Android [0-9\.]+; (?:WebView\/[0-9\.]+; )?([^;\s][^;]*);\s*([^;\)\s][^;\)]*)[;|\)]/u.exec( - ua - )) + (match = + /Windows Phone 1[0-9]\.[0-9]; Android [0-9\.]+; (?:WebView\/[0-9\.]+; )?([^;\s][^;]*);\s*([^;\)\s][^;\)]*)[;|\)]/u.exec( + ua + )) ) { this.data.device.manufacturer = match[1]; this.data.device.model = match[2]; @@ -1109,9 +1115,10 @@ class Os { /* Third party browsers */ if ( - (match = /IEMobile\/[^;]+;(?: ARM; Touch; )?\s*(?:[^\/]+\/[^\/]+);\s*([^;\s][^;]*);\s*([^;\)\s][^;\)]*)[;|\)]/u.exec( - ua - )) + (match = + /IEMobile\/[^;]+;(?: ARM; Touch; )?\s*(?:[^\/]+\/[^\/]+);\s*([^;\s][^;]*);\s*([^;\)\s][^;\)]*)[;|\)]/u.exec( + ua + )) ) { this.data.device.manufacturer = match[1]; this.data.device.model = match[2]; @@ -1291,7 +1298,7 @@ class Os { this.data.os.name = 'Bada'; if ((match = /[b|B]ada[\/ ]([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } this.data.device.type = Constants.deviceType.MOBILE; @@ -1322,7 +1329,7 @@ class Os { this.data.os.name = 'Tizen'; if ((match = /Tizen[\/ ]?([0-9.]*[0-9])/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /\(([^;]+); ([^\/]+)\//u.exec(ua))) { @@ -1397,7 +1404,7 @@ class Os { this.data.browser.name = 'Samsung Browser'; this.data.browser.channel = null; this.data.browser.stock = true; - this.data.browser.version = new Version({value: match[1]}); + this.data.browser.version = new Version({ value: match[1] }); this.data.browser.channel = null; } } @@ -1425,13 +1432,13 @@ class Os { if ((match = /EPOC(?:32)?[;\-\)]/u.exec(ua))) { this.data.os.name = 'EPOC'; - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.family = new Family({ name: 'Symbian' }); this.data.device.type = Constants.deviceType.PDA; if ((match = /Crystal\/([0-9.]*)/u.exec(ua))) { this.data.os.name = 'Series80'; - this.data.os.version = new Version({value: '1.0'}); - this.data.os.family.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: '1.0' }); + this.data.os.family.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.MOBILE; this.data.device.manufacturer = 'Nokia'; @@ -1441,7 +1448,7 @@ class Os { if (/Nokia\/Series-9200/u.test(ua)) { this.data.os.name = 'Series80'; - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); this.data.device.type = Constants.deviceType.MOBILE; this.data.device.manufacturer = 'Nokia'; @@ -1454,8 +1461,8 @@ class Os { if ((match = /Series80\/([0-9.]*)/u.exec(ua))) { this.data.os.name = 'Series80'; - this.data.os.version = new Version({value: match[1]}); - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.version = new Version({ value: match[1] }); + this.data.os.family = new Family({ name: 'Symbian' }); this.data.device.type = Constants.deviceType.MOBILE; } @@ -1463,26 +1470,26 @@ class Os { if (/Symbian\/3/u.test(ua)) { this.data.os.name = 'Series60'; - this.data.os.version = new Version({value: '5.2'}); - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.version = new Version({ value: '5.2' }); + this.data.os.family = new Family({ name: 'Symbian' }); this.data.device.type = Constants.deviceType.MOBILE; } if (/Series[ ]?60/u.test(ua) || /S60[V\/;]/u.test(ua) || /S60 Symb/u.test(ua)) { this.data.os.name = 'Series60'; - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.family = new Family({ name: 'Symbian' }); this.data.device.type = Constants.deviceType.MOBILE; if ((match = /Series60\/([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /S60\/([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /S60V([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } @@ -1490,19 +1497,19 @@ class Os { if ((match = /UIQ\/([0-9.]*)/u.exec(ua))) { this.data.os.name = 'UIQ'; - this.data.os.version = new Version({value: match[1]}); - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.version = new Version({ value: match[1] }); + this.data.os.family = new Family({ name: 'Symbian' }); this.data.device.type = Constants.deviceType.MOBILE; } /* Symbian */ if (/Symbian/u.test(ua)) { - this.data.os.family = new Family({name: 'Symbian'}); + this.data.os.family = new Family({ name: 'Symbian' }); this.data.device.type = Constants.deviceType.MOBILE; if ((match = /SymbianOS\/([0-9.]*)/u.exec(ua))) { - this.data.os.family.version = new Version({value: match[1]}); + this.data.os.family.version = new Version({ value: match[1] }); } } @@ -1574,7 +1581,7 @@ class Os { if (device.identified) { device.identified |= this.data.device.identified; this.data.os.name = 'Nokia Asha Platform'; - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); this.data.device = device; } @@ -1642,7 +1649,7 @@ class Os { if ((match = /Geos ([0-9.]+)/u.exec(ua))) { this.data.os.name = 'GEOS'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.MOBILE; if ((match = /Nokia-([0-9]{4,4}[a-z]?)/u.exec(ua))) { @@ -1660,7 +1667,7 @@ class Os { let match; if ((match = /(?:web|hpw)OS\/(?:HP webOS )?([0-9.]*)/u.exec(ua))) { this.data.os.name = 'webOS'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = /Tablet/iu.test(ua) ? Constants.deviceType.TABLET : Constants.deviceType.MOBILE; this.data.device.generic = false; } @@ -1728,9 +1735,9 @@ class Os { if ((match = /Kai(OS)?\/([0-9.]+)/i.exec(ua))) { this.data.os.reset({ name: 'KaiOS', - version: new Version({value: match[2]}), + version: new Version({ value: match[2] }), }); - this.data.os.family = new Family({name: 'Firefox OS'}); + this.data.os.family = new Family({ name: 'Firefox OS' }); } } @@ -1760,7 +1767,7 @@ class Os { if (!/Opera/u.test(ua)) { if ((match = /BlackBerry([0-9]+[ei]?)\/([0-9.]*)/u.exec(ua))) { this.data.device.model = match[1]; - this.data.os.version = new Version({value: match[2], details: 2}); + this.data.os.version = new Version({ value: match[2], details: 2 }); } if ((match = /; BlackBerry ([0-9]*);/u.exec(ua))) { @@ -1772,7 +1779,7 @@ class Os { } if ((match = /Version\/([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } if (this.data.os.version && this.data.os.version.toFloat() >= 10) { @@ -1794,7 +1801,7 @@ class Os { if ((match = /\(BB(1[^;]+); ([^\)]+)\)/u.exec(ua))) { this.data.os.name = 'BlackBerry'; - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); this.data.device.manufacturer = 'BlackBerry'; this.data.device.model = match[2]; @@ -1815,7 +1822,7 @@ class Os { this.data.device.identified |= Constants.id.MATCH_UA; if ((match = /Version\/([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } } @@ -1823,7 +1830,7 @@ class Os { if ((match = /RIM Tablet OS ([0-9.]*)/u.exec(ua))) { this.data.os.name = 'BlackBerry Tablet OS'; - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); this.data.device.manufacturer = 'RIM'; this.data.device.model = 'BlackBerry PlayBook'; @@ -1831,7 +1838,7 @@ class Os { this.data.device.identified |= Constants.id.MATCH_UA; } else if (/\(PlayBook;/u.test(ua) && (match = /PlayBook Build\/([0-9.]*)/u.exec(ua))) { this.data.os.name = 'BlackBerry Tablet OS'; - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); this.data.device.manufacturer = 'RIM'; this.data.device.model = 'BlackBerry PlayBook'; @@ -1840,7 +1847,7 @@ class Os { } else if (/PlayBook/u.test(ua) && !/Android/u.test(ua)) { if ((match = /Version\/([0-9.]*)/u.exec(ua))) { this.data.os.name = 'BlackBerry Tablet OS'; - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); this.data.device.manufacturer = 'RIM'; this.data.device.model = 'BlackBerry PlayBook'; @@ -1888,19 +1895,19 @@ class Os { this.data.os.version = null; if ((match = /OpenTV Build\/([0-9\.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /OpenTV ([0-9\.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /Opentv([0-9]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /OTV([0-9\.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } } @@ -1913,7 +1920,7 @@ class Os { let match; if ((match = /Qtopia\/([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } } @@ -1935,8 +1942,8 @@ class Os { if ((match = /(?:UNIX_System_V|UNIX_SV) ([0-9.]*)/u.exec(ua))) { this.data.os.name = 'UNIX System V'; - this.data.os.family = new Family({name: 'UNIX'}); - this.data.os.version = new Version({value: match[1]}); + this.data.os.family = new Family({ name: 'UNIX' }); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.DESKTOP; } @@ -1944,10 +1951,10 @@ class Os { if (/OSF1?[ _]/u.test(ua)) { this.data.os.name = 'Digital Unix'; - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.family = new Family({ name: 'UNIX' }); if ((match = /OSF1?[ _]V?([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -1957,10 +1964,10 @@ class Os { if (/ULTRIX/u.test(ua)) { this.data.os.name = 'ULTRIX'; - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.family = new Family({ name: 'BSD' }); if ((match = /ULTRIX ([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -1970,10 +1977,10 @@ class Os { if (/HP-UX/u.test(ua)) { this.data.os.name = 'HP-UX'; - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.family = new Family({ name: 'UNIX' }); if ((match = /HP-UX [A-Z].0?([1-9][0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -1983,37 +1990,37 @@ class Os { if (/SunOS/u.test(ua)) { this.data.os.name = 'Solaris'; - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.family = new Family({ name: 'UNIX' }); if ((match = /SunOS ([1234]\.[0-9\.]+)/u.exec(ua))) { this.data.os.name = 'SunOS'; - this.data.os.version = new Version({value: match[1]}); - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.version = new Version({ value: match[1] }); + this.data.os.family = new Family({ name: 'BSD' }); if ((match = /SunOS 4\.1\.([1234])/u.exec(ua))) { this.data.os.name = 'Solaris'; switch (match[1]) { case '1': - this.data.os.version = new Version({value: '1.0'}); + this.data.os.version = new Version({ value: '1.0' }); break; case '2': - this.data.os.version = new Version({value: '1.0.1'}); + this.data.os.version = new Version({ value: '1.0.1' }); break; case '3': - this.data.os.version = new Version({value: '1.1'}); + this.data.os.version = new Version({ value: '1.1' }); break; case '4': - this.data.os.version = new Version({value: '1.1.2'}); + this.data.os.version = new Version({ value: '1.1.2' }); break; } } } if ((match = /SunOS 5\.([123456](?:\.[0-9.]*)?) /u.exec(ua))) { - this.data.os.version = new Version({value: `2.${match[1]}`}); + this.data.os.version = new Version({ value: `2.${match[1]}` }); } else if ((match = /SunOS 5\.([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2021,10 +2028,10 @@ class Os { if ((match = /Solaris(?: ([0-9.]+))?;/u.exec(ua))) { this.data.os.name = 'Solaris'; - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.family = new Family({ name: 'UNIX' }); if ((match = /Solaris ([0-9.]+);/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2034,10 +2041,10 @@ class Os { if (/AIX/u.test(ua)) { this.data.os.name = 'AIX'; - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.family = new Family({ name: 'UNIX' }); if ((match = /AIX ([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2047,14 +2054,14 @@ class Os { if (/IRIX/u.test(ua)) { this.data.os.name = 'IRIX'; - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.family = new Family({ name: 'UNIX' }); if ((match = /IRIX ([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /IRIX;?(?:64|32) ([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2064,11 +2071,11 @@ class Os { if ((match = /NEWS-OS ([0-9\.]+)/u.exec(ua))) { this.data.os.name = 'NEWS OS'; - this.data.os.version = new Version({value: match[1]}); - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.version = new Version({ value: match[1] }); + this.data.os.family = new Family({ name: 'BSD' }); if (/NEWS-OS [56]/u.test(ua)) { - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.family = new Family({ name: 'UNIX' }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2078,8 +2085,8 @@ class Os { if ((match = /EWS-UNIX rev ([0-9.]+)/u.exec(ua))) { this.data.os.name = 'EWS-UX'; - this.data.os.version = new Version({value: match[1]}); - this.data.os.family = new Family({name: 'UNIX'}); + this.data.os.version = new Version({ value: match[1] }); + this.data.os.family = new Family({ name: 'UNIX' }); this.data.device.type = Constants.deviceType.DESKTOP; } @@ -2088,8 +2095,8 @@ class Os { if ((match = /GENIX ([0-9.]+)/u.exec(ua))) { this.data.os.name = 'GENIX'; - this.data.os.version = new Version({value: match[1]}); - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.version = new Version({ value: match[1] }); + this.data.os.family = new Family({ name: 'BSD' }); this.data.device.type = Constants.deviceType.DESKTOP; } @@ -2112,15 +2119,15 @@ class Os { if (/BSD\/386/u.test(ua)) { this.data.os.name = 'BSD/OS'; - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.family = new Family({ name: 'BSD' }); } if (/BSD\/OS/u.test(ua)) { this.data.os.name = 'BSD/OS'; - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.family = new Family({ name: 'BSD' }); if ((match = /BSD\/OS ([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } @@ -2128,10 +2135,10 @@ class Os { if (/FreeBSD/iu.test(ua)) { this.data.os.name = 'FreeBSD'; - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.family = new Family({ name: 'BSD' }); if ((match = /FreeBSD[ -\/]?([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } @@ -2139,10 +2146,10 @@ class Os { if (/OpenBSD/iu.test(ua)) { this.data.os.name = 'OpenBSD'; - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.family = new Family({ name: 'BSD' }); if ((match = /OpenBSD ?([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } @@ -2150,10 +2157,10 @@ class Os { if (/NetBSD/iu.test(ua)) { this.data.os.name = 'NetBSD'; - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.family = new Family({ name: 'BSD' }); if ((match = /NetBSD ?([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } } @@ -2161,7 +2168,7 @@ class Os { if (/DragonFly/iu.test(ua)) { this.data.os.name = 'DragonFly BSD'; - this.data.os.family = new Family({name: 'BSD'}); + this.data.os.family = new Family({ name: 'BSD' }); } } @@ -2189,7 +2196,7 @@ class Os { if (/Black Lab Linux/u.test(ua)) { this.data.os.name = 'Black Lab Linux'; if ((match = /Black Lab Linux ([0-9\.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2204,7 +2211,7 @@ class Os { } if ((match = /CentOS Linux release ([0-9\.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2213,11 +2220,11 @@ class Os { if (/Debian/u.test(ua)) { this.data.os.name = 'Debian'; if ((match = /Debian\/([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /Debian GNU\/Linux ([0-9\.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2232,7 +2239,7 @@ class Os { } if ((match = /Fedora release ([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2241,7 +2248,7 @@ class Os { if (/Gentoo/u.test(ua)) { this.data.os.name = 'Gentoo'; if ((match = /Gentoo Base System release ([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2250,7 +2257,7 @@ class Os { if (/gNewSense/u.test(ua)) { this.data.os.name = 'gNewSense'; if ((match = /gNewSense\/[^(]+\(([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2259,7 +2266,7 @@ class Os { if (/Kubuntu/u.test(ua)) { this.data.os.name = 'Kubuntu'; if ((match = /Kubuntu[ \/]([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2268,7 +2275,7 @@ class Os { if (/Linux Mint/u.test(ua)) { this.data.os.name = 'Linux Mint'; if ((match = /Linux Mint ([0-9.]+)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2277,7 +2284,7 @@ class Os { if (/Mandriva Linux/u.test(ua)) { this.data.os.name = 'Mandriva'; if ((match = /Mandriva Linux\/[0-9.\-]+mdv([0-9]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2286,11 +2293,11 @@ class Os { if (/Mageia/u.test(ua)) { this.data.os.name = 'Mageia'; if ((match = /Mageia\/[0-9\.\-]+mga([0-9]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /Mageia ([0-9\.]+)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2299,7 +2306,7 @@ class Os { if (/Mandriva/u.test(ua)) { this.data.os.name = 'Mandriva'; if ((match = /Mandriva\/[0-9\.\-]+mdv([0-9]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2308,7 +2315,7 @@ class Os { if (/moonOS/u.test(ua)) { this.data.os.name = 'moonOS'; if ((match = /moonOS\/([0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2328,7 +2335,7 @@ class Os { if (/Slackware/u.test(ua)) { this.data.os.name = 'Slackware'; if ((match = /Slackware[ \/](1[0-9.]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2337,11 +2344,11 @@ class Os { if (/SUSE/u.test(ua)) { this.data.os.name = 'SUSE'; if ((match = /SUSE\/([0-9]\.[0-9]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /openSUSE ([0-9\.]+)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2350,7 +2357,7 @@ class Os { if (/Turbolinux/u.test(ua)) { this.data.os.name = 'Turbolinux'; if ((match = /Turbolinux\/([0-9]\.[0-9]+)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2359,11 +2366,11 @@ class Os { if (/Ubuntu/u.test(ua)) { this.data.os.name = 'Ubuntu'; if ((match = /Ubuntu\/([0-9.]*)/u.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } if ((match = /Ubuntu ([0-9\.]+)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1], details: 2}); + this.data.os.version = new Version({ value: match[1], details: 2 }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2371,7 +2378,7 @@ class Os { if ((match = /《붉은별》\/([0-9.]*)/iu.exec(ua))) { this.data.os.name = 'Red Star'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.DESKTOP; } @@ -2391,7 +2398,7 @@ class Os { if ((match = /Linux\/SLP\/([0-9.]+)/u.exec(ua))) { this.data.os.name = 'Linux SLP'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.MOBILE; } @@ -2404,7 +2411,7 @@ class Os { if (/elementary OS/u.test(ua)) { this.data.os.name = 'elementary OS'; if ((match = /elementary OS ([A-Za-z]+)/u.exec(ua))) { - this.data.os.version = new Version({alias: match[1]}); + this.data.os.version = new Version({ alias: match[1] }); } this.data.device.type = Constants.deviceType.DESKTOP; @@ -2423,13 +2430,13 @@ class Os { if ((match = /(?:\(|; )Ubuntu ([0-9.]+) like Android/u.exec(ua))) { this.data.os.name = 'Ubuntu Touch'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.MOBILE; } if ((match = /Lindows ([0-9.]+)/u.exec(ua))) { this.data.os.name = 'Lindows'; - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); this.data.device.type = Constants.deviceType.DESKTOP; } } @@ -2466,17 +2473,17 @@ class Os { } if ((match = /; Brew ([0-9.]+);/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } else if ((match = /BREW; U; ([0-9.]+)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } else if ((match = /[\(;]BREW[\/ ]([0-9.]+)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } else if ((match = /BREW MP ([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } else if ((match = /BMP ([0-9.]*); U/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } else if ((match = /B(?:rew)?MP\/([0-9.]*)/iu.exec(ua))) { - this.data.os.version = new Version({value: match[1]}); + this.data.os.version = new Version({ value: match[1] }); } this.data.device.type = Constants.deviceType.MOBILE; @@ -2521,9 +2528,10 @@ class Os { } if ( - (match = /\(BREW [^;]+; U; [^;]+; [^;]+; Opera Mobi; Presto\/[0-9\.]+\/(?:WAP|AMB|INT)\) ([^\/]+) [^\/]+\//iu.exec( - ua - )) + (match = + /\(BREW [^;]+; U; [^;]+; [^;]+; Opera Mobi; Presto\/[0-9\.]+\/(?:WAP|AMB|INT)\) ([^\/]+) [^\/]+\//iu.exec( + ua + )) ) { this.data.device.model = match[1]; this.data.device.identified = Constants.id.PATTERN; @@ -2550,7 +2558,7 @@ class Os { } const patterns = [ - {name: 'BeOS', regexp: [/BeOS/iu], type: Constants.deviceType.DESKTOP}, + { name: 'BeOS', regexp: [/BeOS/iu], type: Constants.deviceType.DESKTOP }, { name: 'Haiku', regexp: [/Haiku/iu], @@ -2566,7 +2574,7 @@ class Os { regexp: [/MorphOS(?: ([0-9.]*))?/iu], type: Constants.deviceType.DESKTOP, }, - {name: 'AROS', regexp: [/AROS/iu], type: Constants.deviceType.DESKTOP}, + { name: 'AROS', regexp: [/AROS/iu], type: Constants.deviceType.DESKTOP }, { name: 'OpenVMS', regexp: [/OpenVMS V([0-9.]+)/iu, /OpenVMS/iu], @@ -2607,7 +2615,7 @@ class Os { regexp: [/\(MTK;/iu, /\/MTK /iu], type: Constants.deviceType.MOBILE, }, - {name: 'MRE', regexp: [/MRE\\\\/iu], type: Constants.deviceType.MOBILE}, + { name: 'MRE', regexp: [/MRE\\\\/iu], type: Constants.deviceType.MOBILE }, { name: 'MRE', regexp: [/MAUI[-_ ](?:Browser|Runtime)/iu], @@ -2633,14 +2641,14 @@ class Os { regexp: [/Nucleus\//iu], type: Constants.deviceType.MOBILE, }, - {name: 'QNX', regexp: [/QNX/iu], type: Constants.deviceType.MOBILE}, - {name: 'VRE', regexp: [/\(VRE;/iu], type: Constants.deviceType.MOBILE}, + { name: 'QNX', regexp: [/QNX/iu], type: Constants.deviceType.MOBILE }, + { name: 'VRE', regexp: [/\(VRE;/iu], type: Constants.deviceType.MOBILE }, { name: 'SpreadTrum', regexp: [/\(SpreadTrum;/iu], type: Constants.deviceType.MOBILE, }, - {name: 'ThreadX', regexp: [/ThreadX(?:_OS)?\/([0-9.]*)/iu]}, + { name: 'ThreadX', regexp: [/ThreadX(?:_OS)?\/([0-9.]*)/iu] }, ]; const count = patterns.length; diff --git a/src/Analyser/Header/Useragent/Using.js b/src/Analyser/Header/Useragent/Using.js index 466b10d..c9086c8 100644 --- a/src/Analyser/Header/Useragent/Using.js +++ b/src/Analyser/Header/Useragent/Using.js @@ -13,30 +13,30 @@ class Using { return this; } const items = [ - {name: 'AdobeAIR', regexp: /AdobeAIR\/([0-9.]*)/u}, - {name: 'Awesomium', regexp: /Awesomium\/([0-9.]*)/u}, - {name: 'Delphi Embedded Web Browser', regexp: /EmbeddedWB ([0-9.]*)/u}, - {name: 'Delphi Embedded Web Browser', regexp: /bsalsa\.com/u}, - {name: 'Delphi Embedded Web Browser', regexp: /Embedded Web Browser/u}, - {name: 'Canvace', regexp: /Canvace Standalone\/([0-9.]*)/u}, - {name: 'Ekioh', regexp: /Ekioh\/([0-9.]*)/u}, - {name: 'Electron', regexp: /AtomShell\/([0-9.]*)/u}, - {name: 'Electron', regexp: /Electron\/([0-9.]*)/u}, - {name: 'JavaFX', regexp: /JavaFX\/([0-9.]*)/u}, - {name: 'GFXe', regexp: /GFXe\/([0-9.]*)/u}, - {name: 'LuaKit', regexp: /luakit/u}, - {name: 'Titanium', regexp: /Titanium\/([0-9.]*)/u}, - {name: 'OpenWebKitSharp', regexp: /OpenWebKitSharp/u}, - {name: 'Prism', regexp: /Prism\/([0-9.]*)/u}, - {name: 'Qt', regexp: /Qt\/([0-9.]*)/u}, - {name: 'Qt', regexp: /QtWebEngine\/([4-9][0-9.]*)?/u}, - {name: 'Qt', regexp: /QtEmbedded/u}, - {name: 'Qt', regexp: /QtEmbedded.*Qt\/([0-9.]*)/u}, - {name: 'ReqwirelessWeb', regexp: /ReqwirelessWeb\/([0-9.]*)/u}, - {name: 'RhoSimulator', regexp: /RhoSimulator/u}, - {name: 'UWebKit', regexp: /UWebKit\/([0-9.]*)/u}, - {name: 'Node-WebKit', regexp: /nw-tests\/([0-9.]*)/u}, - {name: 'WebKit2.NET', regexp: /WebKit2.NET/u}, + { name: 'AdobeAIR', regexp: /AdobeAIR\/([0-9.]*)/u }, + { name: 'Awesomium', regexp: /Awesomium\/([0-9.]*)/u }, + { name: 'Delphi Embedded Web Browser', regexp: /EmbeddedWB ([0-9.]*)/u }, + { name: 'Delphi Embedded Web Browser', regexp: /bsalsa\.com/u }, + { name: 'Delphi Embedded Web Browser', regexp: /Embedded Web Browser/u }, + { name: 'Canvace', regexp: /Canvace Standalone\/([0-9.]*)/u }, + { name: 'Ekioh', regexp: /Ekioh\/([0-9.]*)/u }, + { name: 'Electron', regexp: /AtomShell\/([0-9.]*)/u }, + { name: 'Electron', regexp: /Electron\/([0-9.]*)/u }, + { name: 'JavaFX', regexp: /JavaFX\/([0-9.]*)/u }, + { name: 'GFXe', regexp: /GFXe\/([0-9.]*)/u }, + { name: 'LuaKit', regexp: /luakit/u }, + { name: 'Titanium', regexp: /Titanium\/([0-9.]*)/u }, + { name: 'OpenWebKitSharp', regexp: /OpenWebKitSharp/u }, + { name: 'Prism', regexp: /Prism\/([0-9.]*)/u }, + { name: 'Qt', regexp: /Qt\/([0-9.]*)/u }, + { name: 'Qt', regexp: /QtWebEngine\/([4-9][0-9.]*)?/u }, + { name: 'Qt', regexp: /QtEmbedded/u }, + { name: 'Qt', regexp: /QtEmbedded.*Qt\/([0-9.]*)/u }, + { name: 'ReqwirelessWeb', regexp: /ReqwirelessWeb\/([0-9.]*)/u }, + { name: 'RhoSimulator', regexp: /RhoSimulator/u }, + { name: 'UWebKit', regexp: /UWebKit\/([0-9.]*)/u }, + { name: 'Node-WebKit', regexp: /nw-tests\/([0-9.]*)/u }, + { name: 'WebKit2.NET', regexp: /WebKit2.NET/u }, ]; const count = items.length; for (let i = 0; i < count; i++) { diff --git a/src/Parser.js b/src/Parser.js index 76458cc..c26e27f 100644 --- a/src/Parser.js +++ b/src/Parser.js @@ -32,7 +32,7 @@ class Parser extends Main { let o = options; let h; if (typeof headers === 'string') { - h = {'User-Agent': headers}; + h = { 'User-Agent': headers }; } else if (headers['headers']) { h = headers['headers']; diff --git a/src/data/Applications.js b/src/data/Applications.js index 13e8088..5da174a 100644 --- a/src/data/Applications.js +++ b/src/data/Applications.js @@ -24,8 +24,8 @@ class Applications { */ static identifyBrowser(ua = '') { if (ua.match(Applications.BROWSERS_REGEX)) { - for (let type of Object.keys(Applications.BROWSERS)) { - for (let item of Applications.BROWSERS[type]) { + for (const type of Object.keys(Applications.BROWSERS)) { + for (const item of Applications.BROWSERS[type]) { let match; if ((match = ua.match(item.regexp))) { return { @@ -42,7 +42,7 @@ class Applications { }) : null, }, - device: typeof item.type !== 'undefined' ? {type: item.type} : null, + device: typeof item.type !== 'undefined' ? { type: item.type } : null, }; } } @@ -58,8 +58,8 @@ class Applications { */ static identifyOther(ua = '') { if (ua.match(Applications.OTHERS_REGEX)) { - for (let type of Object.keys(Applications.OTHERS)) { - for (let item of Applications.OTHERS[type]) { + for (const type of Object.keys(Applications.OTHERS)) { + for (const item of Applications.OTHERS[type]) { let match; if ((match = ua.match(item.regexp))) { return { @@ -76,7 +76,7 @@ class Applications { }) : null, }, - device: typeof item.type !== 'undefined' ? {type: item.type} : null, + device: typeof item.type !== 'undefined' ? { type: item.type } : null, }; } } @@ -96,7 +96,7 @@ class Applications { } if (ua.match(Applications.BOTS_REGEX)) { - for (let item of Applications.BOTS) { + for (const item of Applications.BOTS) { let match; if ((match = ua.match(item.regexp))) { return new Browser({ diff --git a/src/data/BuildIds.js b/src/data/BuildIds.js index 11aa7f9..228503d 100644 --- a/src/data/BuildIds.js +++ b/src/data/BuildIds.js @@ -17,7 +17,7 @@ class BuildIds { if (typeof build === 'object') { return new Version(build); } else { - return new Version({value: build}); + return new Version({ value: build }); } } } diff --git a/src/data/DeviceModels.js b/src/data/DeviceModels.js index e4695bc..5b61635 100644 --- a/src/data/DeviceModels.js +++ b/src/data/DeviceModels.js @@ -189,7 +189,7 @@ class DeviceModels { const keys = [`@${model.substring(0, 2).toUpperCase()}`, '@']; let pattern = null; let match = null; - for (let key of keys) { + for (const key of keys) { if (index[key]) { for (let v of index[key]) { const originalV = v; @@ -207,7 +207,7 @@ class DeviceModels { } } - for (let m2 of Object.keys(list[v] || list[originalV])) { + for (const m2 of Object.keys(list[v] || list[originalV])) { const v2 = (list[v] || list[originalV])[m2]; if (DeviceModels.hasMatch(m2, model)) { match = v2; diff --git a/src/data/Manufacturers.js b/src/data/Manufacturers.js index e1c0a4e..56bc0e2 100644 --- a/src/data/Manufacturers.js +++ b/src/data/Manufacturers.js @@ -1,5 +1,7 @@ const Constants = require('../constants'); -const {MANUFACTURERS: {TELEVISION, GENERIC}} = require('../../data/manufacturer-names'); +const { + MANUFACTURERS: { TELEVISION, GENERIC }, +} = require('../../data/manufacturer-names'); /** * Manufacturers utility * diff --git a/src/model/Browser.js b/src/model/Browser.js index a4d410d..c67e751 100644 --- a/src/model/Browser.js +++ b/src/model/Browser.js @@ -23,7 +23,7 @@ class Browser extends NameVersion { * @internal */ constructor(properties = {}) { - super(Object.assign({}, {stock: true, hidden: false, mode: '', type: ''}, properties)); + super(Object.assign({}, { stock: true, hidden: false, mode: '', type: '' }, properties)); } /** diff --git a/src/model/Os.js b/src/model/Os.js index afacd90..410e9d5 100644 --- a/src/model/Os.js +++ b/src/model/Os.js @@ -16,7 +16,7 @@ class Os extends NameVersion { * @internal */ constructor(properties = {}) { - super(Object.assign({}, {hidden: false}, properties)); + super(Object.assign({}, { hidden: false }, properties)); } /** @@ -77,9 +77,9 @@ class Os extends NameVersion { return ''; } - return `${this.getName()}${this.version && !this.version.hidden ? - ` ${this.getVersion()}` : - ''}${this.edition ? ` ${this.edition}` : ''}`.trim(); + return `${this.getName()}${this.version && !this.version.hidden ? ` ${this.getVersion()}` : ''}${ + this.edition ? ` ${this.edition}` : '' + }`.trim(); } /** @@ -104,7 +104,7 @@ class Os extends NameVersion { result.edition = this.edition; } let versionObj; - if (this.version && Object.keys(( versionObj = this.version.toObject())).length) { + if (this.version && Object.keys((versionObj = this.version.toObject())).length) { result.version = versionObj; } return result; diff --git a/src/model/Version.js b/src/model/Version.js index 63eb941..343ae29 100644 --- a/src/model/Version.js +++ b/src/model/Version.js @@ -21,7 +21,7 @@ class Version extends Base { if (properties.value) { properties.value = '' + properties.value; } - super(Object.assign({}, {hidden: false}, properties)); + super(Object.assign({}, { hidden: false }, properties)); } /** @@ -129,7 +129,7 @@ class Version extends Base { result += '.'; count = parts.length; for (let p = 1; p < count; p++) { - let tempString = `0000${parts[p]}`; + const tempString = `0000${parts[p]}`; result += tempString.substr(tempString.length - 4); } } @@ -170,7 +170,7 @@ class Version extends Base { if (this.value) { const matches = this.value.match(/([0-9]+)(?:\.([0-9]+))?(?:\.([0-9]+))?(?:\.([0-9]+))?(?:([ab])([0-9]+))?/); if (matches) { - let v = [matches[1]]; + const v = [matches[1]]; if (matches[2]) { v.push(matches[2]); } diff --git a/src/model/primitive/NameVersion.js b/src/model/primitive/NameVersion.js index d947934..644f7d4 100644 --- a/src/model/primitive/NameVersion.js +++ b/src/model/primitive/NameVersion.js @@ -19,7 +19,6 @@ class NameVersion extends Base { properties && this.set(properties); } - /** * Identify the version based on a pattern * @@ -31,7 +30,7 @@ class NameVersion extends Base { identifyVersion(pattern, subject, defaults = {}) { let match; let version; - if ((match = pattern.exec(subject) ) !== null) { + if ((match = pattern.exec(subject)) !== null) { version = match[1]; if (defaults.type) { @@ -45,11 +44,10 @@ class NameVersion extends Base { } } - this.version = new Version(Object.assign({}, defaults, {value: version})); + this.version = new Version(Object.assign({}, defaults, { value: version })); } } - /** * Get the name in a human readable format * @@ -59,7 +57,6 @@ class NameVersion extends Base { return this.alias || this.name || ''; } - /** * Get the version in a human readable format * @@ -69,7 +66,6 @@ class NameVersion extends Base { return this.version ? this.version.toString() : ''; } - /** * Is a name detected? * @@ -79,7 +75,6 @@ class NameVersion extends Base { return !!this.name; } - /** * Get the name and version in a human readable format * diff --git a/test/model/BrowserTest.js b/test/model/BrowserTest.js index b69f359..443bc45 100644 --- a/test/model/BrowserTest.js +++ b/test/model/BrowserTest.js @@ -1,5 +1,5 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Browser = require('../../src/model/Browser'); const Version = require('../../src/model/Version'); const Family = require('../../src/model/Family'); @@ -7,18 +7,17 @@ const Using = require('../../src/model/Using'); describe('Browser Class', () => { describe('test defaults', () => { - it('should be as expected', (done) => { + it('should be as expected', () => { const browser = new Browser(); expect(browser.stock).to.be.true(); expect(browser.hidden).to.be.false(); expect(browser.mode).to.be.equal(''); expect(browser.type).to.be.equal(''); - done(); }); }); describe('test reset', () => { - it('should reset to defaults', (done) => { + it('should reset to defaults', () => { const browser = new Browser({ stock: false, hidden: true, @@ -37,265 +36,233 @@ describe('Browser Class', () => { expect(browser.hidden).to.be.false(); expect(browser.mode).to.be.equal(''); expect(browser.type).to.be.equal(''); - done(); }); }); describe('test getName method', () => { - it('should return the name', (done) => { + it('should return the name', () => { const browser = new Browser({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); expect(browser.getName()).to.be.equal('Chrome'); - done(); }); }); describe('test getVersion method', () => { describe('without details property', () => { - it('should return the entire version', (done) => { + it('should return the entire version', () => { const browser = new Browser({ name: 'Chrome', - version: new Version({value: '47.0.2526.73'}), + version: new Version({ value: '47.0.2526.73' }), }); expect(browser.getVersion()).to.equal('47.0.2526.73'); - done(); }); }); describe('without details property', () => { - it('should return the entire version', (done) => { + it('should return the entire version', () => { const browser = new Browser({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); expect(browser.getVersion()).to.equal('47'); - done(); }); }); }); describe('test isDetected method', () => { - it('should return true', (done) => { + it('should return true', () => { const browser = new Browser(); expect(browser.isDetected()).to.be.false(); browser.reset({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); expect(browser.isDetected()).to.be.true(); - done(); }); }); describe('test isFamily method', () => { describe('with no initialization', () => { - it('should return false', (done) => { + it('should return false', () => { const browser = new Browser(); expect(browser.isFamily('Chrome')).to.be.false(); - done(); }); }); describe('with correct family', () => { - it('should return true', (done) => { + it('should return true', () => { const browser = new Browser({ name: 'Opera', - family: new Family({name: 'Chrome'}), + family: new Family({ name: 'Chrome' }), }); expect(browser.isFamily('Chrome')).to.be.true(); - done(); }); }); describe('with wrong family', () => { - it('should return true', (done) => { + it('should return true', () => { const browser = new Browser({ name: 'Opera', - family: new Family({name: 'Chrome'}), + family: new Family({ name: 'Chrome' }), }); expect(browser.isFamily('Firefox')).to.be.false(); - done(); }); }); }); describe('test toString method', () => { describe('with version details property', () => { - it('should return the name and version', (done) => { + it('should return the name and version', () => { const browser = new Browser({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); expect(browser.toString()).to.be.equal('Chrome 47'); - - done(); }); }); describe('with hidden set to true ', () => { - it('should return an empty string', (done) => { + it('should return an empty string', () => { const browser = new Browser({ name: 'Safari', hidden: true, - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); expect(browser.toString()).to.be.equal(''); - - done(); }); }); describe('with name and using property', () => { - it('should return the name', (done) => { + it('should return the name', () => { const browser = new Browser({ name: 'TestBrowser', - using: new Using({name: 'Crosswalk Webview'}), + using: new Using({ name: 'Crosswalk Webview' }), }); expect(browser.toString()).to.be.equal('TestBrowser'); - - done(); }); }); describe('without name and with using property', () => { - it('should return the name', (done) => { + it('should return the name', () => { const browser = new Browser({ - using: new Using({name: 'Crosswalk Webview'}), + using: new Using({ name: 'Crosswalk Webview' }), }); expect(browser.toString()).to.be.equal('Crosswalk Webview'); - - done(); }); }); describe('with name and hidden set to true ', () => { - it('should return an empty string', (done) => { + it('should return an empty string', () => { const browser = new Browser({ name: 'BlackBerry Browser', hidden: true, }); expect(browser.toString()).to.be.equal(''); - - done(); }); }); }); describe('test identifyVersion method', () => { describe('with matching RegExp and details set to 1 ', () => { - it('should return the major version', (done) => { + it('should return the major version', () => { const browser = new Browser(); - browser.identifyVersion(/Chrome\/([0-9.]+)/u, 'Chrome/47.0.2526.73', {details: 1}); + browser.identifyVersion(/Chrome\/([0-9.]+)/u, 'Chrome/47.0.2526.73', { details: 1 }); expect(browser.getVersion()).to.be.equal('47'); - - done(); }); }); describe('with matching RegExp and legacy type', () => { - it('should return the version in the current format', (done) => { + it('should return the version in the current format', () => { const browser = new Browser(); - browser.identifyVersion(/Mozilla\/([0-9.]+)/u, 'Mozilla/2.03', {type: 'legacy'}); + browser.identifyVersion(/Mozilla\/([0-9.]+)/u, 'Mozilla/2.03', { type: 'legacy' }); expect(browser.getVersion()).to.be.equal('2.0.3'); - - done(); }); }); describe('with not matching RegExp', () => { - it('should return empty version', (done) => { + it('should return empty version', () => { const browser = new Browser(); browser.identifyVersion(/Safari\/([0-9.]+)/u, 'Chrome/47.0.2526.73'); expect(browser.getVersion()).to.be.empty(); - - done(); }); }); }); describe('test toObject method', () => { describe('with name empty', () => { - it('should return an empty object', (done) => { + it('should return an empty object', () => { const browser = new Browser({ name: '', }); expect(browser.toObject()).equal({}); - done(); }); }); describe('with name and details filled', () => { - it('should return the name value according to details level', (done) => { + it('should return the name value according to details level', () => { const browser = new Browser({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); - expect(browser.toObject()).to.equal({name: 'Chrome', version: '47'}); - done(); + expect(browser.toObject()).to.equal({ name: 'Chrome', version: '47' }); }); }); describe('with name and alias filled', () => { - it('should return an object with name and alias properties', (done) => { - const properties = {name: 'TestBrowser', alias: 'Alias'}; + it('should return an object with name and alias properties', () => { + const properties = { name: 'TestBrowser', alias: 'Alias' }; const browser = new Browser(properties); expect(browser.toObject()).to.equal(properties); - done(); }); }); describe('with name and family filled', () => { - it('should return an object with name and family properties', (done) => { + it('should return an object with name and family properties', () => { const browser = new Browser({ name: 'Opera', - family: new Family({name: 'Chrome'}), + family: new Family({ name: 'Chrome' }), }); expect(browser.toObject()).to.equal({ name: 'Opera', family: 'Chrome', }); - - done(); }); }); describe('with name and using filled', () => { - it('should return an object with name and using properties', (done) => { + it('should return an object with name and using properties', () => { const browser = new Browser({ name: 'TestBrowser', - using: new Using({name: 'Crosswalk WebView'}), + using: new Using({ name: 'Crosswalk WebView' }), }); expect(browser.toObject()).to.equal({ name: 'TestBrowser', using: 'Crosswalk WebView', }); - - done(); }); }); }); }); - diff --git a/test/model/DeviceTest.js b/test/model/DeviceTest.js index 137362f..1708143 100644 --- a/test/model/DeviceTest.js +++ b/test/model/DeviceTest.js @@ -1,58 +1,50 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Device = require('../../src/model/Device'); const Constants = require('../../src/constants'); describe('Device Class', () => { describe('test defaults', () => { - it('should be as expected', (done) => { + it('should be as expected', () => { const device = new Device(); expect(device.generic).to.be.true(); expect(device.identified).to.be.equal(Constants.id.NONE); expect(device.type).to.be.equal(''); expect(device.subtype).to.be.equal(''); - - done(); }); }); describe('test empty', () => { - it('should all be empty', (done) => { + it('should all be empty', () => { const device = new Device(); expect(device.getManufacturer()).to.be.equal(''); expect(device.getModel()).to.be.equal(''); expect(device.getCarrier()).to.be.equal(''); - - done(); }); }); describe('test with properties', () => { - it('should all be empty', (done) => { - const device = new Device({model: 'Wii'}); + it('should all be empty', () => { + const device = new Device({ model: 'Wii' }); expect(device.getModel()).to.be.equal('Wii'); - - done(); }); }); describe('test set method', () => { - it('should correctly set properties', (done) => { + it('should correctly set properties', () => { const device = new Device(); - device.set({model: 'Wii'}); + device.set({ model: 'Wii' }); expect(device.getModel()).to.be.equal('Wii'); - - done(); }); }); describe('test setIdentification method', () => { - it('should correctly set identification data', (done) => { + it('should correctly set identification data', () => { const device = new Device(); device.setIdentification({ @@ -63,14 +55,12 @@ describe('Device Class', () => { expect(device.getManufacturer()).to.be.equal('Microsoft'); expect(device.getModel()).to.be.equal('Xbox One'); expect(device.generic).to.be.false(); - - done(); }); }); describe('test reset', () => { describe('without Defaults', () => { - it('should reset to defaults', (done) => { + it('should reset to defaults', () => { const device = new Device(); device.setIdentification({ @@ -90,33 +80,29 @@ describe('Device Class', () => { expect(device.identified).to.be.equal(Constants.id.NONE); expect(device.type).to.be.equal(''); expect(device.subtype).to.be.equal(''); - - done(); }); }); describe('with Defaults', () => { - it('should reset to defaults and apply defaults', (done) => { + it('should reset to defaults and apply defaults', () => { const device = new Device(); - device.setIdentification({model: 'Wii'}); + device.setIdentification({ model: 'Wii' }); expect(device.getModel()).to.be.equal('Wii'); expect(device.generic).to.be.false(); - device.reset({model: 'Xbox One'}); + device.reset({ model: 'Xbox One' }); expect(device.getModel()).to.be.equal('Xbox One'); expect(device.generic).to.be.true(); - - done(); }); }); }); describe('test setIdentification method', () => { describe('with model and no series', () => { - it('should work', (done) => { + it('should work', () => { const device = new Device(); device.setIdentification({ @@ -130,13 +116,11 @@ describe('Device Class', () => { expect(device.manufacturer).to.be.equal('Nintendo'); expect(device.model).to.be.equal('Wii'); expect(device.generic).to.be.false(); - - done(); }); }); describe('with series no model', () => { - it('should return the series as model', (done) => { + it('should return the series as model', () => { const device = new Device(); device.setIdentification({ @@ -150,13 +134,11 @@ describe('Device Class', () => { expect(device.manufacturer).to.be.equal('Kobo'); expect(device.series).to.be.equal('eReader'); expect(device.generic).to.be.true(); - - done(); }); }); describe('with series and model', () => { - it('should work', (done) => { + it('should work', () => { const device = new Device(); device.setIdentification({ @@ -172,13 +154,11 @@ describe('Device Class', () => { expect(device.model).to.be.equal('PRS-T2'); expect(device.series).to.be.equal('Reader'); expect(device.generic).to.be.false(); - - done(); }); }); describe('with carrier', () => { - it('should work', (done) => { + it('should work', () => { const device = new Device(); device.setIdentification({ @@ -190,13 +170,11 @@ describe('Device Class', () => { expect(device.getCarrier()).to.be.equal('DoCoMo'); expect(device.carrier).to.be.equal('DoCoMo'); expect(device.generic).to.be.false(); - - done(); }); }); describe('with model but without calling setIdentification', () => { - it('should not set the generic to false', (done) => { + it('should not set the generic to false', () => { const device = new Device(); device.set({ @@ -207,15 +185,13 @@ describe('Device Class', () => { expect(device.getManufacturer()).to.be.equal(''); expect(device.getModel()).to.be.equal('Xbox One'); expect(device.generic).to.be.true(); - - done(); }); }); }); describe('test toString method', () => { describe('with manufacturer and series property', () => { - it('should return the manufacturer and series', (done) => { + it('should return the manufacturer and series', () => { const device = new Device(); device.setIdentification({ @@ -224,13 +200,11 @@ describe('Device Class', () => { }); expect(device.toString()).to.be.equal('Kobo eReader'); - - done(); }); }); describe('with manufacturer and model property', () => { - it('should return the manufacturer and model', (done) => { + it('should return the manufacturer and model', () => { const device = new Device(); device.setIdentification({ @@ -239,13 +213,11 @@ describe('Device Class', () => { }); expect(device.toString()).to.be.equal('Nintendo Wii'); - - done(); }); }); describe('with manufacturer, model and series property', () => { - it('should return the manufacturer, model and series', (done) => { + it('should return the manufacturer, model and series', () => { const device = new Device(); device.setIdentification({ @@ -255,13 +227,11 @@ describe('Device Class', () => { }); expect(device.toString()).to.be.equal('Sony PRS-T2 Reader'); - - done(); }); }); describe('with manufacturer and model that starts with the manufacturer', () => { - it('should return only the model', (done) => { + it('should return only the model', () => { const device = new Device(); device.setIdentification({ @@ -270,13 +240,11 @@ describe('Device Class', () => { }); expect(device.toString()).to.be.equal('AppleTV'); - - done(); }); }); describe('with manufacturer and model that are equal', () => { - it('should return only the manufacturer', (done) => { + it('should return only the manufacturer', () => { const device = new Device(); device.setIdentification({ @@ -285,13 +253,11 @@ describe('Device Class', () => { }); expect(device.toString()).to.be.equal('OUYA'); - - done(); }); }); describe('with manufacturer and model but with hidden', () => { - it('should return empty string', (done) => { + it('should return empty string', () => { const device = new Device(); device.setIdentification({ @@ -301,15 +267,13 @@ describe('Device Class', () => { }); expect(device.toString()).to.be.equal(''); - - done(); }); }); }); describe('test isDetected method', () => { describe('with manufacturer and model', () => { - it('should return that is detected', (done) => { + it('should return that is detected', () => { const device = new Device(); expect(device.isDetected()).to.be.false(); @@ -322,13 +286,11 @@ describe('Device Class', () => { device.reset(); expect(device.isDetected()).to.be.false(); - - done(); }); }); describe('with model', () => { - it('should return that is detected', (done) => { + it('should return that is detected', () => { const device = new Device(); expect(device.isDetected()).to.be.false(); @@ -336,12 +298,10 @@ describe('Device Class', () => { model: 'Xbox One', }); expect(device.isDetected()).to.be.true(); - - done(); }); }); describe('with manufacturer', () => { - it('should return that is detected', (done) => { + it('should return that is detected', () => { const device = new Device(); expect(device.isDetected()).to.be.false(); @@ -349,15 +309,13 @@ describe('Device Class', () => { manufacturer: 'Microsoft', }); expect(device.isDetected()).to.be.true(); - - done(); }); }); }); describe('test toObject method', () => { describe('with name manufacturer type and subtype', () => { - it('should return an object with the four properties', (done) => { + it('should return an object with the four properties', () => { const device = new Device(); device.setIdentification({ @@ -373,11 +331,10 @@ describe('Device Class', () => { type: Constants.deviceType.GAMING, subtype: Constants.deviceSubType.CONSOLE, }); - done(); }); }); describe('with name manufacturer carrier type and subtype', () => { - it('should return an object with the five properties', (done) => { + it('should return an object with the five properties', () => { const device = new Device(); device.setIdentification({ @@ -395,7 +352,6 @@ describe('Device Class', () => { type: Constants.deviceType.MOBILE, subtype: Constants.deviceSubType.FEATURE, }); - done(); }); }); }); diff --git a/test/model/EngineTest.js b/test/model/EngineTest.js index 1619faf..92e8de6 100644 --- a/test/model/EngineTest.js +++ b/test/model/EngineTest.js @@ -1,170 +1,150 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Engine = require('../../src/model/Engine'); const Version = require('../../src/model/Version'); describe('Engine Class', () => { describe('getName method', () => { describe('without alias', () => { - it('should return the right name', (done) => { + it('should return the right name', () => { const engine = new Engine(); expect(engine.getName()).to.be.empty(); engine.reset({ name: 'WebKit', - version: new Version({value: '601.3.9'}), + version: new Version({ value: '601.3.9' }), }); expect(engine.getName()).to.be.equal('WebKit'); - - done(); }); }); describe('with alias', () => { - it('should return the alias', (done) => { + it('should return the alias', () => { const engine = new Engine(); expect(engine.getName()).to.be.empty(); engine.reset({ name: 'WebKit', alias: 'Blink', - version: new Version({value: '601.3.9'}), + version: new Version({ value: '601.3.9' }), }); expect(engine.getName()).to.be.equal('Blink'); - - done(); }); }); }); describe('getVersion method', () => { describe('without details property', () => { - it('should return the entire version', (done) => { + it('should return the entire version', () => { const engine = new Engine(); expect(engine.getVersion()).to.be.empty(); engine.reset({ name: 'WebKit', - version: new Version({value: '601.3.9'}), + version: new Version({ value: '601.3.9' }), }); expect(engine.getVersion()).to.be.equal('601.3.9'); - - done(); }); }); describe('with details property', () => { - it('should return the truncated version number', (done) => { + it('should return the truncated version number', () => { const engine = new Engine(); expect(engine.getVersion()).to.be.empty(); engine.reset({ name: 'WebKit', - version: new Version({value: '601.3.9', details: 1}), + version: new Version({ value: '601.3.9', details: 1 }), }); expect(engine.getVersion()).to.be.equal('601'); - - done(); }); }); }); describe('isDetected method', () => { - it('should return the right version', (done) => { + it('should return the right version', () => { const engine = new Engine(); expect(engine.isDetected()).to.be.false(); engine.reset({ name: 'WebKit', - version: new Version({value: '601.3.9'}), + version: new Version({ value: '601.3.9' }), }); expect(engine.isDetected()).to.be.true(); - - done(); }); }); describe('toString method', () => { describe('without alias property', () => { - it('should return the name and version', (done) => { + it('should return the name and version', () => { const engine = new Engine(); expect(engine.toString()).to.be.empty(); engine.reset({ name: 'WebKit', - version: new Version({value: '601.3.9'}), + version: new Version({ value: '601.3.9' }), }); expect(engine.toString()).to.be.equal('WebKit 601.3.9'); - - done(); }); }); describe('with alias property', () => { - it('should return the alias and version', (done) => { + it('should return the alias and version', () => { const engine = new Engine(); expect(engine.toString()).to.be.empty(); engine.reset({ name: 'WebKit', alias: 'Blink', - version: new Version({value: '601.3.9'}), + version: new Version({ value: '601.3.9' }), }); expect(engine.toString()).to.be.equal('Blink 601.3.9'); - - done(); }); }); }); describe('identifyVersion method', () => { describe('with matching RegExp', () => { - it('should return the correct version', (done) => { + it('should return the correct version', () => { const engine = new Engine(); engine.identifyVersion(/AppleWebKit\/([0-9.]+)/u, 'AppleWebKit/601.3.9'); expect(engine.getVersion()).to.be.equal('601.3.9'); - - done(); }); }); describe('with not matching RegExp', () => { - it('should return empty version', (done) => { + it('should return empty version', () => { const engine = new Engine(); engine.identifyVersion(/AppleWebKit\/([0-9.]+)/u, 'Gecko/19.0'); expect(engine.getVersion()).to.be.empty(); - - done(); }); }); describe('with matching RegExp and details property', () => { - it('should return the truncated version', (done) => { + it('should return the truncated version', () => { const engine = new Engine(); - engine.identifyVersion(/AppleWebKit\/([0-9.]+)/u, 'AppleWebKit/601.3.9', {details: 1}); + engine.identifyVersion(/AppleWebKit\/([0-9.]+)/u, 'AppleWebKit/601.3.9', { details: 1 }); expect(engine.getVersion()).to.be.equal('601'); - - done(); }); }); }); describe('toObject method', () => { describe('with name but not version defined', () => { - it('should return the name as string', (done) => { + it('should return the name as string', () => { const engine = new Engine(); expect(engine.toObject()).to.be.empty(); @@ -172,14 +152,12 @@ describe('Engine Class', () => { name: 'Test', }); - expect(engine.toObject()).to.equal({name: 'Test'}); - - done(); + expect(engine.toObject()).to.equal({ name: 'Test' }); }); }); describe('with name but not version defined', () => { - it('should return the name as string', (done) => { + it('should return the name as string', () => { const engine = new Engine(); expect(engine.toObject()).to.be.empty(); @@ -188,46 +166,40 @@ describe('Engine Class', () => { }); expect(engine.toObject()).to.be.empty(); - - done(); }); }); describe('with name and version defined', () => { - it('should return an object with both properties', (done) => { + it('should return an object with both properties', () => { const engine = new Engine(); expect(engine.toObject()).to.be.empty(); engine.reset({ name: 'WebKit', - version: new Version({value: '601.3.9'}), + version: new Version({ value: '601.3.9' }), }); expect(engine.toObject()).to.equal({ name: 'WebKit', version: '601.3.9', }); - - done(); }); }); describe('with name and complex version defined', () => { - it('should return an object with both properties exploded', (done) => { + it('should return an object with both properties exploded', () => { const engine = new Engine(); expect(engine.toObject()).to.be.empty(); engine.reset({ name: 'WebKit', - version: new Version({value: '601.3.9', details: 1, alias: 'TestVersion'}), + version: new Version({ value: '601.3.9', details: 1, alias: 'TestVersion' }), }); expect(engine.toObject()).to.equal({ name: 'WebKit', - version: {value: '601', alias: 'TestVersion'}, + version: { value: '601', alias: 'TestVersion' }, }); - - done(); }); }); }); diff --git a/test/model/FamilyTest.js b/test/model/FamilyTest.js index 1bc6007..b7b408b 100644 --- a/test/model/FamilyTest.js +++ b/test/model/FamilyTest.js @@ -1,60 +1,54 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Family = require('../../src/model/Family'); const Version = require('../../src/model/Version'); describe('Family Class', () => { describe('getName method', () => { - it('should return the right name', (done) => { + it('should return the right name', () => { const using = new Family(); expect(using.getName()).to.be.empty(); using.reset({ name: 'Android', - version: new Version({value: '4.1.1'}), + version: new Version({ value: '4.1.1' }), }); expect(using.getName()).to.be.equal('Android'); - - done(); }); }); describe('getVersion method', () => { - it('should return the right version', (done) => { + it('should return the right version', () => { const using = new Family(); expect(using.getVersion()).to.be.empty(); using.reset({ name: 'Android', - version: new Version({value: '4.1.1'}), + version: new Version({ value: '4.1.1' }), }); expect(using.getVersion()).to.be.equal('4.1.1'); - - done(); }); }); describe('toString method', () => { - it('should return the right version', (done) => { + it('should return the right version', () => { const using = new Family(); expect(using.toString()).to.be.empty(); using.reset({ name: 'Android', - version: new Version({value: '4.1.1'}), + version: new Version({ value: '4.1.1' }), }); expect(using.toString()).to.be.equal('Android 4.1.1'); - - done(); }); }); describe('toObject method', () => { describe('with name but not version defined', () => { - it('should return the name as string', (done) => { + it('should return the name as string', () => { const using = new Family(); expect(using.toObject()).to.be.empty(); @@ -63,46 +57,40 @@ describe('Family Class', () => { }); expect(using.toObject()).to.be.equal('Android'); - - done(); }); }); describe('with name and version defined', () => { - it('should return an object with both properties', (done) => { + it('should return an object with both properties', () => { const using = new Family(); expect(using.toObject()).to.be.empty(); using.reset({ name: 'Android', - version: new Version({value: '4.1.1'}), + version: new Version({ value: '4.1.1' }), }); expect(using.toObject()).to.equal({ name: 'Android', version: '4.1.1', }); - - done(); }); }); describe('with name and complex version defined', () => { - it('should return an object with both properties exploded', (done) => { + it('should return an object with both properties exploded', () => { const using = new Family(); expect(using.toObject()).to.be.empty(); using.reset({ name: 'Android', - version: new Version({value: '4.1.1', details: 1, alias: 'Jelly Bean'}), + version: new Version({ value: '4.1.1', details: 1, alias: 'Jelly Bean' }), }); expect(using.toObject()).to.equal({ name: 'Android', - version: {value: '4', alias: 'Jelly Bean'}, + version: { value: '4', alias: 'Jelly Bean' }, }); - - done(); }); }); }); diff --git a/test/model/MainTest.js b/test/model/MainTest.js index 3a3e361..6c0adad 100644 --- a/test/model/MainTest.js +++ b/test/model/MainTest.js @@ -1,5 +1,5 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Constants = require('../../src/constants'); const Main = require('../../src/model/Main'); const Browser = require('../../src/model/Browser'); @@ -10,37 +10,34 @@ const Version = require('../../src/model/Version'); describe('Browser Class', () => { describe('test defaults', () => { - it('should be as expected', (done) => { + it('should be as expected', () => { const main = new Main(); expect(main.browser).to.be.instanceOf(Browser); expect(main.engine).to.be.instanceOf(Engine); expect(main.os).to.be.instanceOf(Os); expect(main.device).to.be.instanceOf(Device); - done(); }); }); describe('test is Method', () => { describe('with empty object', () => { - it('should return all false', (done) => { + it('should return all false', () => { const main = new Main(); expect(main.isBrowser('Chrome')).to.be.false(); expect(main.isBrowser('Chrome', '=', '40')).to.be.false(); expect(main.isOs('OS X')).to.be.false(); expect(main.isEngine('WebKit')).to.be.false(); - - done(); }); }); describe('with browser object', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const main = new Main(); main.browser.set({ name: 'Chrome', - version: new Version({value: '40.0.2214', details: 1}), + version: new Version({ value: '40.0.2214', details: 1 }), }); expect(main.isBrowser('Chrome')).to.be.true(); @@ -59,18 +56,16 @@ describe('Browser Class', () => { expect(main.isBrowser('Chrome', '<=', '29')).to.be.false(); expect(main.isBrowser('Chrome', '>', '40')).to.be.false(); expect(main.isBrowser('Chrome', '<', '40')).to.be.false(); - - done(); }); }); describe('with os object', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const main = new Main(); main.os.set({ name: 'OS X', - version: new Version({value: '10.11.1', details: 2}), + version: new Version({ value: '10.11.1', details: 2 }), }); expect(main.isOs('OS X')).to.be.true(); @@ -92,13 +87,11 @@ describe('Browser Class', () => { expect(main.isOs('OS X', '>', '10')).to.be.false(); expect(main.isOs('OS X', '>', '10.11')).to.be.false(); - - done(); }); }); describe('with engine object', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const main = new Main(); main.engine.set({ @@ -107,15 +100,12 @@ describe('Browser Class', () => { expect(main.isEngine('WebKit')).to.be.true(); expect(main.isEngine('WebKit', '=', '523')).to.be.false(); - - done(); }); }); }); - describe('test isDevice method', () => { - it('should return true for both model and manufacturer', (done) => { + it('should return true for both model and manufacturer', () => { const main = new Main(); main.device.setIdentification({ @@ -125,30 +115,27 @@ describe('Browser Class', () => { }); expect(main.isDevice('Reader')).to.be.true(); expect(main.isDevice('PRS-T2')).to.be.true(); - done(); }); }); describe('test isDetected method', () => { - it('should return true for both model and manufacturer', (done) => { + it('should return true for both model and manufacturer', () => { const main = new Main(); expect(main.isDetected()).to.be.false(); main.browser.set({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); expect(main.isDetected()).to.be.true(); - - done(); }); }); describe('test isMobile method', () => { describe('with GAMING CONSOLE type', () => { - it('should return false', (done) => { + it('should return false', () => { const main = new Main(); main.device.setIdentification({ @@ -157,12 +144,11 @@ describe('Browser Class', () => { }); expect(main.isMobile()).to.be.false(); - done(); }); }); describe('with GAMING PORTABLE type', () => { - it('should return true', (done) => { + it('should return true', () => { const main = new Main(); main.device.setIdentification({ @@ -171,12 +157,11 @@ describe('Browser Class', () => { }); expect(main.isMobile()).to.be.true(); - done(); }); }); describe('with MOBILE SMART type', () => { - it('should return true', (done) => { + it('should return true', () => { const main = new Main(); main.device.setIdentification({ @@ -185,12 +170,11 @@ describe('Browser Class', () => { }); expect(main.isMobile()).to.be.true(); - done(); }); }); describe('with MOBILE FEATURE type', () => { - it('should return true', (done) => { + it('should return true', () => { const main = new Main(); main.device.setIdentification({ @@ -199,12 +183,11 @@ describe('Browser Class', () => { }); expect(main.isMobile()).to.be.true(); - done(); }); }); describe('with DESKTOP type', () => { - it('should return true', (done) => { + it('should return true', () => { const main = new Main(); main.device.setIdentification({ @@ -212,13 +195,12 @@ describe('Browser Class', () => { }); expect(main.isMobile()).to.be.false(); - done(); }); }); }); describe('test isType method', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const main = new Main(); main.device.setIdentification({ @@ -238,26 +220,22 @@ describe('Browser Class', () => { expect(main.isType('television', 'gaming')).to.be.true(); expect(main.isType('gaming', 'television', 'gaming')).to.be.true(); expect(main.isType('gaming:portable', 'gaming:console')).to.be.true(); - - done(); }); }); describe('test getType method', () => { describe('with only type GAMING', () => { - it('should return the type', (done) => { + it('should return the type', () => { const main = new Main(); - main.device.reset({type: Constants.deviceType.GAMING}); + main.device.reset({ type: Constants.deviceType.GAMING }); expect(main.getType()).to.be.equal('gaming'); - - done(); }); }); describe('with type GAMING and subtypes', () => { - it('should return the type:subtype', (done) => { + it('should return the type:subtype', () => { const main = new Main(); main.device.reset({ @@ -273,25 +251,21 @@ describe('Browser Class', () => { }); expect(main.getType()).to.be.equal('gaming:portable'); - - done(); }); }); describe('with only type MOBILE', () => { - it('should return the type', (done) => { + it('should return the type', () => { const main = new Main(); - main.device.reset({type: Constants.deviceType.MOBILE}); + main.device.reset({ type: Constants.deviceType.MOBILE }); expect(main.getType()).to.be.equal('mobile'); - - done(); }); }); describe('with type MOBILE and subtypes', () => { - it('should return the type:subtype', (done) => { + it('should return the type:subtype', () => { const main = new Main(); main.device.reset({ @@ -307,25 +281,21 @@ describe('Browser Class', () => { }); expect(main.getType()).to.be.equal('mobile:feature'); - - done(); }); }); }); describe('test toString method', () => { describe('with empty object', () => { - it('should return the name and version', (done) => { + it('should return the name and version', () => { const main = new Main(); expect(main.toString()).to.be.equal('an unknown browser'); - - done(); }); }); describe('with type set to BOT ', () => { - it('should return an unknown BOT', (done) => { + it('should return an unknown BOT', () => { const main = new Main(); main.device.set({ @@ -333,35 +303,31 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('an unknown bot'); - - done(); }); }); describe('with browser, engine and os set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.browser.set({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); main.engine.set({ name: 'Blink', }); main.os.set({ name: 'OS X', - version: new Version({value: '10.11', nickname: 'El Captain'}), + version: new Version({ value: '10.11', nickname: 'El Captain' }), }); expect(main.toString()).to.be.equal('Chrome 47 on OS X El Captain 10.11'); - - done(); }); }); describe('with engine and os set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.engine.set({ @@ -369,44 +335,40 @@ describe('Browser Class', () => { }); main.os.set({ name: 'Tizen', - version: new Version({value: '2.0'}), + version: new Version({ value: '2.0' }), }); expect(main.toString()).to.be.equal('Tizen 2.0'); - - done(); }); }); describe('with browser', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.browser.set({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); expect(main.toString()).to.be.equal('Chrome 47'); - - done(); }); }); describe('with browser, engine, os and device set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.browser.set({ name: 'Safari', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); main.engine.set({ name: 'WebKit', }); main.os.set({ name: 'iOS', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); main.device.setIdentification({ manufacturer: 'Apple', @@ -415,22 +377,20 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('Safari 8.0 on an Apple iPhone 6 running iOS 8.0'); - - done(); }); }); describe('with browser, os and unrecognized device set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.browser.set({ name: 'Chrome', - version: new Version({value: '47.0.2526.73', details: 1}), + version: new Version({ value: '47.0.2526.73', details: 1 }), }); main.os.set({ name: 'Android', - version: new Version({value: '4.4'}), + version: new Version({ value: '4.4' }), }); main.device.set({ model: 'SM-A300', @@ -438,13 +398,11 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('Chrome 47 on an unrecognized device (SM-A300) running Android 4.4'); - - done(); }); }); describe('with unrecognized browser, and engine set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.browser.set({ @@ -455,40 +413,35 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('an unknown browser based on Blink'); - - done(); }); }); describe('without browser but with engine and os and device set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); - main.engine.set({ name: 'Blink', }); main.os.set({ name: 'OS X', - version: new Version({value: '10.11', nickname: 'El Captain'}), + version: new Version({ value: '10.11', nickname: 'El Captain' }), }); main.device.set({ type: Constants.deviceType.DESKTOP, }); expect(main.toString()).to.be.equal('an unknown browser based on Blink running on OS X El Captain 10.11'); - - done(); }); }); describe('with browser and device set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.browser.set({ name: 'Safari', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); main.device.setIdentification({ @@ -498,18 +451,16 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('Safari 8.0 on an Apple iPhone 6'); - - done(); }); }); describe('with os and device set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.os.set({ name: 'iOS', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); main.device.setIdentification({ @@ -519,13 +470,11 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('an Apple iPhone 6 running iOS 8.0'); - - done(); }); }); describe('with only device set', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.device.setIdentification({ @@ -535,13 +484,11 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('an Apple iPhone 6'); - - done(); }); }); describe('with device set to television', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.device.setIdentification({ @@ -549,13 +496,11 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('a television'); - - done(); }); }); describe('with device set to emulator', () => { - it('should return the complete string', (done) => { + it('should return the complete string', () => { const main = new Main(); main.device.setIdentification({ @@ -563,55 +508,49 @@ describe('Browser Class', () => { }); expect(main.toString()).to.be.equal('an emulator'); - - done(); }); }); }); describe('test toObject method', () => { - it('should match the returned object', (done) => { - const main = new Main(); + it('should match the returned object', () => { + const main = new Main(); - main.browser.set({ + main.browser.set({ + name: 'Safari', + version: new Version({ value: '8.0' }), + }); + main.engine.set({ + name: 'WebKit', + }); + main.os.set({ + name: 'iOS', + version: new Version({ value: '8.0' }), + }); + main.device.setIdentification({ + manufacturer: 'Apple', + model: 'iPhone 6', + type: Constants.deviceType.MOBILE, + }); + + expect(main.toObject()).to.equal({ + browser: { name: 'Safari', - version: new Version({value: '8.0'}), - }); - main.engine.set({ + version: '8.0', + }, + engine: { name: 'WebKit', - }); - main.os.set({ + }, + os: { name: 'iOS', - version: new Version({value: '8.0'}), - }); - main.device.setIdentification({ + version: '8.0', + }, + device: { + type: 'mobile', manufacturer: 'Apple', model: 'iPhone 6', - type: Constants.deviceType.MOBILE, - }); - - expect(main.toObject()).to.equal({ - browser: { - name: 'Safari', - version: '8.0', - }, - engine: { - name: 'WebKit', - }, - os: { - name: 'iOS', - version: '8.0', - }, - device: { - type: 'mobile', - manufacturer: 'Apple', - model: 'iPhone 6', - }, - }); - - done(); + }, }); + }); }); }); - - diff --git a/test/model/OsTest.js b/test/model/OsTest.js index 743ac72..fa43161 100644 --- a/test/model/OsTest.js +++ b/test/model/OsTest.js @@ -1,5 +1,5 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Os = require('../../src/model/Os'); const Version = require('../../src/model/Version'); const Family = require('../../src/model/Family'); @@ -7,12 +7,12 @@ const Family = require('../../src/model/Family'); describe('Os Class', () => { describe('reset method', () => { describe('reset to clean state', () => { - it('should return the right name', (done) => { + it('should return the right name', () => { const os = new Os({ name: 'iOS', alias: 'iPhone OS', hidden: true, - version: new Version({value: '3.0'}), + version: new Version({ value: '3.0' }), }); expect(os.name).to.be.equal('iOS'); expect(os.alias).to.be.equal('iPhone OS'); @@ -25,18 +25,16 @@ describe('Os Class', () => { expect(os.alias).to.not.exists(); expect(os.hidden).to.be.false(); expect(os.version).to.not.exists(); - - done(); }); }); describe('reset to a new state', () => { - it('should return the alias', (done) => { + it('should return the alias', () => { const os = new Os({ name: 'iOS', alias: 'iPhone OS', hidden: true, - version: new Version({value: '3.0'}), + version: new Version({ value: '3.0' }), }); expect(os.name).to.be.equal('iOS'); expect(os.alias).to.be.equal('iPhone OS'); @@ -46,277 +44,237 @@ describe('Os Class', () => { os.reset({ name: 'Android', alias: 'Android OS', - version: new Version({value: '4.1.1'}), + version: new Version({ value: '4.1.1' }), }); expect(os.name).to.be.equal('Android'); expect(os.alias).to.be.equal('Android OS'); expect(os.hidden).to.be.false(); expect(os.getVersion()).to.be.equal('4.1.1'); - - done(); }); }); }); describe('getName method', () => { describe('without alias', () => { - it('should return the right name', (done) => { + it('should return the right name', () => { const os = new Os(); expect(os.getName()).to.be.empty(); os.reset({ name: 'iOS', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); expect(os.getName()).to.be.equal('iOS'); - - done(); }); }); describe('with alias', () => { - it('should return the alias', (done) => { + it('should return the alias', () => { const os = new Os(); expect(os.getName()).to.be.empty(); os.reset({ name: 'iOS', alias: 'iPhone OS', - version: new Version({value: '3.0'}), + version: new Version({ value: '3.0' }), }); expect(os.getName()).to.be.equal('iPhone OS'); - - done(); }); }); }); describe('getVersion method', () => { describe('with only value', () => { - it('should return the version', (done) => { + it('should return the version', () => { const os = new Os({ name: 'iOS', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); - expect(os.getVersion()).to.be.equal('8.0'); - - done(); }); }); describe('with value and nickname', () => { - it('should return nickname + value', (done) => { + it('should return nickname + value', () => { const os = new Os({ name: 'OS X', - version: new Version({value: '10.11', nickname: 'El Captain'}), + version: new Version({ value: '10.11', nickname: 'El Captain' }), }); - expect(os.getVersion()).to.be.equal('El Captain 10.11'); - - done(); }); }); describe('with value and alias', () => { - it('should return the alias', (done) => { + it('should return the alias', () => { const os = new Os({ name: 'Windows', - version: new Version({value: '5.1', alias: 'XP'}), + version: new Version({ value: '5.1', alias: 'XP' }), }); expect(os.getVersion()).to.be.equal('XP'); - - done(); }); }); }); describe('isDetected method', () => { - it('should return the right version', (done) => { + it('should return the right version', () => { const os = new Os(); expect(os.isDetected()).to.be.false(); os.reset({ name: 'iOS', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); expect(os.isDetected()).to.be.true(); - - done(); }); }); describe('isFamily method', () => { describe('without family property', () => { - it('the family should match the name', (done) => { + it('the family should match the name', () => { const os = new Os({ name: 'Android', }); expect(os.isFamily('Android')).to.be.true(); - - done(); }); }); describe('with family property that match the isFamily parameter', () => { - it('should return true', (done) => { + it('should return true', () => { const os = new Os({ name: 'FireOS', - family: new Family({name: 'Android'}), + family: new Family({ name: 'Android' }), }); expect(os.isFamily('Android')).to.be.true(); - - done(); }); }); - describe('with family property that doesn\'t match the isFamily parameter', () => { - it('should return false', (done) => { + describe("with family property that doesn't match the isFamily parameter", () => { + it('should return false', () => { const os = new Os({ name: 'FireOS', - family: new Family({name: 'Android'}), + family: new Family({ name: 'Android' }), }); expect(os.isFamily('iOS')).to.be.false(); - - done(); }); }); }); describe('toString method', () => { describe('without alias property', () => { - it('should return the name and version', (done) => { + it('should return the name and version', () => { const os = new Os({ name: 'iOS', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); expect(os.toString()).to.be.equal('iOS 8.0'); - - done(); }); }); describe('with alias property', () => { - it('should return the alias and version', (done) => { + it('should return the alias and version', () => { const os = new Os({ name: 'iOS', alias: 'iPhone OS', - version: new Version({value: '3.0'}), + version: new Version({ value: '3.0' }), }); expect(os.toString()).to.be.equal('iPhone OS 3.0'); - - done(); }); }); describe('with version nickname', () => { - it('should return the name, alias and version', (done) => { + it('should return the name, alias and version', () => { const os = new Os({ name: 'OS X', - version: new Version({value: '10.11', nickname: 'El Captain'}), + version: new Version({ value: '10.11', nickname: 'El Captain' }), }); expect(os.toString()).to.be.equal('OS X El Captain 10.11'); - - done(); }); }); describe('with version alias', () => { - it('should return the name and alias', (done) => { + it('should return the name and alias', () => { const os = new Os({ name: 'Windows', - version: new Version({value: '10.11', alias: 'XP'}), + version: new Version({ value: '10.11', alias: 'XP' }), }); expect(os.toString()).to.be.equal('Windows XP'); - - done(); }); }); describe('with family alias and edition and version alias', () => { - it('should return the family alias, version alias and family edition', (done) => { + it('should return the family alias, version alias and family edition', () => { const os = new Os({ name: 'Windows Phone', alias: 'Windows', edition: 'Mobile', - version: new Version({value: '10.0', alias: '10'}), + version: new Version({ value: '10.0', alias: '10' }), }); expect(os.toString()).to.be.equal('Windows 10 Mobile'); - - done(); }); }); describe('with hidden set to true', () => { - it('should return empty string', (done) => { + it('should return empty string', () => { const os = new Os({ name: 'webOS', hidden: true, }); expect(os.toString()).to.be.empty(); - - done(); }); }); }); describe('identifyVersion method', () => { describe('with matching RegExp and underscore type', () => { - it('should return the version with underscore replaced', (done) => { + it('should return the version with underscore replaced', () => { const os = new Os(); - os.identifyVersion(/OS ([0-9_]+)/u, 'iPhone OS 9_0_2', {type: 'underscore'}); + os.identifyVersion(/OS ([0-9_]+)/u, 'iPhone OS 9_0_2', { type: 'underscore' }); expect(os.getVersion()).to.be.equal('9.0.2'); - - done(); }); }); describe('with matching RegExp', () => { - it('should return the correct version', (done) => { + it('should return the correct version', () => { const os = new Os(); os.identifyVersion(/Android\/([0-9.]+)/u, 'Android/6.0'); expect(os.getVersion()).to.be.equal('6.0'); - - done(); }); }); describe('with not matching RegExp', () => { - it('should return empty version', (done) => { + it('should return empty version', () => { const os = new Os(); os.identifyVersion(/Tizen\/([0-9.]+)/u, 'Android/6.0'); expect(os.getVersion()).to.be.empty(); - - done(); }); }); }); describe('toObject method', () => { describe('with name as empty string', () => { - it('should return an empty object', (done) => { + it('should return an empty object', () => { const os = new Os(); expect(os.toObject()).to.be.empty(); @@ -325,39 +283,35 @@ describe('Os Class', () => { }); expect(os.toObject()).to.be.empty(); - - done(); }); }); describe('with name and version defined', () => { - it('should return an object with both properties', (done) => { + it('should return an object with both properties', () => { const os = new Os(); expect(os.toObject()).to.be.empty(); os.reset({ name: 'iOS', - version: new Version({value: '8.0'}), + version: new Version({ value: '8.0' }), }); expect(os.toObject()).to.equal({ name: 'iOS', version: '8.0', }); - - done(); }); }); describe('with name, alias and version defined', () => { - it('should return an object with both properties', (done) => { + it('should return an object with both properties', () => { const os = new Os(); expect(os.toObject()).to.be.empty(); os.reset({ name: 'iOS', alias: 'iPhone OS', - version: new Version({value: '3.0'}), + version: new Version({ value: '3.0' }), }); expect(os.toObject()).to.equal({ @@ -365,51 +319,45 @@ describe('Os Class', () => { alias: 'iPhone OS', version: '3.0', }); - - done(); }); }); describe('with name and version nickname', () => { - it('should return an object with both properties exploded', (done) => { + it('should return an object with both properties exploded', () => { const os = new Os(); expect(os.toObject()).to.be.empty(); os.reset({ name: 'OS X', - version: new Version({value: '10.11', nickname: 'El Captain'}), + version: new Version({ value: '10.11', nickname: 'El Captain' }), }); expect(os.toObject()).to.equal({ name: 'OS X', - version: {value: '10.11', nickname: 'El Captain'}, + version: { value: '10.11', nickname: 'El Captain' }, }); - - done(); }); }); describe('with name and version alias', () => { - it('should return an object with both properties exploded', (done) => { + it('should return an object with both properties exploded', () => { const os = new Os(); expect(os.toObject()).to.be.empty(); os.reset({ name: 'Windows', - version: new Version({value: '5.1', alias: 'XP'}), + version: new Version({ value: '5.1', alias: 'XP' }), }); expect(os.toObject()).to.equal({ name: 'Windows', - version: {value: '5.1', alias: 'XP'}, + version: { value: '5.1', alias: 'XP' }, }); - - done(); }); }); describe('with name, alias, edition and version alias', () => { - it('should return an object with all properties exploded', (done) => { + it('should return an object with all properties exploded', () => { const os = new Os(); expect(os.toObject()).to.be.empty(); @@ -417,36 +365,32 @@ describe('Os Class', () => { name: 'Windows Phone', alias: 'Windows', edition: 'Mobile', - version: new Version({value: '10.0', alias: '10'}), + version: new Version({ value: '10.0', alias: '10' }), }); expect(os.toObject()).to.equal({ name: 'Windows Phone', alias: 'Windows', edition: 'Mobile', - version: {value: '10.0', alias: '10'}, + version: { value: '10.0', alias: '10' }, }); - - done(); }); }); describe('with name and family', () => { - it('should return an object with all properties exploded', (done) => { + it('should return an object with all properties exploded', () => { const os = new Os(); expect(os.toObject()).to.be.empty(); os.reset({ name: 'FireOS', - family: new Family({name: 'Android'}), + family: new Family({ name: 'Android' }), }); expect(os.toObject()).to.equal({ name: 'FireOS', family: 'Android', }); - - done(); }); }); }); diff --git a/test/model/UsingTest.js b/test/model/UsingTest.js index e2dfb5d..3396234 100644 --- a/test/model/UsingTest.js +++ b/test/model/UsingTest.js @@ -1,60 +1,54 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Using = require('../../src/model/Using'); const Version = require('../../src/model/Version'); describe('Using Class', () => { describe('getName method', () => { - it('should return the right name', (done) => { + it('should return the right name', () => { const using = new Using(); expect(using.getName()).to.be.empty(); using.reset({ name: 'Crosswalk WebView', - version: new Version({value: '11'}), + version: new Version({ value: '11' }), }); expect(using.getName()).to.be.equal('Crosswalk WebView'); - - done(); }); }); describe('getVersion method', () => { - it('should return the right version', (done) => { + it('should return the right version', () => { const using = new Using(); expect(using.getVersion()).to.be.empty(); using.reset({ name: 'Crosswalk WebView', - version: new Version({value: '11'}), + version: new Version({ value: '11' }), }); expect(using.getVersion()).to.be.equal('11'); - - done(); }); }); describe('toString method', () => { - it('should return the right version', (done) => { + it('should return the right version', () => { const using = new Using(); expect(using.toString()).to.be.empty(); using.reset({ name: 'Crosswalk WebView', - version: new Version({value: '11'}), + version: new Version({ value: '11' }), }); expect(using.toString()).to.be.equal('Crosswalk WebView 11'); - - done(); }); }); describe('toObject method', () => { describe('with name but not version defined', () => { - it('should return the name as string', (done) => { + it('should return the name as string', () => { const using = new Using(); expect(using.toObject()).to.be.empty(); @@ -63,46 +57,40 @@ describe('Using Class', () => { }); expect(using.toObject()).to.be.equal('Crosswalk WebView'); - - done(); }); }); describe('with name and version defined', () => { - it('should return an object with both properties', (done) => { + it('should return an object with both properties', () => { const using = new Using(); expect(using.toObject()).to.be.empty(); using.reset({ name: 'Crosswalk WebView', - version: new Version({value: '17.12'}), + version: new Version({ value: '17.12' }), }); expect(using.toObject()).to.equal({ name: 'Crosswalk WebView', version: '17.12', }); - - done(); }); }); describe('with name and complex version defined', () => { - it('should return an object with both properties exploded', (done) => { + it('should return an object with both properties exploded', () => { const using = new Using(); expect(using.toObject()).to.be.empty(); using.reset({ name: 'Crosswalk WebView', - version: new Version({value: '17.12', details: 1, alias: 'Codename'}), + version: new Version({ value: '17.12', details: 1, alias: 'Codename' }), }); expect(using.toObject()).to.equal({ name: 'Crosswalk WebView', - version: {value: '17', alias: 'Codename'}, + version: { value: '17', alias: 'Codename' }, }); - - done(); }); }); }); diff --git a/test/model/VersionTest.js b/test/model/VersionTest.js index 501f2e1..6ee05db 100644 --- a/test/model/VersionTest.js +++ b/test/model/VersionTest.js @@ -1,22 +1,21 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Version = require('../../src/model/Version'); describe('Version Class', () => { - describe('\'is\' method', () => { + describe("'is' method", () => { describe('with zero or one parameter', () => { - it('should work as expected', (done) => { - const version = new Version({value: '40.0.2214'}); + it('should work as expected', () => { + const version = new Version({ value: '40.0.2214' }); expect(version.is()).to.be.false(); expect(version.is('39')).to.be.false(); expect(version.is('40')).to.be.true(); - done(); }); }); describe('with operator and major version compare', () => { - it('should work as expected', (done) => { - const version = new Version({value: '40.0.2214'}); + it('should work as expected', () => { + const version = new Version({ value: '40.0.2214' }); expect(version.is('=', '40')).to.be.true(); expect(version.is('>=', '40')).to.be.true(); expect(version.is('<=', '40')).to.be.true(); @@ -28,14 +27,12 @@ describe('Version Class', () => { expect(version.is('<=', '39')).to.be.false(); expect(version.is('>', '40')).to.be.false(); expect(version.is('<', '40')).to.be.false(); - - done(); }); }); describe('with operator and major, minor and patch version compare', () => { - it('should work as expected', (done) => { - const version = new Version({value: '10.11.1'}); + it('should work as expected', () => { + const version = new Version({ value: '10.11.1' }); expect(version.is('=', '10')).to.be.true(); expect(version.is('=', '10.11')).to.be.true(); expect(version.is('=', '10.11.1')).to.be.true(); @@ -50,15 +47,12 @@ describe('Version Class', () => { expect(version.is('>', '10')).to.be.false(); expect(version.is('>', '10.11')).to.be.false(); - - - done(); }); }); describe('with operator and major, minor as float', () => { - it('should work as expected', (done) => { - const version = new Version({value: 10.11}); + it('should work as expected', () => { + const version = new Version({ value: 10.11 }); expect(version.is('=', '10')).to.be.true(); expect(version.is('=', '10.11')).to.be.true(); expect(version.is('=', '10.11.1')).to.be.true(); @@ -73,281 +67,251 @@ describe('Version Class', () => { expect(version.is('>', '10')).to.be.false(); expect(version.is('>', '10.11')).to.be.false(); - - done(); }); }); }); describe('getParts method', () => { describe('with no version', () => { - it('should return 0, 0, 0 object', (done) => { + it('should return 0, 0, 0 object', () => { const version = new Version(); version.value = ''; - expect(version.getParts()).to.equal({major: 0, minor: 0, patch: 0}); - done(); + expect(version.getParts()).to.equal({ major: 0, minor: 0, patch: 0 }); }); }); describe('with major version', () => { - it('should return major, 0, 0 object', (done) => { + it('should return major, 0, 0 object', () => { const version = new Version(); version.value = '4'; - expect(version.getParts()).to.equal({major: 4, minor: 0, patch: 0}); - done(); + expect(version.getParts()).to.equal({ major: 4, minor: 0, patch: 0 }); }); }); describe('with major and minor version', () => { - it('should return major, minor, 0 object', (done) => { + it('should return major, minor, 0 object', () => { const version = new Version(); version.value = '4.1'; - expect(version.getParts()).to.equal({major: 4, minor: 1, patch: 0}); - done(); + expect(version.getParts()).to.equal({ major: 4, minor: 1, patch: 0 }); }); }); describe('with major minor and patch version', () => { - it('should return major, minor, patch object', (done) => { + it('should return major, minor, patch object', () => { const version = new Version(); version.value = '4.1.2'; - expect(version.getParts()).to.equal({major: 4, minor: 1, patch: 2}); - done(); + expect(version.getParts()).to.equal({ major: 4, minor: 1, patch: 2 }); }); }); }); describe('getMajor method', () => { describe('with no version', () => { - it('should return 0', (done) => { + it('should return 0', () => { const version = new Version(); version.value = ''; expect(version.getMajor()).to.equal(0); - done(); }); }); describe('with major version', () => { - it('should return the major version', (done) => { + it('should return the major version', () => { const version = new Version(); version.value = '4'; expect(version.getMajor()).to.equal(4); - done(); }); }); describe('with major and minor version', () => { - it('should return the major version', (done) => { + it('should return the major version', () => { const version = new Version(); version.value = '4.1'; expect(version.getMajor()).to.equal(4); - done(); }); }); describe('with major minor and patch version', () => { - it('should return the major version', (done) => { + it('should return the major version', () => { const version = new Version(); version.value = '4.1.2'; expect(version.getMajor()).to.be.equal(4); - done(); }); }); }); describe('getMinor method', () => { describe('with no version', () => { - it('should return 0', (done) => { + it('should return 0', () => { const version = new Version(); version.value = ''; expect(version.getMinor()).to.equal(0); - done(); }); }); describe('with major version', () => { - it('should return 0', (done) => { + it('should return 0', () => { const version = new Version(); version.value = '4'; expect(version.getMinor()).to.equal(0); - done(); }); }); describe('with major and minor version', () => { - it('should return the minor version', (done) => { + it('should return the minor version', () => { const version = new Version(); version.value = '4.1'; expect(version.getMinor()).to.equal(1); - done(); }); }); describe('with major minor and patch version', () => { - it('should return the minor version', (done) => { + it('should return the minor version', () => { const version = new Version(); version.value = '4.1.2'; expect(version.getMinor()).to.be.equal(1); - done(); }); }); }); describe('getPatch method', () => { describe('with no version', () => { - it('should return 0', (done) => { + it('should return 0', () => { const version = new Version(); version.value = ''; expect(version.getPatch()).to.equal(0); - done(); }); }); describe('with major version', () => { - it('should return 0', (done) => { + it('should return 0', () => { const version = new Version(); version.value = '4'; expect(version.getPatch()).to.equal(0); - done(); }); }); describe('with major and minor version', () => { - it('should return 0', (done) => { + it('should return 0', () => { const version = new Version(); version.value = '4.1'; expect(version.getPatch()).to.equal(0); - done(); }); }); describe('with major minor and patch version', () => { - it('should return the patch version', (done) => { + it('should return the patch version', () => { const version = new Version(); version.value = '4.1.2'; expect(version.getPatch()).to.be.equal(2); - done(); }); }); }); describe('toValue method', () => { describe('with only major', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4'; expect(version.toValue()).to.equal(4); - done(); }); }); describe('with major and minor version', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4.1'; expect(version.toValue()).to.equal(4.0001); - done(); }); }); describe('with major, minor and patch version', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4.1.1'; expect(version.toValue()).to.equal(4.00010001); - done(); }); }); describe('with major minor version with two digit and patch version with one digit', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '10.10.3'; expect(version.toValue()).to.be.equal(10.00100003); - done(); }); }); }); describe('toFloat method', () => { describe('with only major', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4'; expect(version.toFloat()).to.equal(4); - done(); }); }); describe('with major and minor version', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4.1'; expect(version.toFloat()).to.equal(4.1); - done(); }); }); describe('with major, minor and patch version', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4.1.1'; expect(version.toFloat()).to.equal(4.1); - done(); }); }); describe('with major minor version with two digit and patch version with one digit', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '10.10.3'; expect(version.toFloat()).to.be.equal(10.1); - done(); }); }); }); describe('toNumber method', () => { describe('with only major', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4'; expect(version.toNumber()).to.equal(4); - done(); }); }); describe('with major and minor version', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4.1'; expect(version.toNumber()).to.equal(4); - done(); }); }); describe('with major, minor and patch version', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '4.1.1'; expect(version.toNumber()).to.equal(4); - done(); }); }); describe('with major minor version with two digit and patch version with one digit', () => { - it('should work', (done) => { + it('should work', () => { const version = new Version(); version.value = '10.10.3'; expect(version.toNumber()).to.be.equal(10); - done(); }); }); }); describe('toString method', () => { describe('with no details or builds', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const version = new Version(); version.value = '4.1.1'; @@ -361,154 +325,141 @@ describe('Version Class', () => { version.value = '4.0b2'; expect(version.toString()).to.equal('4.0b2'); - done(); }); }); describe('with details but not builds', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const version = new Version(); - version.set({value: '4.1.1', details: 0}); + version.set({ value: '4.1.1', details: 0 }); expect(version.toString()).to.equal('4.1.1'); - version.set({value: '4.1.1', details: 1}); + version.set({ value: '4.1.1', details: 1 }); expect(version.toString()).to.equal('4'); - version.set({value: '4.1.1', details: 2}); + version.set({ value: '4.1.1', details: 2 }); expect(version.toString()).to.equal('4.1'); - version.set({value: '4.1.1', details: 3}); + version.set({ value: '4.1.1', details: 3 }); expect(version.toString()).to.equal('4.1.1'); - version.set({value: '4.1.1', details: 4}); + version.set({ value: '4.1.1', details: 4 }); expect(version.toString()).to.equal('4.1.1'); - version.set({value: '4.1', details: 3}); + version.set({ value: '4.1', details: 3 }); expect(version.toString()).to.equal('4.1'); - version.set({value: '4.1.1', details: -1}); + version.set({ value: '4.1.1', details: -1 }); expect(version.toString()).to.equal('4.1'); - version.set({value: '4.1.1', details: -2}); + version.set({ value: '4.1.1', details: -2 }); expect(version.toString()).to.equal('4'); - version.set({value: '4.1.1', details: -3}); + version.set({ value: '4.1.1', details: -3 }); expect(version.toString()).to.equal(''); - version.set({value: '4.1.1', details: -4}); + version.set({ value: '4.1.1', details: -4 }); expect(version.toString()).to.equal(''); - - done(); }); }); describe('with builds but not details', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const version = new Version(); - version.set({value: '5.0.2.999', builds: false}); + version.set({ value: '5.0.2.999', builds: false }); expect(version.toString()).to.equal('5.0.2.999'); - version.set({value: '5.0.2.1000', builds: false}); + version.set({ value: '5.0.2.1000', builds: false }); expect(version.toString()).to.equal('5.0.2'); - version.set({value: '5.0.2.4428', builds: false}); + version.set({ value: '5.0.2.4428', builds: false }); expect(version.toString()).to.equal('5.0.2'); - version.set({value: '5.0.4428', builds: false}); + version.set({ value: '5.0.4428', builds: false }); expect(version.toString()).to.equal('5.0'); - version.set({value: '5.4428', builds: false}); + version.set({ value: '5.4428', builds: false }); expect(version.toString()).to.equal('5'); - version.set({value: '4428', builds: false}); + version.set({ value: '4428', builds: false }); expect(version.toString()).to.equal(''); - - done(); }); }); describe('with alias', () => { - it('should return alias', (done) => { + it('should return alias', () => { const version = new Version(); - version.set({value: '5.1', alias: 'XP'}); + version.set({ value: '5.1', alias: 'XP' }); expect(version.toString()).to.be.equal('XP'); - done(); }); }); describe('with nickname', () => { - it('should return nickaname and version', (done) => { + it('should return nickaname and version', () => { const version = new Version(); - version.set({value: '10.11', nickname: 'El Captain'}); + version.set({ value: '10.11', nickname: 'El Captain' }); expect(version.toString()).to.be.equal('El Captain 10.11'); - done(); }); }); describe('with nickname and details', () => { - it('should return nickname and a subset of verson', (done) => { + it('should return nickname and a subset of verson', () => { const version = new Version(); - version.set({value: '10.11.2', nickname: 'El Captain', details: 2}); + version.set({ value: '10.11.2', nickname: 'El Captain', details: 2 }); expect(version.toString()).to.be.equal('El Captain 10.11'); - done(); }); }); }); describe('toObject method', () => { describe('with all properties empty', () => { - it('should return an empty object', (done) => { + it('should return an empty object', () => { const version = new Version(); expect(version.toObject()).equal({}); - done(); }); }); describe('with value filled', () => { - it('should return the only value', (done) => { + it('should return the only value', () => { const version = new Version(); - version.set({value: '4.1.1'}); + version.set({ value: '4.1.1' }); expect(version.toObject()).to.equal('4.1.1'); - done(); }); }); describe('with value and details filled', () => { - it('should return the with value according to details level', (done) => { + it('should return the with value according to details level', () => { const version = new Version(); - version.set({value: '4.1.1', details: 2}); + version.set({ value: '4.1.1', details: 2 }); expect(version.toObject()).to.equal('4.1'); - done(); }); }); describe('with value and alias filled', () => { - it('should return an object with value and alias properties', (done) => { + it('should return an object with value and alias properties', () => { const version = new Version(); - const properties = {value: '5.1', alias: 'XP'}; + const properties = { value: '5.1', alias: 'XP' }; version.set(properties); expect(version.toObject()).to.equal(properties); - done(); }); }); describe('with value and nickname filled', () => { - it('should return an object with value and nickname properties', (done) => { + it('should return an object with value and nickname properties', () => { const version = new Version(); - const properties = {value: '10.11', nickname: 'El Captain'}; + const properties = { value: '10.11', nickname: 'El Captain' }; version.set(properties); expect(version.toObject()).to.equal(properties); - done(); }); }); }); diff --git a/test/model/primitive/BaseTest.js b/test/model/primitive/BaseTest.js index e8789dd..9365089 100644 --- a/test/model/primitive/BaseTest.js +++ b/test/model/primitive/BaseTest.js @@ -1,21 +1,19 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Base = require('../../../src/model/primitive/Base'); describe('Base Class', () => { describe('constructor', () => { - it('should create the class correctly', (done) => { - expect(new Base({name: 'Generic'}).name).to.be.equal('Generic'); - done(); + it('should create the class correctly', () => { + expect(new Base({ name: 'Generic' }).name).to.be.equal('Generic'); }); }); describe('set method', () => { - it('should set properties correctly', (done) => { + it('should set properties correctly', () => { const base = new Base(); - base.set({name: 'Generic'}); + base.set({ name: 'Generic' }); expect(base.name).to.be.equal('Generic'); - done(); }); }); }); diff --git a/test/model/primitive/NameVersionTest.js b/test/model/primitive/NameVersionTest.js index ee97092..275ab26 100644 --- a/test/model/primitive/NameVersionTest.js +++ b/test/model/primitive/NameVersionTest.js @@ -1,106 +1,99 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const NameVersion = require('../../../src/model/primitive/NameVersion'); const Version = require('../../../src/model/Version'); describe('NameVersion Class', () => { describe('getName method', () => { - it('should correctly handle name', (done) => { + it('should correctly handle name', () => { const nameVersion = new NameVersion(); expect(nameVersion.getName()).to.be.equal(''); - done(); }); - it('should correctly reset name', (done) => { + it('should correctly reset name', () => { const nameVersion = new NameVersion(); nameVersion.name = 'Test'; nameVersion.reset({ name: 'Generic', - version: new Version({value: '1.0'}), + version: new Version({ value: '1.0' }), }); expect(nameVersion.getName()).to.be.equal('Generic'); - done(); }); - it('should correctly reset name and use alias', (done) => { + it('should correctly reset name and use alias', () => { const nameVersion = new NameVersion(); nameVersion.name = 'Test'; nameVersion.reset({ name: 'Generic', alias: 'Alias', - version: new Version({value: '1.0'}), + version: new Version({ value: '1.0' }), }); expect(nameVersion.getName()).to.be.equal('Alias'); - done(); }); }); describe('getVersion method', () => { - it('should correctly handle version', (done) => { + it('should correctly handle version', () => { const nameVersion = new NameVersion(); expect(nameVersion.getVersion()).to.be.equal(''); nameVersion.reset({ name: 'Generic', - version: new Version({value: '1.0'}), + version: new Version({ value: '1.0' }), }); expect(nameVersion.getVersion()).to.be.equal('1.0'); - done(); }); - it('should correctly handle version and details', (done) => { + it('should correctly handle version and details', () => { const nameVersion = new NameVersion(); expect(nameVersion.getVersion()).to.be.equal(''); nameVersion.reset({ name: 'Generic', - version: new Version({value: '1.0', details: 1}), + version: new Version({ value: '1.0', details: 1 }), }); expect(nameVersion.getVersion()).to.be.equal('1'); - done(); }); }); describe('isDetected method', () => { - it('should work as expected', (done) => { + it('should work as expected', () => { const nameVersion = new NameVersion(); expect(nameVersion.isDetected()).to.be.false(); nameVersion.reset({ name: 'Generic', - version: new Version({value: '1.0'}), + version: new Version({ value: '1.0' }), }); expect(nameVersion.isDetected()).to.be.true(); - done(); }); }); describe('toString method with only name', () => { - it('should correctly handle name', (done) => { + it('should correctly handle name', () => { const nameVersion = new NameVersion(); expect(nameVersion.toString()).to.be.equal(''); nameVersion.reset({ name: 'Generic', - version: new Version({value: '1.0'}), + version: new Version({ value: '1.0' }), }); expect(nameVersion.toString()).to.be.equal('Generic 1.0'); - done(); }); - it('should correctly handle name and alias', (done) => { + it('should correctly handle name and alias', () => { const nameVersion = new NameVersion(); expect(nameVersion.toString()).to.be.equal(''); @@ -108,17 +101,16 @@ describe('NameVersion Class', () => { nameVersion.reset({ name: 'Generic', alias: 'Alias', - version: new Version({value: '1.0'}), + version: new Version({ value: '1.0' }), }); expect(nameVersion.toString()).to.be.equal('Alias 1.0'); - done(); }); }); describe('identifyVersion method', () => { describe('with matching RegExp', () => { - it('should find the version', (done) => { + it('should find the version', () => { const nameVersion = new NameVersion(); nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Version/1.0'); @@ -126,53 +118,42 @@ describe('NameVersion Class', () => { nameVersion.reset(); expect(nameVersion.getVersion()).to.be.equal(''); - - done(); }); }); describe('with not matching RegExp', () => { - it('should not find the version', (done) => { + it('should not find the version', () => { const nameVersion = new NameVersion(); nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Other/1.0'); expect(nameVersion.getVersion()).to.be.equal(''); - - done(); }); }); - describe('with matching RegExp and details', () => { - it('should find the version and truncate it according to details', (done) => { + it('should find the version and truncate it according to details', () => { const nameVersion = new NameVersion(); - nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Version/1.0', {details: 1}); + nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Version/1.0', { details: 1 }); expect(nameVersion.getVersion()).to.be.equal('1'); - - done(); }); }); describe('with matching RegExp and with underscore', () => { - it('should find the version and replace underscores', (done) => { + it('should find the version and replace underscores', () => { const nameVersion = new NameVersion(); - nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Version/1_0_2', {type: 'underscore'}); + nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Version/1_0_2', { type: 'underscore' }); expect(nameVersion.getVersion()).to.be.equal('1'); - - done(); }); }); describe('with matching RegExp and with legacy type', () => { - it('should find the version and transform it from legacy', (done) => { + it('should find the version and transform it from legacy', () => { const nameVersion = new NameVersion(); - nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Version/1.02', {type: 'legacy'}); + nameVersion.identifyVersion(/Version\/([0-9.]+)/u, 'Version/1.02', { type: 'legacy' }); expect(nameVersion.getVersion()).to.be.equal('1.0.2'); - - done(); }); }); }); diff --git a/test/unit/AnalyserTest.js b/test/unit/AnalyserTest.js index dabfe26..98a4ecd 100644 --- a/test/unit/AnalyserTest.js +++ b/test/unit/AnalyserTest.js @@ -1,11 +1,11 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Main = require('../../src/model/Main'); const Analyser = require('../../src/Analyser'); describe('Analyser Class', () => { describe('Create and getData back', () => { - it('should return an instance of Main Class', (done) => { + it('should return an instance of Main Class', () => { const analyser = new Analyser({ 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)', }); @@ -14,12 +14,11 @@ describe('Analyser Class', () => { analyser.analyse(); expect(analyser.getData()).to.be.instanceOf(Main); - done(); }); }); describe('create and setData ', () => { - it('getData should return an instance of Main Class', (done) => { + it('getData should return an instance of Main Class', () => { const analyser = new Analyser({ 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)', }); @@ -33,7 +32,6 @@ describe('Analyser Class', () => { analyser.analyse(); expect(analyser.getData()).to.be.instanceOf(Main); - done(); }); }); }); diff --git a/test/unit/CacheTest.js b/test/unit/CacheTest.js index fd45ed8..712c6a2 100644 --- a/test/unit/CacheTest.js +++ b/test/unit/CacheTest.js @@ -1,5 +1,5 @@ -const {describe, it, beforeEach, afterEach} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it, beforeEach, afterEach } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Sinon = require('sinon'); const Parser = require('../../src/Parser'); const Cache = require('../../src/Cache'); @@ -7,84 +7,80 @@ const header1 = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)' const header2 = 'User-Agent: Mozilla/5.0 (Linux; Android 4.0.3; GT-P3113 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/535.19'; const comparision1 = { - browser: {name: 'Internet Explorer', version: '6.0', type: 'browser'}, - engine: {name: 'Trident'}, - os: {name: 'Windows', version: {value: '5.0', alias: '2000'}}, - device: {type: 'desktop'}, + browser: { name: 'Internet Explorer', version: '6.0', type: 'browser' }, + engine: { name: 'Trident' }, + os: { name: 'Windows', version: { value: '5.0', alias: '2000' } }, + device: { type: 'desktop' }, }; const comparision2 = { - browser: {name: 'Chrome', version: '18', type: 'browser'}, - engine: {name: 'Webkit', version: '535.19'}, - os: {name: 'Android', version: '4.0.3'}, - device: {type: 'tablet', manufacturer: 'Samsung', model: 'Galaxy Tab 2 7.0'}, + browser: { name: 'Chrome', version: '18', type: 'browser' }, + engine: { name: 'Webkit', version: '535.19' }, + os: { name: 'Android', version: '4.0.3' }, + device: { type: 'tablet', manufacturer: 'Samsung', model: 'Galaxy Tab 2 7.0' }, }; let clock; describe('Cache Class', () => { - beforeEach((done) => { + beforeEach(() => { Cache.resetClassState(); - clock = Sinon.useFakeTimers('setInterval', 'clearInterval', 'Date'); - done(); + clock = Sinon.useFakeTimers({ + toFake: ['setInterval', 'clearInterval', 'Date'], + }); }); - afterEach((done) => { + afterEach(() => { clock.restore(); - done(); }); + describe('Two subsequent parse with same UA', () => { - it('should be cached', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + it('should be cached', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); - - done(); }); }); describe('Two subsequent parse with different UA', () => { - it('should not be cached', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + it('should not be cached', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - result = new Parser(header2, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header2, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision2); expect(result.cached).to.not.exist(); - done(); }); }); describe('Create cache with negative expiry time', () => { - it('should let the Cache never expire', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: -1}); + it('should let the Cache never expire', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: -1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); // let pass 2 years - clock.tick(60 * 60 * 24 * 265 * 2 * 1000); + clock.jump(60 * 60 * 24 * 265 * 2 * 1000); // it's still in cache - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); - - done(); }); }); describe('Create cache with an expiry time that would make the cache check interval be 0s (cacheExpires/5), ', () => { - it('should instead be 1s', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 4}); + it('should instead be 1s', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 4 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); // let pass 3 seconds clock.tick(3 * 1000); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 4}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 4 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); @@ -92,103 +88,93 @@ describe('Cache Class', () => { clock.tick((4 + 1 + 1) * 1000); // No more in cache - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 4}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 4 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); describe('Default cache with default expiry time and expiry check timer', () => { - it('should be empty after expiry time 900s + 1/5 * 900s + 1s', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + it('should be empty after expiry time 900s + 1/5 * 900s + 1s', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); clock.tick((900 + 900 / 5 + 1) * 1000); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); describe('Default cache with default expiry time but with 1s expiry check timer', () => { - it('should be empty after expiry time 900s + 1s + 1s', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + it('should be empty after expiry time 900s + 1s + 1s', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); clock.tick((900 + 1 + 1) * 1000); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); describe('Default cache with 100s expiry time and default expiry check timer', () => { - it('should be empty after expiry time 100s + 1/5 * 100s + 1s', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100}); + it('should be empty after expiry time 100s + 1/5 * 100s + 1s', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); clock.tick((100 + 100 / 5 + 1) * 1000); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); describe('Default cache with 100s expiry time but with 2s expiry check timer', () => { - it('should be empty after expiry time 100s + 2s + 1s', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2}); + it('should be empty after expiry time 100s + 2s + 1s', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); clock.tick((100 + 2 + 1) * 1000); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); describe('Default cache with default expiry time but with 1s expiry check timer, one item with cache refreshed and one not', () => { - it('the one refreshed should be in cache after the first expiry time (900 + 1 + 1), the other not', (done) => { + it('the one refreshed should be in cache after the first expiry time (900 + 1 + 1), the other not', () => { // First call to Parser, cache both - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); - let result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); + let result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); @@ -197,8 +183,8 @@ describe('Cache Class', () => { expect(result2.cached).to.not.exist(); // Second call, check that are cached - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); - result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); + result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); @@ -210,7 +196,7 @@ describe('Cache Class', () => { clock.tick(899 * 1000); // Refresh only the record related to header 1 - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); @@ -218,22 +204,21 @@ describe('Cache Class', () => { clock.tick(3 * 1000); // Call the parser with header1, it should be still in cache - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); // Call the parser with header2, it should NOT be in cache - result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); expect(result2.toObject()).to.be.equal(comparision2); expect(result2.cached).to.not.exist(); - done(); }); }); describe('Change the expiry time while cache is populated', () => { - it('should affect only new items, and updated the expiry time after a new cache hit', (done) => { + it('should affect only new items, and updated the expiry time after a new cache hit', () => { // First call to Parser, still not cached, expiry time default to 900s - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); @@ -242,7 +227,7 @@ describe('Cache Class', () => { clock.tick(200 * 1000); // Put in cache a new item with 100s expiry time - let result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100}); + let result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100 }); expect(result2.toObject()).to.be.equal(comparision2); expect(result2.cached).to.not.exist(); @@ -250,13 +235,13 @@ describe('Cache Class', () => { // let expire the second item clock.tick((100 + 100 / 5 + 1) * 1000); - result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100}); + result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100 }); expect(result2.toObject()).to.be.equal(comparision2); expect(result2.cached).to.not.exist(); // First item is still in cache, parse it and update the expiry time - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); @@ -264,150 +249,110 @@ describe('Cache Class', () => { clock.tick((100 + 100 / 5 + 1) * 1000); // Item has expired also if the first 900s are not passed - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); describe('Parse UA with no expiry time', () => { - it('should never expire', (done) => { + it('should never expire', () => { // First call to Parser, still not cached, expiry time default to 900s - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 0}); + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 0 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); // let pass 2 years - clock.tick(60 * 60 * 24 * 265 * 2 * 1000); + clock.jump(60 * 60 * 24 * 265 * 2 * 1000); // it's still in cache - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); - - done(); - }); - }); - - describe('Disable cache expiry when cache has already some item inside,', () => { - it('also old item with expiry time should never expire', (done) => { - // First call to Parser, still not cached, expiry time default to 900s - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); - expect(result.toObject()).to.be.equal(comparision1); - expect(result.cached).to.not.exist(); - - // let pass half expiration time - clock.tick(450 * 1000); - - let result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE, cacheExpires: 0}); - expect(result2.toObject()).to.be.equal(comparision2); - expect(result2.cached).to.not.exist(); - - // let pass 2 years - clock.tick(60 * 60 * 24 * 265 * 2 * 1000); - - // it's still in cache - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); - expect(result.toObject()).to.be.equal(comparision1); - expect(result.cached).to.be.true(); - - result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE}); - expect(result2.toObject()).to.be.equal(comparision2); - expect(result2.cached).to.be.true(); - - done(); }); }); describe('Enable cache expiry when cache has already some item inside with no expiry time,', () => { - it('Old items are still there when the new expiry time come', (done) => { + it('Old items are still there when the new expiry time come', () => { // First call to Parser, still not cached, expiry time default to 900s - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 0}); + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 0 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); // let pass 2 years - clock.tick(60 * 60 * 24 * 265 * 2 * 1000); + clock.jump(60 * 60 * 24 * 265 * 2 * 1000); // it's still in cache - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 0}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 0 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); - let result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE}); + let result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE }); expect(result2.toObject()).to.be.equal(comparision2); expect(result2.cached).to.not.exist(); // expiry the second record clock.tick((900 + 900 / 5 + 1) * 1000); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); - result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE}); + result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE }); expect(result2.toObject()).to.be.equal(comparision2); expect(result2.cached).to.not.exists(); - - done(); }); }); describe('Default cache with 100s expiry time but with 2s expiry check timer', () => { - it('should be empty after expiry time 100s + 2s + 1s', (done) => { - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2}); + it('should be empty after expiry time 100s + 2s + 1s', () => { + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); clock.tick((100 + 2 + 1) * 1000); - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE, cacheExpires: 100, cacheCheckInterval: 2 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); describe('Default cache with default expiry time and default check interval, after a second parse that change the check internval', () => { - it('should correctly update the cache check loop', (done) => { + it('should correctly update the cache check loop', () => { // First call to Parser, cache both - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); // Make the timer be 1 second before the cache expiry time clock.tick(899 * 1000); - let result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1}); + let result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE, cacheCheckInterval: 1 }); // Let the cache expire for header 1 and let the cache check interval pass clock.tick((1 + 1 + 1) * 1000); // header 1 record should be gone, header 2 one shoul be there in cache - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); - result2 = new Parser(header2, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); + result2 = new Parser(header2, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); expect(result2.toObject()).to.be.equal(comparision2); expect(result2.cached).to.be.true(); - - done(); }); }); describe('Default cache with default expiry time and default check interval: second parse is done without cache', () => { - it('the result returned should not come from cache', (done) => { + it('the result returned should not come from cache', () => { // First call to Parser, cache both - let result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + let result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); @@ -415,16 +360,14 @@ describe('Cache Class', () => { clock.tick(100 * 1000); // cache is populated with header1 record - result = new Parser(header1, {cache: Parser.SIMPLE_CACHE}); + result = new Parser(header1, { cache: Parser.SIMPLE_CACHE }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.be.true(); // parse the same header without cache property in options - result = new Parser(header1, {cacheCheckInterval: 1}); + result = new Parser(header1, { cacheCheckInterval: 1 }); expect(result.toObject()).to.be.equal(comparision1); expect(result.cached).to.not.exist(); - - done(); }); }); }); diff --git a/test/unit/MassiveTest.js b/test/unit/MassiveTest.js index fedb3f6..2e76290 100644 --- a/test/unit/MassiveTest.js +++ b/test/unit/MassiveTest.js @@ -1,7 +1,7 @@ /* eslint-disable require-jsdoc */ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Parser = require('../../src/Parser'); const path = require('path'); const fs = require('fs'); @@ -18,7 +18,9 @@ describe('Testing Parser with YAML files', () => { const yamlContent = yaml.load(path.join(__dirname, '../data', category, file)); yamlContent.forEach(makeTest); } catch (e) { + // eslint-disable-next-line no-console console.error(e); + // eslint-disable-next-line no-console console.error('The above error is caused in the test file ' + category + '/' + file); throw new Error('Aborting the tests'); @@ -28,7 +30,7 @@ describe('Testing Parser with YAML files', () => { }); function makeTest(options) { - it(`With header: ${options.headers}`, (done) => { + it(`With header: ${options.headers}`, () => { if (options.headers && typeof options.headers === 'string') { options.headers = parseHeaders(options.headers); } @@ -37,7 +39,6 @@ function makeTest(options) { expect(parserObj.toString()).to.be.equal(options.readable); expect(parserObj.toObject()).to.be.equal(options.result); expect(parserObj.cached).to.not.exists(); - done(); }); } @@ -45,7 +46,7 @@ function parseHeaders(rawHeaders) { const headers = {}; let key = ''; - for (let header of rawHeaders.split('\n')) { + for (const header of rawHeaders.split('\n')) { let [headerName, ...headerValue] = header.split(':'); headerValue = headerValue.join(':'); if (headerValue) { diff --git a/test/unit/ParserTest.js b/test/unit/ParserTest.js index 84fe4c8..adcc9ad 100644 --- a/test/unit/ParserTest.js +++ b/test/unit/ParserTest.js @@ -1,52 +1,48 @@ -const {describe, it} = (exports.lab = require('lab').script()); -const expect = require('code').expect; +const { describe, it } = (exports.lab = require('@hapi/lab').script()); +const expect = require('@hapi/code').expect; const Parser = require('../../src/Parser'); describe('Parser Class', () => { describe('Creating Parse with string', () => { - it('should work', (done) => { + it('should work', () => { const parser = new Parser('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)'); expect(parser).to.be.instanceOf(Parser); expect(parser.isBrowser('Internet Explorer', '=', '6.0')).to.be.true(); - done(); }); }); describe('Creating Parse with headers object', () => { - it('should work', (done) => { - const parser = new Parser({'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)'}); + it('should work', () => { + const parser = new Parser({ 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)' }); expect(parser).to.be.instanceOf(Parser); expect(parser.isBrowser('Internet Explorer', '=', '6.0')).to.be.true(); - done(); }); }); describe('Creating Parse with options', () => { - it('should work', (done) => { + it('should work', () => { const parser = new Parser({ - headers: {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)'}, + headers: { 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)' }, }); expect(parser).to.be.instanceOf(Parser); expect(parser.isBrowser('Internet Explorer', '=', '6.0')).to.be.true(); - done(); }); }); describe('Creating Parse without arguments', () => { - it('an calling analyse should work', (done) => { + it('an calling analyse should work', () => { const parser = new Parser(); parser.analyse('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; InfoPath.1)'); expect(parser).to.be.instanceOf(Parser); expect(parser.isBrowser('Internet Explorer', '=', '6.0')).to.be.true(); - done(); }); }); });