From daeaf175b803d4ca013606ad3f6d2696a09cce42 Mon Sep 17 00:00:00 2001 From: Moritz Heusinger Date: Sat, 7 Jan 2023 12:24:35 +0100 Subject: [PATCH] partial ts port --- .eslintrc.js | 163 + .eslintrc.json | 77 - build/lib/tools.d.ts | 19 + build/lib/tools.js | 81 + build/lib/tools.js.map | 1 + build/lib/upnp.d.ts | 45 + build/lib/upnp.js | 190 + build/lib/upnp.js.map | 1 + build/lib/utils.d.ts | 42 + {lib => build/lib}/utils.js | 101 +- build/lib/utils.js.map | 1 + build/main.d.ts | 3 + build/main.js | 2471 ++++++++++ build/main.js.map | 1 + package-lock.json | 7584 +++++++++++++++++++++++++++++- package.json | 17 +- lib/tools.js => src/lib/tools.ts | 43 +- lib/upnp.js => src/lib/upnp.ts | 86 +- src/lib/utils.ts | 1295 +++++ main.js => src/main.js | 114 +- test/integrationAdapter.js | 9 +- test/packageFiles.js | 4 +- test/unitAdapter.js | 14 +- tsconfig.build.json | 17 + tsconfig.json | 52 + 25 files changed, 12088 insertions(+), 343 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json create mode 100644 build/lib/tools.d.ts create mode 100644 build/lib/tools.js create mode 100644 build/lib/tools.js.map create mode 100644 build/lib/upnp.d.ts create mode 100644 build/lib/upnp.js create mode 100644 build/lib/upnp.js.map create mode 100644 build/lib/utils.d.ts rename {lib => build/lib}/utils.js (94%) create mode 100644 build/lib/utils.js.map create mode 100644 build/main.d.ts create mode 100644 build/main.js create mode 100644 build/main.js.map rename lib/tools.js => src/lib/tools.ts (68%) rename lib/upnp.js => src/lib/upnp.ts (79%) create mode 100644 src/lib/utils.ts rename main.js => src/main.js (96%) create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..c5c85ad --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,163 @@ +module.exports = { + env: { + es6: true, + node: true + }, + extends: ['eslint:recommended', 'plugin:prettier/recommended'], + plugins: [], + ignorePatterns: ['**/doc', '**/build', 'admin/'], + reportUnusedDisableDirectives: true, + rules: { + /* pretier takes care of these two rules + indent: [ + 'error', + 4, + { + SwitchCase: 1 + } + ], + 'array-element-newline': [ + 'error', + { + ArrayExpression: 'consistent', + ArrayPattern: { minItems: 3 } + } + ],*/ + curly: 'error', + 'brace-style': 'error', + 'arrow-parens': ['error', 'as-needed'], + 'no-console': 'off', + 'no-unused-vars': ['error', { argsIgnorePattern: '^_', caughtErrors: 'all' }], + 'no-useless-escape': 'warn', + 'no-constant-condition': 'off', + 'no-multiple-empty-lines': ['error', { max: 1, maxEOF: 1 }], + 'no-var': 'error', + 'prefer-const': 'error', + 'no-throw-literal': 'error', + 'prefer-promise-reject-errors': 'error', + 'require-await': 'error', + 'no-return-await': 'error', + eqeqeq: ['error', 'always'], + quotes: [ + 'error', + 'single', + { + avoidEscape: true, + allowTemplateLiterals: true + } + ], + semi: ['error', 'always'], + 'comma-dangle': [ + 'error', + { + arrays: 'never', + objects: 'never', + imports: 'never', + exports: 'never', + functions: 'ignore' + } + ], + 'no-trailing-spaces': 'error', + 'prettier/prettier': 'error', + 'no-nested-ternary': 'off', // maybe turn this on later + 'no-unneeded-ternary': 'error' + }, + parserOptions: { + ecmaVersion: 2019 + }, + overrides: [ + // we need ts parser for ts files + { + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2019, + sourceType: 'module', + project: './tsconfig.json' + }, + files: ['**/*.ts', '**/*.tsx'], + extends: ['plugin:@typescript-eslint/recommended'], + rules: { + '@typescript-eslint/no-parameter-properties': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-use-before-define': [ + 'error', + { + functions: false, + typedefs: false, + classes: false + } + ], + '@typescript-eslint/no-unused-vars': [ + 'error', + { + ignoreRestSiblings: true, + argsIgnorePattern: '^_' + } + ], + '@typescript-eslint/no-object-literal-type-assertion': 'off', + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', // This is necessary for Map.has()/get()! + '@typescript-eslint/no-inferrable-types': [ + 'error', + { + ignoreProperties: true, + ignoreParameters: true + } + ], + '@typescript-eslint/ban-ts-comment': [ + 'error', + { + 'ts-expect-error': false, + 'ts-ignore': true, + 'ts-nocheck': true, + 'ts-check': false + } + ], + '@typescript-eslint/restrict-template-expressions': [ + 'error', + { + allowNumber: true, + allowBoolean: true, + // This is necessary to log errors + // TODO: Consider switching to false when we may annotate catch clauses + allowAny: true, + allowNullish: true + } + ], + '@typescript-eslint/no-misused-promises': [ + 'error', + { + checksVoidReturn: false + } + ], + // We can turn this on from time to time but in general these rules + // make our lives harder instead of easier + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + + // Although this rule makes sense, it takes about a second to execute (and we don't need it) + '@typescript-eslint/no-implied-eval': 'off', + + '@typescript-eslint/explicit-module-boundary-types': [ + 'warn', + { allowArgumentsExplicitlyTypedAsAny: true } + ], + '@typescript-eslint/no-this-alias': 'off', + + // Prefer simple property access and declaration without quotes + 'dot-notation': 'off', + '@typescript-eslint/dot-notation': [ + 'error', + { + allowPrivateClassPropertyAccess: true, + allowProtectedClassPropertyAccess: true + } + ], + 'quote-props': ['error', 'as-needed'] + } + } + ] +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index e9f7c2b..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "env": { - "es6": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:prettier/recommended" - ], - "rules": { - "indent": [ - "error", - 4, - { - "SwitchCase": 1 - } - ], - "curly": "error", - "brace-style": "error", - "arrow-parens": [ - "error", - "as-needed" - ], - "no-console": "off", - "no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_" - } - ], - "no-useless-escape": "warn", - "no-constant-condition": "off", - "no-multiple-empty-lines": [ - "error", - { - "max": 1, - "maxEOF": 1 - } - ], - "no-var": "error", - "prefer-const": "error", - "no-throw-literal": "error", - "prefer-promise-reject-errors": "error", - "require-await": "error", - "no-return-await": "error", - "eqeqeq": [ - "error", - "always" - ], - "quotes": [ - "error", - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": true - } - ], - "semi": [ - "error", - "always" - ], - "comma-dangle": [ - "error", - { - "arrays": "never", - "objects": "never", - "imports": "never", - "exports": "never", - "functions": "ignore" - } - ], - "no-trailing-spaces": "error" - }, - "parserOptions": { - "ecmaVersion": 2019 - } -} diff --git a/build/lib/tools.d.ts b/build/lib/tools.d.ts new file mode 100644 index 0000000..2ebf2b8 --- /dev/null +++ b/build/lib/tools.d.ts @@ -0,0 +1,19 @@ +/** + * Tests whether the given variable is a real object and not an Array + * @param it The variable to test + */ +export declare function isObject(it: any): it is Record; +/** + * Tests whether the given variable is really an Array + * @param it The variable to test + */ +export declare function isArray(it: any): it is any[]; +/** + * Translates text using the Google Translate API + * @param text The text to translate + * @param targetLang The target languate + * @param yandex api key + */ +export declare function translateText(text: string, targetLang: string, yandex: string): Promise; +export declare function translateYandex(text: string, targetLang: string, yandex: string): Promise; +export declare function translateGoogle(text: string, targetLang: string): Promise; diff --git a/build/lib/tools.js b/build/lib/tools.js new file mode 100644 index 0000000..c24be9e --- /dev/null +++ b/build/lib/tools.js @@ -0,0 +1,81 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.translateGoogle = exports.translateYandex = exports.translateText = exports.isArray = exports.isObject = void 0; +const axios_1 = __importDefault(require("axios")); +/** + * Tests whether the given variable is a real object and not an Array + * @param it The variable to test + */ +function isObject(it) { + // This is necessary because: + // typeof null === 'object' + // typeof [] === 'object' + // [] instanceof Object === true + return Object.prototype.toString.call(it) === '[object Object]'; +} +exports.isObject = isObject; +/** + * Tests whether the given variable is really an Array + * @param it The variable to test + */ +function isArray(it) { + if (Array.isArray) { + return Array.isArray(it); + } + return Object.prototype.toString.call(it) === '[object Array]'; +} +exports.isArray = isArray; +/** + * Translates text using the Google Translate API + * @param text The text to translate + * @param targetLang The target languate + * @param yandex api key + */ +async function translateText(text, targetLang, yandex) { + if (targetLang === 'en') { + return text; + } + if (yandex) { + await translateYandex(text, targetLang, yandex); + } + else { + await translateGoogle(text, targetLang); + } +} +exports.translateText = translateText; +async function translateYandex(text, targetLang, yandex) { + if (targetLang === 'zh-cn') { + targetLang = 'zh'; + } + try { + const url = `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${yandex}&text=${encodeURIComponent(text)}&lang=en-${targetLang}`; + const response = await (0, axios_1.default)({ url, timeout: 15000 }); + if (response.data && response.data.text) { + return response.data.text[0]; + } + throw new Error('Invalid response for translate request'); + } + catch (e) { + throw new Error(`Could not translate to "${targetLang}": ${e.message}`); + } +} +exports.translateYandex = translateYandex; +async function translateGoogle(text, targetLang) { + try { + const url = `http://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=${targetLang}&dt=t&q=${encodeURIComponent(text)}&ie=UTF-8&oe=UTF-8`; + const response = await (0, axios_1.default)({ url, timeout: 15000 }); + if (isArray(response.data)) { + // we got a valid response + return response.data[0][0][0]; + } + throw new Error('Invalid response for translate request'); + } + catch (e) { + throw new Error(`Could not translate to "${targetLang}": ${e.message}`); + } +} +exports.translateGoogle = translateGoogle; +//# sourceMappingURL=tools.js.map \ No newline at end of file diff --git a/build/lib/tools.js.map b/build/lib/tools.js.map new file mode 100644 index 0000000..48888c8 --- /dev/null +++ b/build/lib/tools.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/lib/tools.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B;;;GAGG;AACH,SAAgB,QAAQ,CAAC,EAAO;IAC5B,6BAA6B;IAC7B,2BAA2B;IAC3B,yBAAyB;IACzB,gCAAgC;IAChC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,iBAAiB,CAAC;AACpE,CAAC;AAND,4BAMC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,EAAO;IAC3B,IAAI,KAAK,CAAC,OAAO,EAAE;QACf,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;KAC5B;IACD,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,gBAAgB,CAAC;AACnE,CAAC;AALD,0BAKC;AAED;;;;;GAKG;AACI,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;IAChF,IAAI,UAAU,KAAK,IAAI,EAAE;QACrB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,MAAM,EAAE;QACR,MAAM,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;KACnD;SAAM;QACH,MAAM,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KAC3C;AACL,CAAC;AATD,sCASC;AAEM,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;IAClF,IAAI,UAAU,KAAK,OAAO,EAAE;QACxB,UAAU,GAAG,IAAI,CAAC;KACrB;IACD,IAAI;QACA,MAAM,GAAG,GAAG,+DAA+D,MAAM,SAAS,kBAAkB,CACxG,IAAI,CACP,YAAY,UAAU,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAK,EAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;YACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChC;QACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC7D;IAAC,OAAO,CAAM,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KAC3E;AACL,CAAC;AAhBD,0CAgBC;AAEM,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,UAAkB;IAClE,IAAI;QACA,MAAM,GAAG,GAAG,0EAA0E,UAAU,WAAW,kBAAkB,CACzH,IAAI,CACP,oBAAoB,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAK,EAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,0BAA0B;YAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;QACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC7D;IAAC,OAAO,CAAM,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KAC3E;AACL,CAAC;AAdD,0CAcC"} \ No newline at end of file diff --git a/build/lib/upnp.d.ts b/build/lib/upnp.d.ts new file mode 100644 index 0000000..9a0201d --- /dev/null +++ b/build/lib/upnp.d.ts @@ -0,0 +1,45 @@ +/** + * Tries to read HTML page. + * + * @param link http link, like http://192.168.1.2:80/abc/de.xml + * @param timeout timeout in ms (default 500) + * @param callback return result + */ +export declare function httpGet(link: string, timeout: number, callback: (err: any, result: string | null, link?: string) => void): void; +/** + * Helper function scan UPnP devices. + * + * First of all it sends UDP Multicast to detect devices with defined ST to port 1900. + * + * The answer will be parsed in form: + *

+ *    {
+ *      "HTTP/1.1 200 OK": "",
+ *      "CACHE-CONTROL": "max-age = 1800"
+ *      "EXT:
+ *      "LOCATION": "http://192.168.1.55:1400/xml/device_description.xml",
+ *      "SERVER": "Linux UPnP/1.0 Sonos/34.16-37101 (ZP90)",
+ *      "ST": "urn:schemas-upnp-org:device:ZonePlayer:1",
+ *      "USN": "uuid:RINCON_000E58A0099A04567::urn:schemas-upnp-org:device:ZonePlayer:1",
+ *      "X-RINCON-HOUSEHOLD": "Sonos_vCu667379mc1UczAwr12311234",
+ *      "X-RINCON-BOOTSEQ": "82",
+ *      "X-RINCON-WIFIMODE": "0",
+ *      "X-RINCON-VARIANT": "0"
+ *    }
+ * 
+ * If readXml is enabled and result.LOCATION exists, so this location will be read and delivered as xmlData. + * You can call the function with object too + *

+ *   ssdpScan({ip: '192.168.1.3', st: 'urn:dial-multiscreen-org:service:dial:1', readXml: true}, function (error, result, ip, xmlData) {
+ *      if (result) console.log('Found UPnP device');
+ *   });
+ * 
+ * + * @alias ssdpScan + * @memberof tools + * @param text filter string like "urn:dial-multiscreen-org:service:dial:1" + * @param readXml if LOCATION xml should be read + * @param timeout timeout in ms (default 1000) + * @param callback return result + */ +export declare function ssdpScan(text: string, readXml: boolean, timeout: number, callback: (err: any, res: any, ip?: string, xmlData?: any) => void): void; diff --git a/build/lib/upnp.js b/build/lib/upnp.js new file mode 100644 index 0000000..ad88caa --- /dev/null +++ b/build/lib/upnp.js @@ -0,0 +1,190 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ssdpScan = exports.httpGet = void 0; +const http_1 = __importDefault(require("http")); +const dgram_1 = __importDefault(require("dgram")); +const os_1 = require("os"); +/** + * Tries to read HTML page. + * + * @param link http link, like http://192.168.1.2:80/abc/de.xml + * @param timeout timeout in ms (default 500) + * @param callback return result + */ +function httpGet(link, timeout, callback) { + const req = http_1.default + .get(link, res => { + const statusCode = res.statusCode; + if (statusCode !== 200) { + // consume response data to free up memory + res.resume(); + callback(statusCode, null, link); + } + res.setEncoding('utf8'); + let rawData = ''; + res.on('data', chunk => (rawData += chunk)); + res.on('end', () => callback && callback(null, rawData ? rawData.toString() : null)); + }) + .on('error', e => callback && callback(e.message, null)); + req.setTimeout(timeout, () => { + req.destroy(); + callback && callback('timeout', null); + // @ts-expect-error change signature or remove it + callback = null; + }); +} +exports.httpGet = httpGet; +/** + * Helper function scan UPnP devices. + * + * First of all it sends UDP Multicast to detect devices with defined ST to port 1900. + * + * The answer will be parsed in form: + *

+ *    {
+ *      "HTTP/1.1 200 OK": "",
+ *      "CACHE-CONTROL": "max-age = 1800"
+ *      "EXT:
+ *      "LOCATION": "http://192.168.1.55:1400/xml/device_description.xml",
+ *      "SERVER": "Linux UPnP/1.0 Sonos/34.16-37101 (ZP90)",
+ *      "ST": "urn:schemas-upnp-org:device:ZonePlayer:1",
+ *      "USN": "uuid:RINCON_000E58A0099A04567::urn:schemas-upnp-org:device:ZonePlayer:1",
+ *      "X-RINCON-HOUSEHOLD": "Sonos_vCu667379mc1UczAwr12311234",
+ *      "X-RINCON-BOOTSEQ": "82",
+ *      "X-RINCON-WIFIMODE": "0",
+ *      "X-RINCON-VARIANT": "0"
+ *    }
+ * 
+ * If readXml is enabled and result.LOCATION exists, so this location will be read and delivered as xmlData. + * You can call the function with object too + *

+ *   ssdpScan({ip: '192.168.1.3', st: 'urn:dial-multiscreen-org:service:dial:1', readXml: true}, function (error, result, ip, xmlData) {
+ *      if (result) console.log('Found UPnP device');
+ *   });
+ * 
+ * + * @alias ssdpScan + * @memberof tools + * @param text filter string like "urn:dial-multiscreen-org:service:dial:1" + * @param readXml if LOCATION xml should be read + * @param timeout timeout in ms (default 1000) + * @param callback return result + */ +function ssdpScan(text, readXml, timeout, callback) { + timeout = timeout || 1000; + let timer; + const interfaces = (0, os_1.networkInterfaces)(); + const sockets = []; + const result = []; + Object.keys(interfaces).forEach(iName => { + interfaces[iName].forEach(ipInfo => { + if (!ipInfo.internal && ipInfo.family === 'IPv4') { + (ip => { + const socket = dgram_1.default.createSocket({ type: 'udp4', reuseAddr: true }); + if (socket) { + socket.unref(); + // Send to port 1900 UDP request + socket.on('error', err => { + if (timer) { + clearTimeout(timer); + timer = null; + } + if (callback) { + callback(err, result); + // @ts-expect-error fix it + callback = null; + } + if (socket) { + socket.close(); + } + }); + socket.on('message', (_msg, rinfo) => { + /* expected: + HTTP/1.1 200 OK + CACHE-CONTROL: max-age = 1800 + EXT: + LOCATION: http://192.168.1.55:1400/xml/device_description.xml + SERVER: Linux UPnP/1.0 Sonos/34.16-37101 (ZP90) + ST: urn:schemas-upnp-org:device:ZonePlayer:1 + USN: uuid:RINCON_000E58A0099A04567::urn:schemas-upnp-org:device:ZonePlayer:1 + X-RINCON-HOUSEHOLD: Sonos_vCu667379mc1UczAwr12311234 + X-RINCON-BOOTSEQ: 82 + X-RINCON-WIFIMODE: 0 + X-RINCON-VARIANT: 0 + */ + let msg = _msg ? _msg.toString() : ''; + msg = msg.replace(/\r\n/g, '\n'); + const device = { ip: rinfo.address }; + if (!result.find(dev => dev.ip === device.ip)) { + const lines = msg.split('\n'); + const obj = {}; + for (let i = 0; i < lines.length; i++) { + const pos = lines[i].indexOf(':'); + if (pos !== -1) { + obj[lines[i].substring(0, pos)] = lines[i].substring(pos + 1).trim(); + } + else { + obj[lines[i]] = ''; + } + } + device.data = obj; + console.log(`Answer from ${device.ip}`); + result.push(device); + if (readXml && obj.LOCATION) { + httpGet(obj.LOCATION, timeout, (err, data) => { + if (err) { + console.error(`No answer from ${device.ip}: ${JSON.stringify(err)}`); + } + else if (data) { + device.xml = data.split('\n'); + device.xml.forEach((line) => { + let m = line.match('(.+)'); + if (m) { + device.manufacturer = m[1]; + } + m = line.match('(.+)'); + if (m) { + device.name = m[1]; + } + }); + } + else { + console.log(`No answer from ${device.ip}`); + } + }); + } + } + }); + socket.on('listening', () => { + socket.addMembership('239.255.255.250', ip); + socket.setMulticastTTL(4); + let msg; + if (parseInt(process.version.substring(1), 10) < 6) { + msg = new Buffer(text); + } + else { + msg = Buffer.from(text); + } + socket.send(msg, 0, msg.length, 1900, '239.255.255.250'); + }); + socket.bind(19001, ip); + } + })(ipInfo.address); + } + }); + }); + timer = setTimeout(() => { + timer = null; + sockets.forEach(socket => socket.close()); + if (callback) { + callback(null, result); + // @ts-expect-error fix it + callback = null; + } + }, timeout || 1000); +} +exports.ssdpScan = ssdpScan; +//# sourceMappingURL=upnp.js.map \ No newline at end of file diff --git a/build/lib/upnp.js.map b/build/lib/upnp.js.map new file mode 100644 index 0000000..30329fd --- /dev/null +++ b/build/lib/upnp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"upnp.js","sourceRoot":"","sources":["../../src/lib/upnp.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/lib/utils.d.ts b/build/lib/utils.d.ts new file mode 100644 index 0000000..3b7621f --- /dev/null +++ b/build/lib/utils.d.ts @@ -0,0 +1,42 @@ +/// +/** + * Decode state e.g. for selectInput by searching for state in key and value of the states + * + * @alias decodeState + * @param stateRecord key value pair of states + * @param state state key or value which will be matched + */ +export declare function decodeState(stateRecord: Record, state: string | number): string; +/** + * Converts user input into sendable volume command + * @param input + */ +export declare function inputToVol(input: number): string; +/** + * Convert volume to dB + * + * @alias volToDb + * @param vol volume e. g. '50.5' + * @returns dB + */ +export declare function volToDb(volStr: string): number; +/** + * Waits given ms + * + * @param ms + */ +export declare function wait(ms: number): Promise; +/** + * Convert dB to volume + * + * @param vol volume in dB e. g. '10.5' + */ +export declare function dbToVol(vol: string): string; +export declare const commonCommands: ioBroker.AnyObject[]; +export declare const usCommandsZone: ioBroker.StateObject[]; +export declare const usCommands: ioBroker.StateObject[]; +/** + * Tests whether the given variable is a real object and not an Array + * @param it The variable to test + */ +export declare function isObject(it: any): it is Record; diff --git a/lib/utils.js b/build/lib/utils.js similarity index 94% rename from lib/utils.js rename to build/lib/utils.js index 4ddcfd6..f08ad1f 100644 --- a/lib/utils.js +++ b/build/lib/utils.js @@ -1,40 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isObject = exports.usCommands = exports.usCommandsZone = exports.commonCommands = exports.dbToVol = exports.wait = exports.volToDb = exports.inputToVol = exports.decodeState = void 0; /** * Decode state e.g. for selectInput by searching for state in key and value of the states * * @alias decodeState - * @param {Object} stateNames key value pair of states - * @param {string|number} state state key or value which will be matched + * @param stateRecord key value pair of states + * @param state state key or value which will be matched */ -function decodeState(stateNames, state) { - // decoding for e. g. selectInput --> Input: Key (when ascending integer) or Value Output: Value - const stateArray = Object.keys(stateNames).map(key => stateNames[key]); // returns stateNames[key] - for (const i in stateArray) { - if (state.toString().toUpperCase() === stateArray[i].toUpperCase() || i.toString() === state.toString()) { - return stateArray[i]; +function decodeState(stateRecord, state) { + for (const [id, name] of Object.entries(stateRecord)) { + if (state.toString().toUpperCase() === name.toUpperCase() || id === state.toString()) { + return name; } - } // endFor + } return ''; -} // endDecodeState - +} +exports.decodeState = decodeState; +/** + * Converts user input into sendable volume command + * @param input + */ +function inputToVol(input) { + let leadingZero; + if (input < 0) { + input = 0; + } + if (input % 0.5 !== 0) { + input = Math.round(input * 2) / 2; + } + if (input < 10) { + leadingZero = '0'; + } + else { + leadingZero = ''; + } + return leadingZero + input.toString().replace('.', ''); +} +exports.inputToVol = inputToVol; /** * Convert volume to dB * * @alias volToDb - * @param {string} vol volume e. g. '50.5' - * @returns {number} dB + * @param vol volume e. g. '50.5' + * @returns dB */ -function volToDb(vol) { - if (vol.length === 3) { - vol = vol / 10; // "305" -> 30.5 +function volToDb(volStr) { + let vol; + if (volStr.length === 3) { + vol = parseInt(volStr) / 10; // "305" -> 30.5 + } + else { + vol = parseInt(volStr); } vol -= 50; // Vol to dB return vol; -} // endVolToDb - +} +exports.volToDb = volToDb; /** * Waits given ms - * @param {number} ms - * @return {Promise} + * + * @param ms */ function wait(ms) { return new Promise(resolve => { @@ -43,21 +69,19 @@ function wait(ms) { }, ms); }); } - +exports.wait = wait; /** * Convert dB to volume * - * @alias dbToVol - * @param {string} vol volume in dB e. g. '10.5' - * @returns {string} volume + * @param vol volume in dB e. g. '10.5' */ function dbToVol(vol) { vol += 50; // dB to vol vol = vol.toString().replace('.', ''); return vol; -} // endDbToVol - -const commonCommands = [ +} +exports.dbToVol = dbToVol; +exports.commonCommands = [ { _id: 'info.friendlyName', type: 'state', @@ -1078,8 +1102,7 @@ const commonCommands = [ native: {} } ]; - -const usCommandsZone = [ +exports.usCommandsZone = [ { _id: 'speakerOneVolume', type: 'state', @@ -1227,8 +1250,7 @@ const usCommandsZone = [ native: {} } ]; - -const usCommands = [ +exports.usCommands = [ { _id: 'settings.powerConfigurationChange', type: 'state', @@ -1259,11 +1281,9 @@ const usCommands = [ native: {} } ]; - /** * Tests whether the given variable is a real object and not an Array - * @param {any} it The variable to test - * @returns {it is Record} + * @param it The variable to test */ function isObject(it) { // This is necessary because: @@ -1272,14 +1292,5 @@ function isObject(it) { // [] instanceof Object === true return Object.prototype.toString.call(it) === '[object Object]'; // this code is 25% faster then below one } - -module.exports = { - decodeState, - volToDb, - dbToVol, - isObject, - commonCommands, - usCommandsZone, - usCommands, - wait -}; +exports.isObject = isObject; +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/build/lib/utils.js.map b/build/lib/utils.js.map new file mode 100644 index 0000000..03c7b36 --- /dev/null +++ b/build/lib/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/main.d.ts b/build/main.d.ts new file mode 100644 index 0000000..c9d44ec --- /dev/null +++ b/build/main.d.ts @@ -0,0 +1,3 @@ +export = startAdapter; +declare function startAdapter(options: any): utils.AdapterInstance; +import utils = require("@iobroker/adapter-core"); diff --git a/build/main.js b/build/main.js new file mode 100644 index 0000000..c9b125e --- /dev/null +++ b/build/main.js @@ -0,0 +1,2471 @@ +/** + * DENON AVR adapter + */ +/* jshint -W097 */ // jshint strict:false +/*jslint node: true */ +'use strict'; +const utils = require('@iobroker/adapter-core'); +const net = require('net'); +const helper = require(`./lib/utils`); +const ssdpScan = require('./lib/upnp').ssdpScan; +const client = new net.Socket(); +let adapter; +let host; +let pollInterval; +let requestInterval; +let verboseConnection = true; +let previousError; +// holds a true value for already created capabilities +const capabilities = { + display: false, + multiMonitor: false, + subTwo: false, + audysseyLfc: false, + pictureMode: false, + speakerPreset: false +}; +const zonesCreated = {}; +let pollingVar = null; +let connectingVar = null; +let receiverType; +function startAdapter(options) { + options = options || {}; + Object.assign(options, { + name: 'denon' + }); + adapter = new utils.Adapter(options); + adapter.on('unload', callback => { + try { + if (connectingVar) { + clearTimeout(connectingVar); + } // endIf + if (pollingVar) { + clearTimeout(pollingVar); + } // endIf + /* + if (intervalPollVar) { + clearInterval(intervalPollVar); + } + */ + adapter.log.info('[END] Stopping Denon AVR adapter...'); + adapter.setState('info.connection', false, true); + client.destroy(); // kill connection + client.unref(); // kill connection + callback(); + } + catch (_a) { + callback(); + } + }); + adapter.on('message', obj => { + if (typeof obj === 'object') { + if (obj.command === 'browse') { + // frontend will call browse + if (obj.callback) { + adapter.log.info('start browse'); + ssdpScan('M-SEARCH * HTTP/1.1\r\n' + + 'HOST: 239.255.255.250:1900\r\n' + + 'ST: ssdp:all\r\n' + + 'MAN: "ssdp:discover"\r\n' + + 'MX: 3\r\n' + + '\r\n', true, 4000, (err, result) => { + if (result) { + result = result + .filter(dev => dev.manufacturer && + (dev.manufacturer.toLowerCase() === 'marantz' || + dev.manufacturer.toLowerCase() === 'denon')) + .map(dev => { + return { ip: dev.ip, name: dev.name }; + }); + } // endIf + adapter.sendTo(obj.from, obj.command, { error: err, list: result }, obj.callback); + }); + } // endIf + } // endIf + } // endIf + }); + adapter.on('ready', async () => { + if (adapter.config.ip) { + adapter.log.info('[START] Starting DENON AVR adapter'); + host = adapter.config.ip; + pollInterval = adapter.config.pollInterval || 7000; + requestInterval = adapter.config.requestInterval || 100; + const obj = await adapter.getForeignObjectAsync(adapter.namespace); + // create device namespace + if (!obj) { + adapter.setForeignObject(adapter.namespace, { + type: 'device', + common: { + name: 'DENON device' + } + }); + } // endIf + main(); + } + else { + adapter.log.warn('No IP-address set'); + } + }); + // Handle state changes + adapter.on('stateChange', async (id, state) => { + if (!id || !state || state.ack) { + return; + } // Ignore acknowledged state changes or error states + id = id.substring(adapter.namespace.length + 1); // remove instance name and id + state = state.val; // only get state value + let zoneNumber; + if (/^zone\d\..+/g.test(id)) { + zoneNumber = id.slice(4, 5); + id = `zone.${id.substring(6)}`; + } // endIf + adapter.log.debug(`[COMMAND] State Change - ID: ${id}; State: ${state}`); + if (receiverType === 'US') { + return handleUsStateChange(id, state); + } + switch (id) { + case 'zoneMain.powerZone': + if (state === true) { + await sendRequest('ZMON'); + } + else { + await sendRequest('ZMOFF'); + } + break; + case 'zoneMain.volume': { + const vol = helper.inputToVol(state); + await sendRequest(`MV${vol}`); + adapter.log.debug(`[INFO] <== Changed mainVolume to ${vol}`); + break; + } + case 'zoneMain.volumeDB': { + state += 80; // convert to Vol + const vol = helper.inputToVol(state); + await sendRequest(`MV${vol}`); + adapter.log.debug(`[INFO] <== Changed mainVolume to ${vol}`); + break; + } + case 'zoneMain.sleepTimer': + if (!state) { + // state === 0 + await sendRequest('SLPOFF'); + } + else if (state < 10) { + await sendRequest(`SLP00${state}`); + } + else if (state < 100) { + await sendRequest(`SLP0${state}`); + } + else if (state <= 120) { + await sendRequest(`SLP${state}`); + } + break; + case 'zoneMain.volumeUp': + await sendRequest('MVUP'); + break; + case 'zoneMain.volumeDown': + await sendRequest('MVDOWN'); + break; + case 'zoneMain.muteIndicator': + if (state === true) { + await sendRequest('MUON'); + } + else { + await sendRequest('MUOFF'); + } + break; + case 'zoneMain.playPause': + await sendRequest('NS94'); + break; + case 'zoneMain.play': + await sendRequest('NS9A'); + break; + case 'zoneMain.pause': + await sendRequest('NS9B'); + break; + case 'zoneMain.skipMinus': + await sendRequest('NS9E'); + break; + case 'zoneMain.skipPlus': + await sendRequest('NS9D'); + break; + case 'zoneMain.selectInput': { + const obj = await adapter.getObjectAsync('zoneMain.selectInput'); + await sendRequest(`SI${helper.decodeState(obj.common.states, state).toUpperCase()}`); + break; + } + case 'zoneMain.quickSelect': + await sendRequests([`MSQUICK${state}`, `MSSMART${state}`]); + break; + case 'zoneMain.equalizerBassUp': + await sendRequest('PSBAS UP'); + break; + case 'zoneMain.equalizerBassDown': + await sendRequest('PSBAS DOWN'); + break; + case 'zoneMain.equalizerTrebleUp': + await sendRequest('PSTRE UP'); + break; + case 'zoneMain.equalizerTrebleDown': + await sendRequest('PSTRE DOWN'); + break; + case 'zoneMain.equalizerBass': + state = helper.dbToVol(state); + await sendRequest(`PSBAS ${state}`); + break; + case 'zoneMain.equalizerTreble': + state = helper.dbToVol(state); + await sendRequest(`PSTRE ${state}`); + break; + case 'zoneMain.channelVolumeFrontLeft': + await sendRequest(`CVFL ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeFrontRight': + await sendRequest(`CVFR ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeCenter': + await sendRequest(`CVC ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSurroundRight': + await sendRequest(`CVSR ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSurroundLeft': + await sendRequest(`CVSL ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSurroundDolbyLeft': + await sendRequest(`CVSDL ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSurroundDolbyRight': + await sendRequest(`CVSDR ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeFrontDolbyLeft': + await sendRequest(`CVFDL ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeFrontDolbyRight': + await sendRequest(`CVFDR ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeFrontHeightLeft': + await sendRequest(`CVFHL ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeFrontHeightRight': + await sendRequest(`CVFHR ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeRearHeightLeft': + await sendRequest(`CVRHL ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeRearHeightRight': + await sendRequest(`CVRHR ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSurroundHeightRight': + await sendRequest(`CVSHR ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSurroundHeightLeft': + await sendRequest(`CVSHL ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSubwoofer': + await sendRequest(`CVSW ${helper.dbToVol(state)}`); + break; + case 'zoneMain.channelVolumeSubwooferTwo': + await sendRequest(`CVSW2 ${helper.dbToVol(state)}`); + break; + case 'settings.powerSystem': + if (state === true) { + await sendRequest('PWON'); + } + else { + await sendRequest('PWSTANDBY'); + } // endElseIf + break; + case 'settings.dynamicEq': + if (state) { + await sendRequest('PSDYNEQ ON'); + } + else { + await sendRequest('PSDYNEQ OFF'); + } + break; + case 'settings.subwooferLevel': + state = helper.dbToVol(state); + await sendRequest(`PSSWL ${state}`); + break; + case 'settings.subwooferLevelDown': + await sendRequest('PSSWL DOWN'); + break; + case 'settings.subwooferLevelUp': + await sendRequest('PSSWL UP'); + break; + case 'settings.subwooferLevelState': + if (state) { + await sendRequest('PSSWL ON'); + } + else { + await sendRequest('PSSWL OFF'); + } + break; + case 'settings.subwooferTwoLevel': + state = helper.dbToVol(state); + await sendRequest(`PSSWL2 ${state}`); + break; + case 'settings.subwooferTwoLevelDown': + await sendRequest('PSSWL2 DOWN'); + break; + case 'settings.subwooferTwoLevelUp': + await sendRequest('PSSWL2 UP'); + break; + case 'settings.audysseyLfc': + if (state) { + await sendRequest('PSLFC ON'); + } + else { + await sendRequest('PSLFC OFF'); + } + break; + case 'settings.containmentAmountDown': + await sendRequest('PSCNTAMT DOWN'); + break; + case 'settings.containmentAmountUp': + await sendRequest('PSCNTAMT UP'); + break; + case 'settings.containmentAmount': + await sendRequest(`PSCNTAMT 0${state}`); + break; + case 'settings.multEq': { + const obj = await adapter.getObjectAsync('settings.multEq'); + await sendRequest(`PSMULTEQ:${helper.decodeState(obj.common.states, state).toUpperCase()}`); + break; + } + case 'settings.dynamicVolume': { + const obj = await adapter.getObjectAsync('settings.dynamicVolume'); + await sendRequest(`PSDYNVOL ${helper.decodeState(obj.common.states, state).toUpperCase()}`); + break; + } + case 'settings.referenceLevelOffset': + await sendRequest(`PSREFLEV ${state}`); + break; + case 'settings.surroundMode': { + const obj = await adapter.getObjectAsync('settings.surroundMode'); + await sendRequest(`MS${helper.decodeState(obj.common.states, state).toUpperCase()}`); + break; + } + case 'settings.expertReadingPattern': + try { + // check if its a valid RegExp + new RegExp(state); + await adapter.setStateAsync('settings.expertReadingPattern', state, true); + } + catch (e) { + adapter.log.warn(`[COMMAND] Cannot update expert reading pattern: ${e.message}`); + } + break; + case 'settings.expertCommand': { + // Sending custom commands + await sendRequest(state); + const connectionState = adapter.getStateAsync('info.connection'); + // acknowledge when connection is true, thats all we can do here + if (connectionState.val === true) { + adapter.setState('settings.expertCommand', state, true); + } + break; + } + case 'settings.toneControl': + if (state) { + await sendRequest('PSTONE CTRL ON'); + } + else { + await sendRequest('PSTONE CTRL OFF'); + } + break; + case 'settings.cursorUp': + await sendRequest('MNCUP'); + break; + case 'settings.cursorDown': + await sendRequest('MNCDN'); + break; + case 'settings.cursorRight': + await sendRequest('MNCRT'); + break; + case 'settings.cursorLeft': + await sendRequest('MNCLT'); + break; + case 'settings.enter': + await sendRequest('MNENT'); + break; + case 'settings.return': + await sendRequest('MNRTN'); + break; + case 'settings.option': + await sendRequest('MNOPT'); + break; + case 'settings.info': + await sendRequest('MNINF'); + break; + case 'settings.setupMenu': + if (state) { + await sendRequest('MNMEN ON'); + } + else { + await sendRequest('MNMEN OFF'); + } + break; + case 'settings.outputMonitor': { + const obj = await adapter.getObjectAsync('settings.outputMonitor'); + await sendRequest(`VSMONI${helper.decodeState(obj.common.states, state)}`); + break; + } + case 'settings.centerSpread': + if (state) { + await sendRequest('PSCES ON'); + } + else { + await sendRequest('PSCES OFF'); + } + break; + case 'settings.videoProcessingMode': { + const obj = await adapter.getObjectAsync('settings.videoProcessingMode'); + await sendRequest(`VSVPM${helper.decodeState(obj.common.states, state)}`); + break; + } + case 'settings.pictureMode': + await sendRequest(`PV${state}`); + break; + case 'settings.loadPreset': { + let loadPresetState; + if (parseInt(state) < 10) { + loadPresetState = `0${state}`; + } + else { + loadPresetState = state; + } + await sendRequest(`NSB${loadPresetState}`); + break; + } + case 'settings.savePreset': { + let savePresetState; + if (parseInt(state) < 10) { + savePresetState = `0${state}`; + } + else { + savePresetState = state; + } + await sendRequest(`NSC${savePresetState}`); + break; + } + case 'display.brightness': { + const obj = await adapter.getObjectAsync('display.brightness'); + await sendRequest(`DIM ${helper.decodeState(obj.common.states, state).toUpperCase().slice(0, 3)}`); + break; + } + case 'tuner.frequencyUp': + await sendRequest('TFANUP'); + break; + case 'tuner.frequencyDown': + await sendRequest('TFANDOWN'); + break; + case 'tuner.frequency': { + // remove the dot from 106.90 + let strFreq = state.toString().replace('.', ''); + if (strFreq.length < 6 && state < 1000) { + // below 1000 we need leading zero + strFreq = `0${strFreq}`; + if (state < 100) { + // we need another one + strFreq = `0${strFreq}`; + } + } + // if its still the case, because e.g. 106.00 we add missing zeros + while (strFreq.length < 6) { + strFreq = strFreq + '0'; + } + await sendRequest(`TFAN${strFreq}`); + break; + } + case 'zone.powerZone': + if (state === true) { + await sendRequest(`Z${zoneNumber}ON`); + } + else { + await sendRequest(`Z${zoneNumber}OFF`); + } // endElseIf + break; + case 'zone.muteIndicator': + if (state === true) { + await sendRequest(`Z${zoneNumber}MUON`); + } + else { + await sendRequest(`Z${zoneNumber}MUOFF`); + } // endElseIf + break; + case 'zone.sleepTimer': + if (!state) { + // state === 0 + await sendRequest(`Z${zoneNumber}SLPOFF`); + } + else if (state < 10) { + await sendRequest(`Z${zoneNumber}SLP00${state}`); + } + else if (state < 100) { + await sendRequest(`Z${zoneNumber}SLP0${state}`); + } + else if (state <= 120) { + await sendRequest(`Z${zoneNumber}SLP${state}`); + } // endElseIf + break; + case 'zone.volumeUp': + await sendRequest(`Z${zoneNumber}UP`); + break; + case 'zone.volumeDown': + await sendRequest(`Z${zoneNumber}DOWN`); + break; + case 'zone.volume': + await sendRequest(`Z${zoneNumber}${helper.inputToVol(state)}`); + break; + case 'zone.volumeDB': + state += 80; // Convert to Vol + await sendRequest(`Z${zoneNumber}${helper.inputToVol(state)}`); + break; + case 'zone.selectInput': { + const obj = await adapter.getObjectAsync(`zone${zoneNumber}.selectInput`); + await sendRequest(`Z${zoneNumber}${helper.decodeState(obj.common.states, state).toUpperCase()}`); + break; + } + case 'zone.quickSelect': + await sendRequests([`Z${zoneNumber}QUICK${state}`, `Z${zoneNumber}SMART${state}`]); + break; + case 'zone.equalizerBassUp': + await sendRequest(`Z${zoneNumber}PSBAS UP`); + break; + case 'zone.equalizerBassDown': + await sendRequest(`Z${zoneNumber}PSBAS DOWN`); + break; + case 'zone.equalizerTrebleUp': + await sendRequest(`Z${zoneNumber}PSTRE UP`); + break; + case 'zone.equalizerTrebleDown': + await sendRequest(`Z${zoneNumber}PSTRE DOWN`); + break; + case 'zone.equalizerBass': + state = helper.dbToVol(state); + await sendRequest(`Z${zoneNumber}PSBAS ${state}`); + break; + case 'zone.equalizerTreble': + state = helper.dbToVol(state); + await sendRequest(`Z${zoneNumber}PSTRE ${state}`); + break; + case 'zone.channelVolumeFrontLeft': + await sendRequest(`Z${zoneNumber}CVFL ${helper.dbToVol(state)}`); + break; + case 'zone.channelVolumeFrontRight': + await sendRequest(`Z${zoneNumber}CVFR ${helper.dbToVol(state)}`); + break; + case 'settings.lfeAmount': + await sendRequest(`PSLFE ${state < 10 ? `0${state}` : 10}`); + break; + case 'settings.dialogControl': + await sendRequest(`PSDIC 0${state}`); // can only be 0 - 6 + break; + case 'settings.dialogLevel': + await sendRequest(`PSDIL ${helper.dbToVol(state)}`); + break; + case 'settings.dialogLevelAdjust': + await sendRequest(`PSDIL ${state ? 'ON' : 'OFF'}`); + break; + case 'settings.speakerPreset': + await sendRequest(`SPPR ${state}`); + break; + default: + adapter.log.error(`[COMMAND] ${id} is not a valid state`); + } // endSwitch + }); // endOnStateChange + return adapter; +} // endStartAdapter +function main() { + adapter.subscribeStates('*'); + connect(); +} // endMain +client.on('timeout', () => { + pollingVar = null; + adapter.log.warn('AVR timed out due to no response'); + adapter.setState('info.connection', false, true); + client.destroy(); + client.unref(); + if (!connectingVar) { + connectingVar = setTimeout(() => connect(), 30000); // Connect again in 30 seconds + } // endIf +}); +// Connection handling +client.on('error', error => { + verboseConnection = error.code !== previousError; + if (connectingVar) { + return; + } + previousError = error.code; + if (verboseConnection) { + if (error.code === 'ECONNREFUSED') { + adapter.log.warn('Connection refused, make sure that there is no other Telnet connection'); + } + else if (error.code === 'EHOSTUNREACH') { + adapter.log.warn('AVR unreachable, check the Network Config of your AVR'); + } + else if (error.code === 'EALREADY' || error.code === 'EISCONN') { + return adapter.log.warn('Adapter is already connecting/connected'); + } + else if (error.code === 'ETIMEDOUT') { + adapter.log.warn('Connection timed out'); + } + else { + adapter.log.warn(`Connection closed: ${error}`); + } + } + else { + if (error.code === 'ECONNREFUSED') { + adapter.log.debug('Connection refused, make sure that there is no other Telnet connection'); + } + else if (error.code === 'EHOSTUNREACH') { + adapter.log.debug('AVR unreachable, check the Network Config of your AVR'); + } + else if (error.code === 'EALREADY' || error.code === 'EISCONN') { + return adapter.log.debug('Adapter is already connecting/connected'); + } + else if (error.code === 'ETIMEDOUT') { + adapter.log.debug('Connection timed out'); + } + else { + adapter.log.warn(`Connection closed: ${error}`); + } + } + pollingVar = null; + adapter.setState('info.connection', false, true); + if (!connectingVar) { + client.destroy(); + client.unref(); + connectingVar = setTimeout(() => connect(), 30000); // Connect again in 30 seconds + } // endIf +}); +client.on('end', () => { + // Denon has closed the connection + adapter.log.warn('Denon AVR has cancelled the connection'); + pollingVar = false; + adapter.setState('info.connection', false, true); + if (!connectingVar) { + client.destroy(); + client.unref(); + connectingVar = setTimeout(() => connect(), 30000); // Connect again in 30 seconds + } // endIf +}); +client.on('connect', async () => { + // Successfully connected + clearTimeout(connectingVar); + connectingVar = null; + previousError = null; + verboseConnection = true; + adapter.setState('info.connection', true, true); + adapter.log.info(`[CONNECT] Adapter connected to DENON-AVR: ${host}:23`); + if (!receiverType) { + adapter.log.debug('[CONNECT] Connected --> Check receiver type'); + await sendRequests(['SV?', 'SV01?', 'BDSTATUS?', 'MV?']); + } + else { + adapter.log.debug('[CONNECT] Connected --> updating states on start'); + updateStates(); // Update states when connected + } // endElse +}); +client.on('data', data => { + // split data by + const dataArr = data.toString().split(/[\r\n]+/); // Split by Carriage Return + for (const data of dataArr) { + if (data) { + // data not empty + adapter.log.debug(`[DATA] <== Incoming data: ${data}`); + handleResponse(data); + } // endIf + } // endFor +}); +/** + * Internals + */ +function connect() { + client.setEncoding('utf8'); + if (verboseConnection) { + adapter.log.info(`[CONNECT] Trying to connect to ${host}:23`); + } + else { + adapter.log.debug(`[CONNECT] Trying to connect to ${host}:23`); + } + connectingVar = null; + client.connect({ port: 23, host: host }); + // give the connection a timeout after being idle for 35 seconds (needed after connect call) + client.setTimeout(35000); +} // endConnect +const updateCommands = [ + 'NSET1 ?', + 'NSFRN ?', + 'ZM?', + 'MU?', + 'PW?', + 'SI?', + 'SV?', + 'MS?', + 'MV?', + 'Z2?', + 'Z2MU?', + 'Z3?', + 'Z3MU?', + 'NSE', + 'VSSC ?', + 'VSASP ?', + 'VSMONI ?', + 'TR?', + 'DIM ?', + 'Z3SLP?', + 'Z2SLP?', + 'SLP?', + 'PSDYNEQ ?', + 'PSMULTEQ: ?', + 'PSREFLEV ?', + 'PSDYNVOL ?', + 'PSLFC ?', + 'PSCNTAMT ?', + 'PSSWL ?', + 'PSBAS ?', + 'PSTRE ?', + 'Z2PSTRE ?', + 'Z3PSTRE ?', + 'Z2PSBAS ?', + 'Z3PSBAS ?', + 'PSTONE CTRL ?', + 'MNMEN?', + 'PSCES ?', + 'VSVPM ?', + 'PV?', + 'CV?', + 'MSQUICK ?', + 'Z2QUICK ?', + 'Z3QUICK ?', + 'MSSMART ?', + 'Z2SMART ?', + 'Z3SMART ?', + 'NSH', + 'Z2CV?', + 'Z3CV?', + 'PSLFE ?', + 'PW00?', + 'SD00?', + 'SV01?', + 'SV02?', + 'SV03?', + 'SV04?', + 'SV05?', + 'SV06?', + 'SV07?', + 'SV08?', + 'SV09?', + 'SV10?', + 'SV11?', + 'SV12?', + 'SO02?', + 'SO04?', + 'SO06?', + 'SO08?', + 'SO10?', + 'SO12?', + 'SF01?', + 'SF02?', + 'SF03?', + 'SF04?', + 'SF05?', + 'SF06?', + 'SF07?', + 'SF08?', + 'SF09?', + 'SF10?', + 'SF11?', + 'SF12?', + 'SI01?', + 'SI02?', + 'SI03?', + 'SI04?', + 'SI05?', + 'SI06?', + 'SI07?', + 'SI08?', + 'SI09?', + 'SI10?', + 'SI11?', + 'SI12?', + 'ST00?', + 'ST02?', + 'ST04?', + 'ST06?', + 'ST08?', + 'ST10?', + 'ST12?', + 'TI00?', + 'TI02?', + 'TI04?', + 'TI06?', + 'TI08?', + 'TI10?', + 'TI12?', + 'AI02?', + 'AI04?', + 'AI06?', + 'AI08?', + 'AI10?', + 'AI12?', + 'PR00TR?', + 'PR00IN?', + 'PR00TM?', + 'PR02PR?', + 'PR04PR?', + 'PR06PR?', + 'PR08PR?', + 'PR10PR?', + 'PR12PR?', + 'PR02OH?', + 'PR04OH?', + 'PR06OH?', + 'PR08OH?', + 'PR10OH?', + 'PR12OH?', + 'BDSTATUS?', + 'PSDIL ?', + 'PSDIC ?', + 'TFAN?', + 'TFANNAME?', + 'SPPR ?' +]; +/** + * Update all states by sending the defined updateCommands + */ +async function updateStates() { + await sendRequests(updateCommands); +} // endUpdateStates +const pollCommands = [ + 'NSE', + 'SLP?', + 'Z2SLP?', + 'Z3SLP?', + 'MSQUICK ?', + 'MSSMART ?', + 'PR00TR?', + 'Z2QUICK ?', + 'Z3QUICK ?', + 'Z2SMART ?', + 'Z3SMART ?', + 'BDSTATUS?' +]; // Request Display State, Sleep Timer & Quick Select +async function pollStates() { + // Polls states + pollingVar = null; + await sendRequests(pollCommands); +} // endPollStates +/** + * Send data array to socket respecting request interval + * + * @param {string[]} requests array of requests + * @return {Promise} + */ +async function sendRequests(requests) { + for (const req of requests) { + await sendRequest(req); + await helper.wait(requestInterval); + } +} +/** + * Send data to socket + * + * @param {string} req + * @return {Promise} + */ +function sendRequest(req) { + return new Promise(resolve => { + client.write(`${req}\r`, () => { + adapter.log.debug(`[INFO] ==> Message sent: ${req}`); + resolve(); + }); + }); +} // endSendRequest +function handleUsResponse(data) { + adapter.log.debug(`[INFO] US command to handle is ${data}`); + if (data.startsWith('SD00')) { + // Handle display brightness + adapter.getObjectAsync('display.brightness').then(obj => { + const bright = data.substring(4); + for (const j of Object.keys(obj.common.states)) { + // Check if command contains one of the possible brightness states + if (helper.decodeState(obj.common.states, j).toLowerCase().includes(bright.toLowerCase())) { + adapter.setState('display.brightness', obj.common.states[j], true); + } // endIf + } // endFor + }); + return; + } + else if (!data.startsWith('ST00') && /ST\d\d.+/g.test(data)) { + const zoneNumber = parseInt(data.slice(2, 4)); + const command = data.substring(4); + if (command === 'CONT') { + adapter.setState(`zone${zoneNumber}.zoneTurnOnModeChange`, 'Constant', true); + } + else if (command === 'TRIG') { + adapter.setState(`zone${zoneNumber}.zoneTurnOnModeChange`, 'Trigger in', true); + } + else if (command === 'ASIG') { + adapter.setState(`zone${zoneNumber}.zoneTurnOnModeChange`, 'Audio signal', true); + } + else if (command === 'OFF') { + adapter.setState(`zone${zoneNumber}.zoneTurnOnModeChange`, 'Off', true); + } + return; + } + else if (/SV[0-9]+/g.test(data)) { + const zoneNumber = parseInt(data.slice(2, 4)) % 2 ? parseInt(data.slice(2, 4)) + 1 : parseInt(data.slice(2, 4)); + const volume = parseFloat(`${data.slice(4, 6)}.${data.slice(6, 7)}`); + adapter.getStateAsync(`zone${zoneNumber}.operationMode`).then(state => { + if (state.val.toString() === '0' || state.val === 'NORMAL') { + const speaker = parseInt(data.slice(2, 4)) === zoneNumber ? 'speakerTwo' : 'speakerOne'; + adapter.setState(`zone${zoneNumber}.${speaker}Volume`, volume, true); + } + else { + adapter.setState(`zone${zoneNumber}.speakerOneVolume`, volume, true); + adapter.setState(`zone${zoneNumber}.speakerTwoVolume`, volume, true); + } // endElse + }); + return; + } + else if (/SO\d\d.+/g.test(data)) { + const zoneNumber = parseInt(data.slice(2, 4)); + const command = data.substring(4); + if (command === 'NOR') { + adapter.setState(`zone${zoneNumber}.operationMode`, 'NORMAL', true); + } + else if (command === 'BRI') { + adapter.setState(`zone${zoneNumber}.operationMode`, 'BRIDGED', true); + } + return; + } + else if (/SF\d\d.+/g.test(data)) { + const zoneNumber = parseInt(data.slice(2, 4)) % 2 ? parseInt(data.slice(2, 4)) + 1 : parseInt(data.slice(2, 4)); + const command = data.substring(4); + adapter.getStateAsync(`zone${zoneNumber}.operationMode`).then(state => { + if (state.val.toString() === '0' || state.val === 'NORMAL') { + const speaker = parseInt(data.slice(2, 4)) === zoneNumber ? 'SpeakerTwo' : 'SpeakerOne'; + if (command === 'OFF') { + adapter.setState(`zone${zoneNumber}.lowCutFilter${speaker}`, false, true); + } + else if (command === 'ON') { + adapter.setState(`zone${zoneNumber}.lowCutFilter${speaker}`, true, true); + } + } + else { + if (command === 'ON') { + adapter.setState(`zone${zoneNumber}.lowCutFilterSpeakerOne`, true, true); + adapter.setState(`zone${zoneNumber}.lowCutFilterSpeakerTwo`, true, true); + } + else if (command === 'OFF') { + adapter.setState(`zone${zoneNumber}.lowCutFilterSpeakerOne`, false, true); + adapter.setState(`zone${zoneNumber}.lowCutFilterSpeakerTwo`, false, true); + } // endElseIf + } // endElse + }); + return; + } + else if (/SI\d\d.+/g.test(data)) { + const zoneNumber = parseInt(data.slice(2, 4)) % 2 ? parseInt(data.slice(2, 4)) + 1 : parseInt(data.slice(2, 4)); + const command = data.substring(4); + adapter.getStateAsync(`zone${zoneNumber}.operationMode`).then(state => { + if (state.val === '0' || state.val === 'NORMAL') { + const speaker = parseInt(data.slice(2, 4)) === zoneNumber ? 'Two' : 'One'; + adapter.getObjectAsync(`zone${zoneNumber}.selectInputOne`).then(obj => { + for (const j of Object.keys(obj.common.states)) { + // Check if command contains one of the possible brightness states + if (helper + .decodeState(obj.common.states, j) + .replace(' ', '') + .toLowerCase() + .includes(command.toLowerCase())) { + adapter.setState(`zone${zoneNumber}.selectInput${speaker}`, obj.common.states[j], true); + } // endIf + } // endFor + }); + } + else { + adapter.getObjectAsync(`zone${zoneNumber}.selectInputOne`).then(obj => { + for (const j of Object.keys(obj.common.states)) { + // Check if command contains one of the possible brightness states + if (helper + .decodeState(obj.common.states, j) + .replace(' ', '') + .toLowerCase() + .includes(command.toLowerCase())) { + adapter.setState(`zone${zoneNumber}.selectInputOne`, obj.common.states[j], true); + adapter.setState(`zone${zoneNumber}.selectInputTwo`, obj.common.states[j], true); + } // endIf + } // endFor + }); + } // endElse + }); + return; + } + else if (/TI\d\d.+/g.test(data)) { + const zoneNumber = parseInt(data.slice(2, 4)); + const command = data.substring(4); + if (command === 'YES') { + adapter.setState(`zone${zoneNumber}.triggerInput`, true, true); + } + else if (command === 'NO') { + adapter.setState(`zone${zoneNumber}.triggerInput`, false, true); + } + return; + } + else if (/AI\d\d.+/g.test(data)) { + const zoneNumber = parseInt(data.slice(2, 4)); + const command = data.substring(4); + if (command === 'YES') { + adapter.setState(`zone${zoneNumber}.audioSignalInput`, true, true); + } + else if (command === 'NO') { + adapter.setState(`zone${zoneNumber}.audioSignalInput`, false, true); + } + return; + } // endElseIf + switch (data) { + case 'PW00ON': + adapter.setState('settings.powerSystem', true, true); + break; + case 'PW00STANDBY': + adapter.setState('settings.powerSystem', false, true); + break; + case 'TI00YES': + adapter.setState('settings.masterTriggerInput', true, true); + break; + case 'TI00NO': + adapter.setState('settings.masterTriggerInput', false, true); + break; + case 'ST00PBTN': + adapter.setState('powerConfigurationChange', 'Power Button', true); + break; + case 'ST00TRIG': + adapter.setState('powerConfigurationChange', 'Master Trigger', true); + break; + case 'ST00ONLI': + adapter.setState('powerConfigurationChange', 'On Line', true); + break; + default: + adapter.log.debug(`[INFO] <== Unhandled US command ${data}`); + } // endSwitch +} // endHandleUsResponse +async function handleUsStateChange(id, stateVal) { + let zoneNumber; + if (id.startsWith('zone')) { + zoneNumber = id.split('.').shift().substring(4); + zoneNumber = parseInt(zoneNumber) < 10 ? `0${zoneNumber}` : zoneNumber; + id = id.split('.').pop(); + } // endIf + switch (id) { + case 'settings.powerSystem': + if (stateVal === true) { + await sendRequest('PW00ON'); + } + else { + await sendRequest('PW00STANDBY'); + } // endElseIf + break; + case 'settings.expertReadingPattern': + try { + new RegExp(stateVal); + await adapter.setStateAsync('settings.expertReadingPattern', stateVal, true); + } + catch (e) { + adapter.log.warn(`[COMMAND] Cannot update expert reading pattern: ${e.message}`); + } + break; + case 'display.brightness': + adapter.getObjectAsync('display.brightness').then(async (obj) => { + await sendRequest(`SD00${helper.decodeState(obj.common.states, stateVal).toUpperCase().slice(0, 3)}`); + }); + break; + case 'settings.expertCommand': // Sending custom commands + await sendRequest(stateVal); + adapter.getStateAsync('info.connection').then(state => { + if (state.val === true) { + adapter.setState('settings.expertCommand', stateVal, true); + } + }); + break; + case 'settings.powerConfigurationChange': + if (stateVal.toUpperCase() === 'POWER BUTTON' || stateVal === '0') { + await sendRequest('ST00PBTN'); + } + else if (stateVal.toUpperCase() === 'MASTER TRIGGER' || stateVal === '1') { + await sendRequest('ST00TRIG'); + } + else if (stateVal.toUpperCase() === 'ON LINE' || stateVal === '2') { + await sendRequest('ST00ONLI'); + } + break; + case 'settings.masterTriggerInput': + if (stateVal) { + await sendRequest('TI00YES'); + } + else { + await sendRequest('TI00NO'); + } + break; + case 'audioSignalInput': + if (stateVal) { + await sendRequest(`AI${zoneNumber}YES`); + } + else { + await sendRequest(`AI${zoneNumber}NO`); + } + break; + case 'lowCutFilterSpeakerOne': + adapter.getStateAsync(`zone${parseInt(zoneNumber)}.operationMode`).then(async (state) => { + if (state.val.toString() === '0' || state.val === 'NORMAL') { + zoneNumber = parseInt(zoneNumber) % 2 ? parseInt(zoneNumber) : parseInt(zoneNumber) - 1; + zoneNumber = parseInt(zoneNumber) < 10 ? `0${zoneNumber}` : zoneNumber; + } // endIf + if (stateVal) { + await sendRequest(`SF${zoneNumber}ON`); + } + else { + await sendRequest(`SF${zoneNumber}OFF`); + } + }); + break; + case 'lowCutFilterSpeakerTwo': + if (stateVal) { + await sendRequest(`SF${zoneNumber}ON`); + } + else { + await sendRequest(`SF${zoneNumber}OFF`); + } + break; + case 'operationMode': + if (stateVal === 0 || stateVal === 'NORMAL') { + await sendRequest(`SO${zoneNumber}NOR`); + } + else { + await sendRequest(`SO${zoneNumber}BRI`); + } + break; + case 'selectInputOne': + adapter.getStateAsync(`zone${parseInt(zoneNumber)}.operationMode`).then(async (state) => { + if (state.val.toString() === '0' || state.val === 'NORMAL') { + zoneNumber = parseInt(zoneNumber) % 2 ? parseInt(zoneNumber) : parseInt(zoneNumber) - 1; + zoneNumber = parseInt(zoneNumber) < 10 ? `0${zoneNumber}` : zoneNumber; + } // endIf + await sendRequest(`SI${zoneNumber}${stateVal.replace(' ', '')}`); + }); + break; + case 'selectInputTwo': + await sendRequest(`SI${zoneNumber}${stateVal.replace(' ', '')}`); + break; + case 'speakerOneVolume': { + const state = await adapter.getStateAsync(`zone${parseInt(zoneNumber)}.operationMode`); + if (state.val.toString() === '0' || state.val === 'NORMAL') { + zoneNumber = parseInt(zoneNumber) % 2 ? parseInt(zoneNumber) : parseInt(zoneNumber) - 1; + zoneNumber = parseInt(zoneNumber) < 10 ? `0${zoneNumber}` : zoneNumber; + } + const vol = helper.inputToVol(stateVal); + await sendRequest(`SV${zoneNumber}${vol}`); + adapter.log.debug(`[INFO] <== Changed speakerOneVolume to ${vol}`); + break; + } + case 'speakerTwoVolume': { + const vol = helper.inputToVol(stateVal); + await sendRequest(`SV${zoneNumber}${vol}`); + adapter.log.debug(`[INFO] <== Changed speakerTwoVolume to ${vol}`); + break; + } + case 'triggerInput': + if (stateVal) { + await sendRequest(`TI${zoneNumber}YES`); + } + else { + await sendRequest(`TI${zoneNumber}NO`); + } + break; + case 'zoneTurnOnModeChange': + if (stateVal.toString() === '0' || stateVal.toUpperCase() === 'CONSTANT') { + await sendRequest(`ST${zoneNumber}CONT`); + } + else if (stateVal.toString() === '1' || stateVal.toUpperCase() === 'TRIGGER IN') { + await sendRequest(`ST${zoneNumber}TRIG`); + } + else if (stateVal.toString() === '2' || stateVal.toUpperCase() === 'AUDIO SIGNAL') { + await sendRequest(`ST${zoneNumber}ASIG`); + } + else if (stateVal.toString() === '3' || stateVal.toUpperCase() === 'OFF') { + await sendRequest(`ST${zoneNumber}OFF`); + } + break; + default: + adapter.log.error(`[COMMAND] ${id} is not a valid US state`); + } // endSwitch +} // endHandleUsStateChange +/** + * Handle single response from AVR + * + * @param {string} data + * @return {Promise} + */ +async function handleResponse(data) { + if (!pollingVar) { + // Keep connection alive & poll states + pollingVar = setTimeout(() => pollStates(), pollInterval); // Poll states every configured seconds + } // endIf + // independent from receiver we handle the expert pattern + const expertPattern = await adapter.getStateAsync('settings.expertReadingPattern'); + // if ack is false, it was not a valid regex + if (expertPattern && expertPattern.val && expertPattern.ack === true) { + const expertRegex = new RegExp(expertPattern.val); + if (expertRegex.test(data)) { + adapter.setState('settings.expertReadingResult', data, true); + } // endIf + } // endIf + // Detect receiver type --> first poll is SV? and SV00? + if (!receiverType) { + if (data.startsWith('SV') || /^MV\d+/g.test(data)) { + if (/^SV[\d]+/g.test(data)) { + receiverType = 'US'; + await createStandardStates('US'); + adapter.log.debug('[UPDATE] Updating states'); + return void updateStates(); // Update states when connected + } + else { + receiverType = 'DE'; + await createStandardStates('DE'); + adapter.log.debug('[UPDATE] Updating states'); + return void updateStates(); + } // endElse + } + else if (data.startsWith('BDSTATUS')) { + // DENON Ceol Piccolo protocol detected , but we handle it as DE + receiverType = 'DE'; + await createStandardStates('DE'); + adapter.log.debug('[UPDATE] Updating states'); + return void updateStates(); + } + else { + return; + } // return if remote command received before response to SV (receiverCheck) + } + else if (receiverType === 'US') { + return void handleUsResponse(data); + } + // get command out of String + let command; + if (/^Z\d.*/g.test(data)) { + // Transformation for Zone2+ commands + const zoneNumber = parseInt(data.slice(1, 2)); + if (!zonesCreated[zoneNumber]) { + await createZone(zoneNumber); + } // Create Zone2+ states if not done yet + command = data.replace(/\s+|\d+/g, ''); + if (command === 'Z') { + // If everything is removed except Z --> Volume + let vol = data.substring(2).replace(/\s|[A-Z]/g, ''); + vol = `${vol.slice(0, 2)}.${vol.slice(2, 4)}`; // Slice volume from string + adapter.setState(`zone${zoneNumber}.volume`, parseFloat(vol), true); + adapter.setState(`zone${zoneNumber}.volumeDB`, parseFloat(vol) - 80, true); + return; + } + else { + command = `Z${zoneNumber}${command.slice(1, command.length)}`; + } // endElse + if (/^Z\dQUICK.*/g.test(data) || /^Z\dSMART.*/g.test(data)) { + const quickNr = parseInt(data.slice(-1)); + adapter + .getStateAsync(`zone${zoneNumber}.quickSelect`) + .then(state => { + if (state.val === quickNr && state.ack) { + return; + } + adapter.setState(`zone${zoneNumber}.quickSelect`, quickNr, true); + }) + .catch(() => { + adapter.setState(`zone${zoneNumber}.quickSelect`, quickNr, true); + }); + return; + } + else if (/^Z\d.*/g.test(command)) { + // Encode Input Source + const obj = await adapter.getObjectAsync('zoneMain.selectInput'); + let zoneSi = data.substring(2); + zoneSi = zoneSi.replace(' ', ''); // Remove blank + for (const j of Object.keys(obj.common.states)) { + // Check if command contains one of the possible Select Inputs + if (helper.decodeState(obj.common.states, j.toString()) === zoneSi) { + ensureAttrInStates(`zone${zoneNumber}.selectInput`, zoneSi); + adapter.setState(`zone${zoneNumber}.selectInput`, zoneSi, true); + return; + } // endIf + } // endFor + } // endIf + } + else { + // Transformation for normal commands + command = data.replace(/\s+|\d+/g, ''); + } // endElse + if (command.startsWith('DIM')) { + // Handle display brightness + const obj = await adapter.getObjectAsync('display.brightness'); + const bright = data.substring(4); + for (const j of Object.keys(obj.common.states)) { + // Check if command contains one of the possible brightness states + if (helper.decodeState(obj.common.states, j).toLowerCase().includes(bright.toLowerCase())) { + adapter.setState('display.brightness', obj.common.states[j], true); + } // endIf + } // endFor + return; + } + else if (command.startsWith('SI')) { + // Handle select input + let siCommand = data.substring(2); // Get only source name + siCommand = siCommand.replace(' ', ''); // Remove blanks + ensureAttrInStates('zoneMain.selectInput', siCommand); + adapter.setState('zoneMain.selectInput', siCommand, true); + return; + } + else if (command.startsWith('MS') && command !== 'MSQUICK' && command !== 'MSSMART') { + // Handle Surround mode + const msCommand = data.substring(2); // use data because ms can have digits and spaces + adapter.setState('settings.surroundMode', msCommand, true); + return; + } + else if (command === 'MSQUICK' || command === 'MSSMART') { + const quickNr = parseInt(data.slice(-1)); + adapter + .getStateAsync('zoneMain.quickSelect') + .then(state => { + if (state.val === quickNr && state.ack) { + return; + } + adapter.setState('zoneMain.quickSelect', quickNr, true); + }) + .catch(() => { + adapter.setState('zoneMain.quickSelect', quickNr, true); + }); + return; + } + else if (command.startsWith('NSE') && !command.startsWith('NSET')) { + // Handle display content + if (command === 'NSE') { + // on older models it sometimes sends just NSE for unknown reasons - ignore it + return; + } + const displayCont = data.substring(4).replace(/[\0\1\2]/g, ''); // Remove all STX, SOH, NULL + const dispContNr = data.slice(3, 4); + if (!capabilities.display) { + await createDisplayAndHttp(); + } + adapter.setState(`display.displayContent${dispContNr}`, displayCont, true); + return; + } + else if (command.startsWith('NSET')) { + // Network settings info + return; + } + else if (command.startsWith('SV')) { + // Select Video + return; + } + else if (command.startsWith('NSFRN')) { + // Handle friendly name + adapter.setState('info.friendlyName', data.substring(6), true); + return; + } + else if (command.startsWith('PSMULTEQ')) { + const state = data.split(':')[1]; + adapter.setState('settings.multEq', state, true); + return; + } + else if (command.startsWith('PSDYNVOL')) { + const state = data.split(' ')[1]; + adapter.setState('settings.dynamicVolume', state, true); + return; + } + else if (command.startsWith('VSMONI')) { + const state = data.substring(6); + if (!capabilities.multiMonitor) { + // make sure that state exists + await createMonitorState(); + } + if (state === 'AUTO') { + adapter.setState('settings.outputMonitor', 0, true); + } + else { + adapter.setState('settings.outputMonitor', parseInt(state), true); + } + return; + } + else if (command.startsWith('VSVPM')) { + const processingMode = data.substring(4); + if (!capabilities.multiMonitor) { + // make sure that state exists + await createMonitorState(); + } + adapter.setState('settings.videoProcessingMode', processingMode, true); + return; + } + else if (command.startsWith('PV') && command.length > 2) { + const pictureMode = data.substring(1); + if (!capabilities.pictureMode) { + await createPictureMode(); + } + const obj = await adapter.getObjectAsync('settings.pictureMode'); + adapter.setState('settings.pictureMode', obj.common.states[pictureMode], true); + return; + } + else if (command.startsWith('NSH')) { + const presetNumber = parseInt(data.slice(3, 5)); + const state = await adapter.getStateAsync('info.onlinePresets'); + let knownPresets; + if (!state || !state.val) { + knownPresets = []; + } + else { + knownPresets = JSON.parse(state.val); + } + knownPresets[presetNumber] = { + id: presetNumber, + channel: data.substring(5).replace(/\s\s+/g, '') + }; + const sortedPresets = []; + Object.keys(knownPresets) + .sort() + .forEach(key => (sortedPresets[key] = knownPresets[key])); + adapter.setState('info.onlinePresets', JSON.stringify(sortedPresets), true); + return; + } + else if (command.startsWith('TFANNAME')) { + // get name only + const stationName = data.substring(8); + adapter.setState('tuner.stationName', stationName, true); + return; + } + else if (command === 'TFAN') { + // example TFAN010690 -> 106.9 always 6 digits with 2 decimals + const freq = parseFloat(`${data.substring(4, 8)}.${data.substring(8)}`); + adapter.setState('tuner.frequency', freq, true); + return; + } + let zoneNumber; + if (/Z\d.+/g.test(command)) { + // remove zone number from command and save it + zoneNumber = command.slice(1, 2); + command = `Z${command.substring(2)}`; + } + adapter.log.debug(`[INFO] <== Command to handle is ${command}`); + switch (command) { + case 'PWON': + adapter.setState('settings.powerSystem', true, true); + break; + case 'PWSTANDBY': + adapter.setState('settings.powerSystem', false, true); + break; + case 'MV': + data = `${data.slice(2, 4)}.${data.slice(4, 5)}`; // Slice volume from string + adapter.setState('zoneMain.volume', parseFloat(data), true); + adapter.setState('zoneMain.volumeDB', parseFloat(data) - 80, true); + break; + case 'MVMAX': + data = `${data.slice(6, 8)}.${data.slice(8, 9)}`; + adapter.setState('zoneMain.maximumVolume', parseFloat(data), true); + adapter.setState('zoneMain.maximumVolumeDB', parseFloat(data) - 80, true); + break; + case 'MUON': + adapter.setState('zoneMain.muteIndicator', true, true); + break; + case 'MUOFF': + adapter.setState('zoneMain.muteIndicator', false, true); + break; + case 'ZON': + adapter.setState(`zone${zoneNumber}.powerZone`, true, true); + break; + case 'ZOFF': + adapter.setState(`zone${zoneNumber}.powerZone`, false, true); + break; + case 'ZMUON': + adapter.setState(`zone${zoneNumber}.muteIndicator`, true, true); + break; + case 'ZMUOFF': + adapter.setState(`zone${zoneNumber}.muteIndicator`, false, true); + break; + case 'ZMON': + adapter.setState('zoneMain.powerZone', true, true); + break; + case 'ZMOFF': + adapter.setState('zoneMain.powerZone', false, true); + break; + case 'SLP': + data = data.slice(3, data.length); + adapter + .getStateAsync('zoneMain.sleepTimer') + .then(state => { + if (state.val !== parseInt(data) || !state.ack) { + adapter.setState('zoneMain.sleepTimer', parseFloat(data), true); + } + }) + .catch(() => adapter.setState('zoneMain.sleepTimer', parseFloat(data), true)); + break; + case 'SLPOFF': + adapter + .getStateAsync('zoneMain.sleepTimer') + .then(state => { + if (state.val !== 0 || !state.ack) { + adapter.setState('zoneMain.sleepTimer', 0, true); + } + }) + .catch(() => adapter.setState('zoneMain.sleepTimer', 0, true)); + break; + case 'ZSLP': + data = data.slice(5, data.length); + adapter + .getStateAsync(`zone${zoneNumber}.sleepTimer`) + .then(state => { + if (state.val !== parseInt(data) || !state.ack) { + adapter.setState(`zone${zoneNumber}.sleepTimer`, parseFloat(data), true); + } + }) + .catch(() => adapter.setState(`zone${zoneNumber}.sleepTimer`, parseFloat(data), true)); + break; + case 'ZSLPOFF': + adapter + .getStateAsync(`zone${zoneNumber}.sleepTimer`) + .then(state => { + if (state.val !== 0 || !state.ack) { + adapter.setState(`zone${zoneNumber}.sleepTimer`, 0, true); + } + }) + .catch(() => adapter.setState(`zone${zoneNumber}.sleepTimer`, 0, true)); + break; + case 'PSDYNEQON': + adapter.setState('settings.dynamicEq', true, true); + break; + case 'PSDYNEQOFF': + adapter.setState('settings.dynamicEq', false, true); + break; + case 'PSSWLON': + adapter.setState('settings.subwooferLevelState', true, true); + break; + case 'PSSWLOFF': + adapter.setState('settings.subwooferLevelState', false, true); + break; + case 'PSSWL': { + // Handle Subwoofer Level for first and second SW + command = data.split(' ')[0]; + let state = data.split(' ')[1]; + state = helper.volToDb(state); + if (command === 'PSSWL') { + // Check if PSSWL or PSSWL2 + adapter.setState('settings.subwooferLevel', parseFloat(state), true); + } + else { + if (!capabilities.subTwo) { + // make sure sub two state exists + await createSubTwo(); + } + adapter.setState('settings.subwooferTwoLevel', parseFloat(state), true); + } // endElse + break; + } + case 'PSLFCON': + if (!capabilities.audysseyLfc) { + await createLfcAudyssey(); + } + adapter.setState('settings.audysseyLfc', true, true); + break; + case 'PSLFCOFF': + if (!capabilities.audysseyLfc) { + await createLfcAudyssey(); + } + adapter.setState('settings.audysseyLfc', false, true); + break; + case 'PSCNTAMT': { + const state = data.split(' ')[1]; + if (!capabilities.audysseyLfc) { + await createLfcAudyssey(); + } + adapter.setState('settings.containmentAmount', parseFloat(state), true); + break; + } + case 'PSREFLEV': { + const state = data.split(' ')[1]; + adapter.setState('settings.referenceLevelOffset', state, true); + break; + } + case 'PSBAS': { + let state = data.split(' ')[1]; + state = helper.volToDb(state); + adapter.setState('zoneMain.equalizerBass', state, true); + break; + } + case 'PSTRE': { + let state = data.split(' ')[1]; + state = helper.volToDb(state); + adapter.setState('zoneMain.equalizerTreble', state, true); + break; + } + case 'ZPSTRE': { + const state = helper.volToDb(data.split(' ')[1]); + adapter.setState(`zone${zoneNumber}.equalizerTreble`, state, true); + break; + } + case 'ZPSBAS': { + const state = helper.volToDb(data.split(' ')[1]); + adapter.setState(`zone${zoneNumber}.equalizerBass`, state, true); + break; + } + case 'ZCVFL': { + const channelVolume = data.split(' ')[1]; + adapter.setState(`zone${zoneNumber}.channelVolumeFrontLeft`, helper.volToDb(channelVolume), true); + break; + } + case 'ZCVFR': { + const channelVolume = data.split(' ')[1]; + adapter.setState(`zone${zoneNumber}.channelVolumeFrontRight`, helper.volToDb(channelVolume), true); + break; + } + case 'PSTONECTRLON': + adapter.setState('settings.toneControl', true, true); + break; + case 'PSTONECTRLOFF': + adapter.setState('settings.toneControl', false, true); + break; + case 'MNMENON': + adapter.setState('settings.setupMenu', true, true); + break; + case 'MNMENOFF': + adapter.setState('settings.setupMenu', false, true); + break; + case 'PSCESON': + adapter.setState('settings.centerSpread', true, true); + break; + case 'PSCESOFF': + adapter.setState('settings.centerSpread', false, true); + break; + case 'PSDRCOFF': + // Dynamic Compression direct change is off + break; + case 'PSLFE': { + // LFE --> amount of subwoofer signal additional directed to speakers + const lfeAmount = parseInt(data.split(' ')[1]); + adapter.setState('settings.lfeAmount', lfeAmount, true); + break; + } + case 'CVFL': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeFrontLeft', helper.volToDb(channelVolume), true); + break; + } + case 'CVFR': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeFrontRight', helper.volToDb(channelVolume), true); + break; + } + case 'CVC': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeCenter', helper.volToDb(channelVolume), true); + break; + } + case 'CVSR': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeSurroundRight', helper.volToDb(channelVolume), true); + break; + } + case 'CVSL': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeSurroundLeft', helper.volToDb(channelVolume), true); + break; + } + case 'CVSDL': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeSurroundDolbyLeft', helper.volToDb(channelVolume), true); + break; + } + case 'CVSDR': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeSurroundDolbyRight', helper.volToDb(channelVolume), true); + break; + } + case 'CVFDL': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeFrontDolbyLeft', helper.volToDb(channelVolume), true); + break; + } + case 'CVFDR': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeFrontDolbyRight', helper.volToDb(channelVolume), true); + break; + } + case 'CVSHL': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeSurroundHeightLeft', helper.volToDb(channelVolume), true); + break; + } + case 'CVSHR': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeSurroundHeightRight', helper.volToDb(channelVolume), true); + break; + } + case 'CVFHR': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeFrontHeightRight', helper.volToDb(channelVolume), true); + break; + } + case 'CVFHL': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeFrontHeightLeft', helper.volToDb(channelVolume), true); + break; + } + case 'CVRHR': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeRearHeightRight', helper.volToDb(channelVolume), true); + break; + } + case 'CVRHL': { + const channelVolume = data.split(' ')[1]; + adapter.setState('zoneMain.channelVolumeRearHeightLeft', helper.volToDb(channelVolume), true); + break; + } + case 'CVSW': { + // can be subwoofer or subwooferTwo + const channelVolume = data.split(' ')[1]; + command = data.split(' ')[0]; + if (command === 'CVSW') { + // Check if CVSW or CVSW2 + adapter.setState('zoneMain.channelVolumeSubwoofer', helper.volToDb(channelVolume), true); + } + else { + adapter.setState('zoneMain.channelVolumeSubwooferTwo', helper.volToDb(channelVolume), true); + } // endElse + break; + } + case 'PSDILON': + adapter.setState('settings.dialogLevelAdjust', true, true); + break; + case 'PSDILOFF': + adapter.setState('settings.dialogLevelAdjust', false, true); + break; + case 'PSDIL': { + let level = data.split(' ')[1]; + level = helper.volToDb(level); + adapter.setState('settings.dialogLevel', level, true); + break; + } + case 'PSDIC': { + const level = parseInt(data.split(' ')[1]); + adapter.setState('settings.dialogControl', level, true); + break; + } + case 'SPPR': { + if (!capabilities.speakerPreset) { + await createSpeakerPreset(); + } + const preset = parseInt(data.split(' ')[1]); + adapter.setState('settings.speakerPreset', preset, true); + break; + } + default: + adapter.log.debug(`[INFO] <== Unhandled command ${command}`); + } // endSwitch +} // endHandleResponse +/** + * Create all zone specific objects for given zone + * + * @param {number} zone - zone number to be created + * @returns {Promise} + */ +async function createZone(zone) { + const promises = []; + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}`, { + type: 'channel', + common: { + name: `Zone ${zone}` + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.powerZone`, { + type: 'state', + common: { + name: `Zone ${zone} Power State`, + role: 'switch.power.zone', + type: 'boolean', + write: true, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.volume`, { + type: 'state', + common: { + name: `Zone ${zone} Volume`, + role: 'level.volume.zone', + type: 'number', + read: true, + write: true, + min: 0, + max: 98 + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.volumeDB`, { + type: 'state', + common: { + name: `Zone ${zone} VolumeDB`, + role: 'level.volume', + type: 'number', + unit: 'dB', + read: true, + write: true, + min: -80, + max: 18 + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.volumeUp`, { + type: 'state', + common: { + name: `Zone ${zone} Volume Up`, + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.volumeDown`, { + type: 'state', + common: { + name: `Zone ${zone} Volume Down`, + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.extendObjectAsync(`zone${zone}.selectInput`, { + type: 'state', + common: { + name: `Zone ${zone} Select input`, + role: 'media.input', + type: 'string', + write: true, + read: true, + states: { + 0: 'PHONO', + 1: 'CD', + 2: 'TUNER', + 3: 'DVD', + 4: 'BD', + 5: 'TV', + 6: 'SAT/CBL', + 7: 'MPLAY', + 8: 'GAME', + 9: 'NET', + 10: 'SPOTIFY', + 11: 'LASTFM', + 12: 'IRADIO', + 13: 'SERVER', + 14: 'FAVORITES', + 15: 'AUX1', + 16: 'AUX2', + 17: 'AUX3', + 18: 'AUX4', + 19: 'AUX5', + 20: 'AUX6', + 21: 'AUX7', + 22: 'BT', + 23: 'USB' + } + }, + native: {} + }, { preserve: { common: ['name'] } })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.muteIndicator`, { + type: 'state', + common: { + name: `Zone ${zone} Muted`, + role: 'media.mute', + type: 'boolean', + write: true, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.quickSelect`, { + type: 'state', + common: { + name: `Zone ${zone} Quick select`, + role: 'media.quickSelect', + type: 'number', + write: true, + read: true, + min: 1, + max: 5 + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.sleepTimer`, { + type: 'state', + common: { + name: `Zone ${zone} Sleep Timer`, + role: 'media.timer.sleep', + unit: 'min', + type: 'number', + write: true, + read: true, + min: 0, + max: 120 + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.equalizerBass`, { + type: 'state', + common: { + name: `Zone ${zone} Bass Level`, + role: 'level.bass', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: -6, + max: 6 + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.equalizerBassUp`, { + type: 'state', + common: { + name: `Zone ${zone} Bass Up`, + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.equalizerBassDown`, { + type: 'state', + common: { + name: `Zone ${zone} Bass Down`, + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.equalizerTreble`, { + type: 'state', + common: { + name: `Zone ${zone} Treble`, + role: 'level.treble', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: -6, + max: 6 + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.equalizerTrebleUp`, { + type: 'state', + common: { + name: `Zone ${zone} Treble Up`, + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.equalizerTrebleDown`, { + type: 'state', + common: { + name: `Zone ${zone} Treble Down`, + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.channelVolumeFrontRight`, { + type: 'state', + common: { + name: `Zone ${zone} Channel Volume Front Right`, + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync(`zone${zone}.channelVolumeFrontLeft`, { + type: 'state', + common: { + name: `Zone ${zone} Channel Volume Front Left`, + role: 'level', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: -12, + max: 12 + }, + native: {} + })); + try { + await Promise.all(promises); + if (!zonesCreated[zone]) { + adapter.log.debug(`[INFO] <== Zone ${zone} detected`); + } + zonesCreated[zone] = true; + } + catch (e) { + adapter.log.warn(`Could not create zone ${zone}: ${e.message}`); + } +} // endCreateZone +/** + * Creates the display states and more for AVRs which have an http-interface (states still updated via telnet) + * + * @returns {Promise} + */ +async function createDisplayAndHttp() { + const promises = []; + promises.push(adapter.setObjectNotExistsAsync('display.displayContent0', { + type: 'state', + common: { + name: 'Display content 0', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent1', { + type: 'state', + common: { + name: 'Display content 1', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent2', { + type: 'state', + common: { + name: 'Display content 2', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent3', { + type: 'state', + common: { + name: 'Display content 3', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent4', { + type: 'state', + common: { + name: 'Display content 4', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent5', { + type: 'state', + common: { + name: 'Display content 5', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent6', { + type: 'state', + common: { + name: 'Display content 6', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent7', { + type: 'state', + common: { + name: 'Display content 7', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('display.displayContent8', { + type: 'state', + common: { + name: 'Display content 8', + role: 'info.display', + type: 'string', + write: false, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('zoneMain.iconURL', { + type: 'state', + common: { + name: 'Cover', + role: 'media.cover', + type: 'string', + write: false, + read: true + }, + native: {} + })); + try { + await Promise.all(promises); + if (!capabilities.display) { + adapter.setState('zoneMain.iconURL', `http://${host}/NetAudio/art.asp-jpg`, true); + adapter.log.debug('[INFO] <== Display Content created'); + } // endIf + capabilities.display = true; + } + catch (e) { + adapter.log.error(`Could not create Display Content states: ${e.message}`); + } +} // endCreateDisplayAndHttp +/** + * Creates the monitor state objects + * + * @returns {Promise} + */ +async function createMonitorState() { + const promises = []; + promises.push(adapter.setObjectNotExistsAsync('settings.outputMonitor', { + type: 'state', + common: { + name: 'Output monitor', + role: 'video.output', + type: 'number', + write: true, + read: true, + states: { + 0: 'AUTO', + 1: '1', + 2: '2' + } + }, + native: {} + })); + promises.push(adapter.extendObjectAsync('settings.videoProcessingMode', { + type: 'state', + common: { + name: 'Video processing mode', + role: 'video.processingMode', + type: 'string', + write: true, + read: true, + states: { + 0: 'AUTO', + 1: 'GAME', + 2: 'MOVIE' + } + }, + native: {} + }, { preserve: { common: ['name'] } })); + try { + await Promise.all(promises); + if (!capabilities.multiMonitor) { + adapter.log.debug('[INFO] <== Created monitor states'); + } + capabilities.multiMonitor = true; + } + catch (e) { + adapter.log.error(`Could not create monitor states: ${e.message}`); + } +} // endCreateMonitorState +/** + * Creates the subwoofer two objects + * + * @returns {Promise} + */ +async function createSubTwo() { + const promises = []; + promises.push(adapter.setObjectNotExistsAsync('settings.subwooferTwoLevel', { + type: 'state', + common: { + name: 'Second Subwoofer Level', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('settings.subwooferTwoLevelUp', { + type: 'state', + common: { + name: 'Subwoofer Two Level Up', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('settings.subwooferTwoLevelDown', { + type: 'state', + common: { + name: 'Subwoofer Two Level Down', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + try { + await Promise.all(promises); + if (!capabilities.subTwo) { + adapter.log.debug('[INFO] <== Created subwoofer two states'); + } + capabilities.subTwo = true; + } + catch (e) { + adapter.log.error(`Could not create subwoofer two states: ${e.message}`); + } +} // endCreateSubTwo +/** + * Creates th LFC Audyssey objects + * + * @returns {Promise} + */ +async function createLfcAudyssey() { + const promises = []; + promises.push(adapter.setObjectNotExistsAsync('settings.audysseyLfc', { + type: 'state', + common: { + name: 'Audyssey Low Frequency Containment', + role: 'switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('settings.containmentAmount', { + type: 'state', + common: { + name: 'Audyssey Low Frequency Containment Amount', + role: 'level', + type: 'number', + write: true, + read: true, + min: 1, + max: 7 + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('settings.containmentAmountUp', { + type: 'state', + common: { + name: 'Containment Amount Up', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + promises.push(adapter.setObjectNotExistsAsync('settings.containmentAmountDown', { + type: 'state', + common: { + name: 'Containment Amount Down', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + })); + try { + await Promise.all(promises); + if (!capabilities.audysseyLfc) { + adapter.log.debug('[INFO] <== Created Audyssey LFC states'); + } + capabilities.audysseyLfc = true; + } + catch (e) { + adapter.log.error(`Could not create Audyssey LFC states: ${e.message}`); + } +} // endCreateLfcAudyssey +/** + * Creates the picture mode objects + * + * @returns {Promise} + */ +async function createPictureMode() { + await adapter.setObjectNotExistsAsync('settings.pictureMode', { + type: 'state', + common: { + name: 'Picture Mode Direct Change', + role: 'media.pictureMode', + type: 'string', + write: true, + read: false, + states: { + OFF: 'Off', + STD: 'Standard', + MOV: 'Movie', + VVD: 'Vivid', + STM: 'Stream', + CTM: 'Custom', + DAY: 'ISF Day', + NGT: 'ISF Night' + } + }, + native: {} + }); + capabilities.pictureMode = true; +} // endCreatePictureMode +/** + * Creates the Speaker Preset Object + * @return {Promise} + */ +async function createSpeakerPreset() { + await adapter.setObjectNotExistsAsync('settings.speakerPreset', { + type: 'state', + common: { + name: 'Speaker Preset', + type: 'number', + role: 'value', + states: { + 1: '1', + 2: '2' + } + }, + native: {} + }); + capabilities.speakerPreset = true; +} +/** + * Ensures that the val is part of the state list of given object id + * + * @param {string} id - object id + * @param {string} val - attribute which will be added to the object if not present + * @return {Promise} + */ +async function ensureAttrInStates(id, val) { + try { + const obj = await adapter.getObjectAsync(id); + if (obj && obj.common && helper.isObject(obj.common.states)) { + const values = Object.values(obj.common.states); + // check if its already part of the object + if (!values.includes(val)) { + obj.common.states[values.length] = val; + await adapter.setObjectAsync(id, obj); + adapter.log.info(`[INFO] Added ${val} to ${id}`); + } + } + } + catch (e) { + adapter.log.error(`Could not ensure attribute ${val} to be in ${id}: ${e.message}`); + } +} +/** + * Create standard state objects + * + * @param {'DE'|'US'} type + * @return {Promise} + */ +async function createStandardStates(type) { + const promises = []; + if (type === 'DE') { + for (const obj of helper.commonCommands) { + const id = obj._id; + delete obj._id; + promises.push(adapter.extendObjectAsync(id, obj, { preserve: { common: ['name'] } })); + } // endFor + try { + await Promise.all(promises); + adapter.log.debug('[INFO] DE states created'); + } + catch (e) { + adapter.log.error(`Could not create DE states: ${e.message}`); + } + } + else if (type === 'US') { + for (const obj of helper.usCommands) { + const id = obj._id; + delete obj._id; + promises.push(adapter.extendObjectAsync(id, obj, { preserve: { common: ['name'] } })); + } // endFor + for (let i = 1; i <= 6; i++) { + // iterate over zones + const zoneNumber = i * 2; + promises.push(adapter.setObjectNotExistsAsync(`zone${zoneNumber}`, { + type: 'channel', + common: { + name: 'Settings and device commands' + }, + native: {} + })); + for (const obj of helper.usCommandsZone) { + const id = `zone${zoneNumber}.${obj._id}`; + promises.push(adapter.setObjectNotExistsAsync(id, { + type: obj.type, + common: obj.common, + native: obj.native + })); + } // endFor + } // endFor + try { + await Promise.all(promises); + adapter.log.debug('[INFO] US states created'); + } + catch (e) { + adapter.log.error(`Could not create US states: ${e.message}`); + } + } + else { + throw new Error('Unknown receiver type'); + } +} // endCreateStandardStates +if (module === require.main) { + startAdapter(); +} +else { + // export for compact mode + module.exports = startAdapter; +} +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/build/main.js.map b/build/main.js.map new file mode 100644 index 0000000..0a032db --- /dev/null +++ b/build/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.js"],"names":[],"mappings":"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;IACZ,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,eAAe;IACf,QAAQ;IACR,SAAS;IACT,SAAS;IACT,KAAK;IACL,KAAK;IACL,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,KAAK;IACL,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,WAAW;IACX,SAAS;IACT,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;CACX,CAAC;AAEF;;GAEG;AACH,KAAK,UAAU,YAAY;IACvB,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC;AACvC,CAAC,C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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ff44fa8..5fae73d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,7117 @@ { "name": "iobroker.denon", "version": "1.13.4", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "iobroker.denon", + "version": "1.13.4", + "license": "MIT", + "dependencies": { + "@iobroker/adapter-core": "^2.6.0" + }, + "devDependencies": { + "@alcalzone/release-script": "^3.5.6", + "@alcalzone/release-script-plugin-iobroker": "^3.5.7", + "@iobroker/testing": "^2.5.6", + "@typescript-eslint/eslint-plugin": "^5.48.0", + "@typescript-eslint/parser": "^5.48.0", + "axios": "^0.26.1", + "chai": "^4.3.6", + "eslint": "^8.13.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "gulp": "^4.0.2", + "mocha": "^9.2.2", + "prettier": "^2.6.2", + "typescript": "^4.9.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@alcalzone/pak": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@alcalzone/pak/-/pak-0.8.1.tgz", + "integrity": "sha512-sPdxNxdXLH96kbyWLdIljVSIY2N6/qnPqkq5AlWvuizjGQUwHIUtWZHLss9XNDV/hY7YkgdIb9ILHbMTnRBxVQ==", + "dev": true, + "dependencies": { + "axios": "^0.26.0", + "execa": "^5.0.0", + "fs-extra": "^10.0.1" + } + }, + "node_modules/@alcalzone/release-script": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script/-/release-script-3.5.6.tgz", + "integrity": "sha512-7Ip/r6eYxsLt8PMdafx5bSMj49PQoENIXVD5o1jyStncr3uRynKAWUVvGuOdyADNvPkupNNnfMdjXaAei0If8Q==", + "dev": true, + "dependencies": { + "@alcalzone/release-script-core": "3.5.3", + "@alcalzone/release-script-plugin-changelog": "3.5.6", + "@alcalzone/release-script-plugin-exec": "3.5.3", + "@alcalzone/release-script-plugin-git": "3.5.3", + "@alcalzone/release-script-plugin-package": "3.5.5", + "@alcalzone/release-script-plugin-version": "3.5.6", + "alcalzone-shared": "^4.0.1", + "axios": "^0.26.0", + "enquirer": "^2.3.6", + "fs-extra": "^10.0.1", + "picocolors": "1.0.0", + "semver": "^7.3.5", + "source-map-support": "^0.5.21", + "yargs": "^17.3.1" + }, + "bin": { + "release-script": "bin/release.js" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-core": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.5.3.tgz", + "integrity": "sha512-jAnF8KpFNVAHuRE6tkf+dD213pUgPBTupcax5QUaTiC1u8iagitFQ6ejQS6QU9ZVFwkCNz7J7yB99j0bK5MnmA==", + "dev": true, + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-changelog": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-changelog/-/release-script-plugin-changelog-3.5.6.tgz", + "integrity": "sha512-4K1hrJu0mIshK5gKhzfWPS7rr6o98TQYIwdGqkrolC7NpkRRS30UFbAigxMDxMefZLVwCHX572ImmiURJEejVA==", + "dev": true, + "dependencies": { + "@alcalzone/release-script-core": "3.5.3", + "alcalzone-shared": "^4.0.1", + "fs-extra": "^10.0.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-exec": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-exec/-/release-script-plugin-exec-3.5.3.tgz", + "integrity": "sha512-GKNQ65TB5muasM0IMH1259PKFEXmh6Icn57muakQz0tmRh3GO6WbN4LtLlm0+Ffh0PL6C0ys/zzSpRBhoO3X9A==", + "dev": true, + "dependencies": { + "@alcalzone/release-script-core": "3.5.3", + "alcalzone-shared": "^4.0.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-git": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-git/-/release-script-plugin-git-3.5.3.tgz", + "integrity": "sha512-2OdHz51dsqQOzocu6nqCjPB/gh2+vfggZ7YlppV3/6iy4Z3WyM+I2HWOFRx8RNGuWFf37ZytyDa29LJYnX7lsA==", + "dev": true, + "dependencies": { + "@alcalzone/release-script-core": "3.5.3", + "fs-extra": "^10.0.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-iobroker": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-iobroker/-/release-script-plugin-iobroker-3.5.7.tgz", + "integrity": "sha512-aOtPpYfnPeot+eDAM32Hl7l1QdXUmbcxMgw3cW2+LUSFUIYVdBHhmV7VFiiWJke4HDdG15qSGVI0a/3gyvvyTw==", + "dev": true, + "dependencies": { + "@alcalzone/release-script-core": "3.5.3", + "alcalzone-shared": "^4.0.1", + "axios": "^0.26.0", + "fs-extra": "^10.0.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-package": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-package/-/release-script-plugin-package-3.5.5.tgz", + "integrity": "sha512-zZ/rhgMWGzuCx990zxqrTq7/SJMNP+L7tA58GYe4zhv8TWOuyDejnuhC1+HTIXVmP4hdrsZf/HDsGzfOQju6Lg==", + "dev": true, + "dependencies": { + "@alcalzone/pak": "^0.8.1", + "@alcalzone/release-script-core": "3.5.3", + "alcalzone-shared": "^4.0.1", + "fs-extra": "^10.0.1", + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-package/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@alcalzone/release-script-plugin-version": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-version/-/release-script-plugin-version-3.5.6.tgz", + "integrity": "sha512-Opcgp8FzbfPOc89yp+hlIkR7Ca/QoK9JjUZSpswRjSXKQI6nk/h1v7AJNVWF24/RpQ2xSD2BMFgcaNTn2PK87g==", + "dev": true, + "dependencies": { + "@alcalzone/release-script-core": "3.5.3", + "alcalzone-shared": "^4.0.1", + "fs-extra": "^10.0.1", + "semver": "^7.3.5", + "tiny-glob": "^0.2.9" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-version/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@alcalzone/release-script/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@iobroker/adapter-core": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@iobroker/adapter-core/-/adapter-core-2.6.0.tgz", + "integrity": "sha512-J5Cgy0NK8GWjN1th3yvWCG3tnK8iJJcPaHIoVR8PfpEsz4hffuVGi660vNXqXdiqR5Br09XSJ5h1Pn9af0/taw==", + "dependencies": { + "@types/iobroker": "^4.0.1" + } + }, + "node_modules/@iobroker/testing": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@iobroker/testing/-/testing-2.5.6.tgz", + "integrity": "sha512-oK9dj3f/j6M3fsrdmwY2k4TP3+h68rA3EfMSvnwV5Yc2+vR+xyBmOnoUcL0KLA2AIv++CBcfbE//9lcvANg7NA==", + "dev": true, + "dependencies": { + "alcalzone-shared": "~4.0.1", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "debug": "^4.3.3", + "fs-extra": "^10.0.1", + "mocha": "^9.2.1", + "sinon": "^13.0.1", + "sinon-chai": "^3.7.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/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.1.tgz", + "integrity": "sha512-Wp5vwlZ0lOqpSYGKqr53INws9HLkt6JDc/pDZcPf7bchQnrXJMXPns8CXx0hFikMSGSWfvtvvpb2gtMVfkWagA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", + "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "node_modules/@types/iobroker": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/iobroker/-/iobroker-4.0.1.tgz", + "integrity": "sha512-+lKr/gXxfYyXQXhL6FoNifaJGiylc+EFwtLqaFxORCkQlz35+0yBuZF5H728GgJWsbBidxe3q3zM2hazUAEz1g==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", + "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", + "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/type-utils": "5.48.0", + "@typescript-eslint/utils": "5.48.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", + "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", + "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", + "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/utils": "5.48.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", + "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/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/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "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/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/alcalzone-shared": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/alcalzone-shared/-/alcalzone-shared-4.0.1.tgz", + "integrity": "sha512-6t0LFCIGvBG24grbV93Y1+MJjoyqgUpPOp/PkOcal1ZXXUUMEaZKPu6NfN6e3x5k2P2mnNaY2eXn/VmpWDLzYA==", + "dev": true, + "dependencies": { + "debug": "^4.3.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "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/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "dependencies": { + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/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, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.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": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, + "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, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/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" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "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 + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/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/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 + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "node_modules/copy-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "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" + } + }, + "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" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "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": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/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" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "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 + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es5-ext": { + "version": "0.10.52", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.52.tgz", + "integrity": "sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag==", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.2", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "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" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.2.1", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/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/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/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" + } + }, + "node_modules/espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "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/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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": { + "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" + } + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.2.0.tgz", + "integrity": "sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA==", + "dev": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true + }, + "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 + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/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, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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 + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "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/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": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/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" + } + }, + "node_modules/fast-glob/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/fast-glob/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, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/fast-glob/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "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 + }, + "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, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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 + }, + "node_modules/fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "bundleDependencies": [ + "node-pre-gyp" + ], + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/fsevents/node_modules/abbrev": { + "version": "1.1.1", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/ansi-regex": { + "version": "2.1.1", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/aproba": { + "version": "1.2.0", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/are-we-there-yet": { + "version": "1.1.5", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/fsevents/node_modules/balanced-match": { + "version": "1.0.0", + "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/brace-expansion": { + "version": "1.1.11", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fsevents/node_modules/chownr": { + "version": "1.1.1", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/code-point-at": { + "version": "1.1.0", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/concat-map": { + "version": "0.0.1", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/console-control-strings": { + "version": "1.1.0", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/core-util-is": { + "version": "1.0.2", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/debug": { + "version": "4.1.1", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/fsevents/node_modules/deep-extend": { + "version": "0.6.0", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fsevents/node_modules/delegates": { + "version": "1.0.0", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/detect-libc": { + "version": "1.0.3", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "inBundle": true, + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/fsevents/node_modules/fs-minipass": { + "version": "1.2.5", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/fs.realpath": { + "version": "1.0.0", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/gauge": { + "version": "2.7.4", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/fsevents/node_modules/glob": { + "version": "7.1.3", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "inBundle": true, + "optional": true, + "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/fsevents/node_modules/has-unicode": { + "version": "2.0.1", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/iconv-lite": { + "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/ignore-walk": { + "version": "3.0.1", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/fsevents/node_modules/inflight": { + "version": "1.0.6", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/inherits": { + "version": "2.0.3", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/ini": { + "version": "1.3.5", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/isarray": { + "version": "1.0.0", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/minimatch": { + "version": "3.0.4", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/minimist": { + "version": "0.0.8", + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/minipass": { + "version": "2.3.5", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/fsevents/node_modules/minizlib": { + "version": "1.2.1", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/mkdirp": { + "version": "0.5.1", + "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fsevents/node_modules/ms": { + "version": "2.1.1", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/needle": { + "version": "2.3.0", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/fsevents/node_modules/node-pre-gyp": { + "version": "0.12.0", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/fsevents/node_modules/nopt": { + "version": "4.0.1", + "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/fsevents/node_modules/npm-bundled": { + "version": "1.0.6", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/npm-packlist": { + "version": "1.4.1", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "node_modules/fsevents/node_modules/npmlog": { + "version": "4.1.2", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/fsevents/node_modules/number-is-nan": { + "version": "1.0.1", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/object-assign": { + "version": "4.1.1", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/once": { + "version": "1.4.0", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/os-homedir": { + "version": "1.0.2", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/os-tmpdir": { + "version": "1.0.2", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/osenv": { + "version": "0.1.5", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/fsevents/node_modules/path-is-absolute": { + "version": "1.0.1", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/process-nextick-args": { + "version": "2.0.0", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/rc": { + "version": "1.2.8", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/fsevents/node_modules/rc/node_modules/minimist": { + "version": "1.2.0", + "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/readable-stream": { + "version": "2.3.6", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "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" + } + }, + "node_modules/fsevents/node_modules/rimraf": { + "version": "2.6.3", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fsevents/node_modules/safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/safer-buffer": { + "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/sax": { + "version": "1.2.4", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/semver": { + "version": "5.7.0", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "inBundle": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/fsevents/node_modules/set-blocking": { + "version": "2.0.0", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/signal-exit": { + "version": "3.0.2", + "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/string_decoder": { + "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fsevents/node_modules/string-width": { + "version": "1.0.2", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-ansi": { + "version": "3.0.1", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-json-comments": { + "version": "2.0.1", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/tar": { + "version": "4.4.8", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/fsevents/node_modules/util-deprecate": { + "version": "1.0.2", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/wide-align": { + "version": "1.1.3", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/fsevents/node_modules/wrappy": { + "version": "1.0.2", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/yallist": { + "version": "3.0.3", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/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 + }, + "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.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "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/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "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": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", + "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "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/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/gulp-cli/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/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, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/gulp-cli/node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/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/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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/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" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/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-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/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-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/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-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/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/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/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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 + }, + "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 + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "dev": true + }, + "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 + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "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-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "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" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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 + }, + "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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/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, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/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, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mocha/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/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": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/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 + }, + "node_modules/mocha/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" + } + }, + "node_modules/mocha/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/mocha/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/mocha/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" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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 + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/nise": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", + "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": ">=5", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/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/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "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" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "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/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, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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 + }, + "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" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "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" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/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, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-buffer/node_modules/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/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "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, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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/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" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "node_modules/sinon": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz", + "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^9.0.0", + "@sinonjs/samsam": "^6.1.1", + "diff": "^5.0.0", + "nise": "^5.1.1", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/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, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/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/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "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" + } + }, + "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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/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 + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/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, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "node_modules/stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "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" + } + }, + "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/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "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/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/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "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 + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/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/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "engines": { + "node": ">=4" + } + }, + "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/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", + "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/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, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/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, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/yargs": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", + "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { "@alcalzone/pak": { "version": "0.8.1", @@ -206,6 +7315,32 @@ "sinon-chai": "^3.7.0" } }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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 + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -249,11 +7384,170 @@ "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, "@types/node": { "version": "17.0.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", + "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/type-utils": "5.48.0", + "@typescript-eslint/utils": "5.48.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", + "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", + "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", + "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/utils": "5.48.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", + "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "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, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.0", + "eslint-visitor-keys": "^3.3.0" + } + }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -270,7 +7564,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv": { "version": "6.12.6", @@ -462,6 +7757,12 @@ } } }, + "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 + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -1119,6 +8420,23 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "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": { + "path-type": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1289,17 +8607,6 @@ "dev": true, "requires": { "is-glob": "^4.0.3" - }, - "dependencies": { - "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, - "requires": { - "is-extglob": "^2.1.1" - } - } } } } @@ -1308,7 +8615,8 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-prettier": { "version": "4.0.0", @@ -1602,6 +8910,64 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "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 + }, + "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": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1614,6 +8980,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "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": { + "reusify": "^1.0.4" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1789,24 +9164,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "bundled": true, "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "bundled": true, "dev": true, "optional": true }, "aproba": { "version": "1.2.0", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "bundled": true, "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "bundled": true, "dev": true, "optional": true, @@ -1817,12 +9196,14 @@ }, "balanced-match": { "version": "1.0.0", + "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", "bundled": true, "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "bundled": true, "dev": true, "optional": true, @@ -1833,36 +9214,42 @@ }, "chownr": { "version": "1.1.1", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "bundled": true, "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "bundled": true, "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "bundled": true, "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "bundled": true, "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "bundled": true, "dev": true, "optional": true }, "debug": { "version": "4.1.1", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "bundled": true, "dev": true, "optional": true, @@ -1872,24 +9259,28 @@ }, "deep-extend": { "version": "0.6.0", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "bundled": true, "dev": true, "optional": true }, "delegates": { "version": "1.0.0", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "bundled": true, "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "bundled": true, "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "bundled": true, "dev": true, "optional": true, @@ -1899,12 +9290,14 @@ }, "fs.realpath": { "version": "1.0.0", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "bundled": true, "dev": true, "optional": true }, "gauge": { "version": "2.7.4", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "bundled": true, "dev": true, "optional": true, @@ -1921,6 +9314,7 @@ }, "glob": { "version": "7.1.3", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "bundled": true, "dev": true, "optional": true, @@ -1935,12 +9329,14 @@ }, "has-unicode": { "version": "2.0.1", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "bundled": true, "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "bundled": true, "dev": true, "optional": true, @@ -1950,6 +9346,7 @@ }, "ignore-walk": { "version": "3.0.1", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "bundled": true, "dev": true, "optional": true, @@ -1959,6 +9356,7 @@ }, "inflight": { "version": "1.0.6", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "bundled": true, "dev": true, "optional": true, @@ -1969,18 +9367,21 @@ }, "inherits": { "version": "2.0.3", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "bundled": true, "dev": true, "optional": true }, "ini": { "version": "1.3.5", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "bundled": true, "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "bundled": true, "dev": true, "optional": true, @@ -1990,12 +9391,14 @@ }, "isarray": { "version": "1.0.0", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "bundled": true, "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "bundled": true, "dev": true, "optional": true, @@ -2005,12 +9408,14 @@ }, "minimist": { "version": "0.0.8", + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "bundled": true, "dev": true, "optional": true }, "minipass": { "version": "2.3.5", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "bundled": true, "dev": true, "optional": true, @@ -2021,6 +9426,7 @@ }, "minizlib": { "version": "1.2.1", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "bundled": true, "dev": true, "optional": true, @@ -2030,6 +9436,7 @@ }, "mkdirp": { "version": "0.5.1", + "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", "bundled": true, "dev": true, "optional": true, @@ -2039,12 +9446,14 @@ }, "ms": { "version": "2.1.1", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "bundled": true, "dev": true, "optional": true }, "needle": { "version": "2.3.0", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "bundled": true, "dev": true, "optional": true, @@ -2056,6 +9465,7 @@ }, "node-pre-gyp": { "version": "0.12.0", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "bundled": true, "dev": true, "optional": true, @@ -2074,6 +9484,7 @@ }, "nopt": { "version": "4.0.1", + "integrity": "sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "bundled": true, "dev": true, "optional": true, @@ -2084,12 +9495,14 @@ }, "npm-bundled": { "version": "1.0.6", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "bundled": true, "dev": true, "optional": true, @@ -2100,6 +9513,7 @@ }, "npmlog": { "version": "4.1.2", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "bundled": true, "dev": true, "optional": true, @@ -2112,18 +9526,21 @@ }, "number-is-nan": { "version": "1.0.1", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "bundled": true, "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "bundled": true, "dev": true, "optional": true }, "once": { "version": "1.4.0", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "bundled": true, "dev": true, "optional": true, @@ -2133,18 +9550,21 @@ }, "os-homedir": { "version": "1.0.2", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "bundled": true, "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "bundled": true, "dev": true, "optional": true }, "osenv": { "version": "0.1.5", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "bundled": true, "dev": true, "optional": true, @@ -2155,18 +9575,21 @@ }, "path-is-absolute": { "version": "1.0.1", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "bundled": true, "dev": true, "optional": true }, "rc": { "version": "1.2.8", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "bundled": true, "dev": true, "optional": true, @@ -2179,6 +9602,7 @@ "dependencies": { "minimist": { "version": "1.2.0", + "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==", "bundled": true, "dev": true, "optional": true @@ -2187,6 +9611,7 @@ }, "readable-stream": { "version": "2.3.6", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, "optional": true, @@ -2202,6 +9627,7 @@ }, "rimraf": { "version": "2.6.3", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "bundled": true, "dev": true, "optional": true, @@ -2211,62 +9637,71 @@ }, "safe-buffer": { "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "bundled": true, "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "bundled": true, "dev": true, "optional": true }, "sax": { "version": "1.2.4", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "bundled": true, "dev": true, "optional": true }, "semver": { "version": "5.7.0", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "bundled": true, "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "bundled": true, "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", + "integrity": "sha512-meQNNykwecVxdu1RlYMKpQx4+wefIYpmxi6gexo/KAbwquJrBUrBmKYJrE8KFkVQAAVWEnwNdu21PgrD77J3xA==", "bundled": true, "dev": true, "optional": true }, - "string-width": { - "version": "1.0.2", + "string_decoder": { + "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "safe-buffer": "~5.1.0" } }, - "string_decoder": { - "version": "1.1.1", + "string-width": { + "version": "1.0.2", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { "version": "3.0.1", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "bundled": true, "dev": true, "optional": true, @@ -2276,12 +9711,14 @@ }, "strip-json-comments": { "version": "2.0.1", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "bundled": true, "dev": true, "optional": true }, "tar": { "version": "4.4.8", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "bundled": true, "dev": true, "optional": true, @@ -2297,12 +9734,14 @@ }, "util-deprecate": { "version": "1.0.2", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "bundled": true, "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "bundled": true, "dev": true, "optional": true, @@ -2312,12 +9751,14 @@ }, "wrappy": { "version": "1.0.2", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "bundled": true, "dev": true, "optional": true }, "yallist": { "version": "3.0.3", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "bundled": true, "dev": true, "optional": true @@ -2475,6 +9916,20 @@ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", "dev": true }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "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" + } + }, "globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", @@ -2907,9 +10362,9 @@ "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==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -3267,6 +10722,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -3566,6 +11027,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -4020,6 +11487,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "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 + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -4252,6 +11725,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -4261,6 +11740,15 @@ "glob": "^7.1.3" } }, + "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, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4379,6 +11867,13 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "requires": {} + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "snapdragon": { @@ -4638,6 +12133,15 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4649,15 +12153,6 @@ "strip-ansi": "^6.0.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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4816,6 +12311,21 @@ "through2": "^2.0.3" } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -4849,6 +12359,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true + }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", diff --git a/package.json b/package.json index 9d362f7..830cf9f 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,8 @@ "@alcalzone/release-script": "^3.5.6", "@alcalzone/release-script-plugin-iobroker": "^3.5.7", "@iobroker/testing": "^2.5.6", + "@typescript-eslint/eslint-plugin": "^5.48.0", + "@typescript-eslint/parser": "^5.48.0", "axios": "^0.26.1", "chai": "^4.3.6", "eslint": "^8.13.0", @@ -43,10 +45,14 @@ "eslint-plugin-prettier": "^4.0.0", "gulp": "^4.0.2", "mocha": "^9.2.2", - "prettier": "^2.6.2" + "prettier": "^2.6.2", + "typescript": "^4.9.4" }, - "main": "main.js", + "main": "build/main.js", "scripts": { + "prebuild": "rimraf ./build", + "build:ts": "tsc -p tsconfig.build.json", + "build": "npm run build:ts", "test:package": "mocha test/packageFiles --exit", "test:integration": "mocha test/integrationAdapter --exit", "test": "mocha --exit", @@ -56,10 +62,11 @@ "url": "https://github.com/foxriver76/ioBroker.denon/issues" }, "files": [ - "main.js", - "lib/", - "admin/", + "admin{,/!(src)/**}/!(tsconfig|tsconfig.*).json", + "admin{,/!(src)/**}/*.{html,css,png,svg,jpg,js}", "io-package.json", + "build/main.js", + "build/lib", "LICENSE" ], "readmeFilename": "README.md" diff --git a/lib/tools.js b/src/lib/tools.ts similarity index 68% rename from lib/tools.js rename to src/lib/tools.ts index 78dfc6a..ef31f98 100644 --- a/lib/tools.js +++ b/src/lib/tools.ts @@ -1,11 +1,10 @@ -const axios = require('axios'); +import axios from 'axios'; /** * Tests whether the given variable is a real object and not an Array - * @param {any} it The variable to test - * @returns {it is Record} + * @param it The variable to test */ -function isObject(it) { +export function isObject(it: any): it is Record { // This is necessary because: // typeof null === 'object' // typeof [] === 'object' @@ -15,10 +14,9 @@ function isObject(it) { /** * Tests whether the given variable is really an Array - * @param {any} it The variable to test - * @returns {it is any[]} + * @param it The variable to test */ -function isArray(it) { +export function isArray(it: any): it is any[] { if (Array.isArray) { return Array.isArray(it); } @@ -27,12 +25,11 @@ function isArray(it) { /** * Translates text using the Google Translate API - * @param {string} text The text to translate - * @param {string} targetLang The target languate - * @param {string} yandex api key - * @returns {Promise} + * @param text The text to translate + * @param targetLang The target languate + * @param yandex api key */ -async function translateText(text, targetLang, yandex) { +export async function translateText(text: string, targetLang: string, yandex: string): Promise { if (targetLang === 'en') { return text; } @@ -43,7 +40,7 @@ async function translateText(text, targetLang, yandex) { } } -async function translateYandex(text, targetLang, yandex) { +export async function translateYandex(text: string, targetLang: string, yandex: string): Promise { if (targetLang === 'zh-cn') { targetLang = 'zh'; } @@ -52,16 +49,16 @@ async function translateYandex(text, targetLang, yandex) { text )}&lang=en-${targetLang}`; const response = await axios({ url, timeout: 15000 }); - if (response.data && response.data['text']) { - return response.data['text'][0]; + if (response.data && response.data.text) { + return response.data.text[0]; } throw new Error('Invalid response for translate request'); - } catch (e) { - throw new Error(`Could not translate to "${targetLang}": ${e}`); + } catch (e: any) { + throw new Error(`Could not translate to "${targetLang}": ${e.message}`); } } -async function translateGoogle(text, targetLang) { +export async function translateGoogle(text: string, targetLang: string): Promise { try { const url = `http://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=${targetLang}&dt=t&q=${encodeURIComponent( text @@ -72,13 +69,7 @@ async function translateGoogle(text, targetLang) { return response.data[0][0][0]; } throw new Error('Invalid response for translate request'); - } catch (e) { - throw new Error(`Could not translate to "${targetLang}": ${e}`); + } catch (e: any) { + throw new Error(`Could not translate to "${targetLang}": ${e.message}`); } } - -module.exports = { - isArray, - isObject, - translateText -}; diff --git a/lib/upnp.js b/src/lib/upnp.ts similarity index 79% rename from lib/upnp.js rename to src/lib/upnp.ts index 70f64f2..f2211c7 100755 --- a/lib/upnp.js +++ b/src/lib/upnp.ts @@ -1,22 +1,19 @@ +import http from 'http'; +import dgram from 'dgram'; +import { networkInterfaces } from 'os'; + /** * Tries to read HTML page. * - * @alias httpGet - * @memberof tools - * @param {string} link http link, like http://192.168.1.2:80/abc/de.xml - * @param {number} timeout timeout in ms (default 500) - * @param {function} callback return result - *
function (error, resultAsString, link) {}
+ * @param link http link, like http://192.168.1.2:80/abc/de.xml + * @param timeout timeout in ms (default 500) + * @param callback return result */ -function httpGet(link, timeout, callback) { - const http = require('http'); - - if (typeof timeout === 'function') { - callback = timeout; - timeout = 500; - } - timeout = parseInt(timeout, 10) || 500; - +export function httpGet( + link: string, + timeout: number, + callback: (err: any, result: string | null, link?: string) => void +) { const req = http .get(link, res => { const statusCode = res.statusCode; @@ -35,8 +32,9 @@ function httpGet(link, timeout, callback) { .on('error', e => callback && callback(e.message, null)); req.setTimeout(timeout, () => { - this.abort(); + req.destroy(); callback && callback('timeout', null); + // @ts-expect-error change signature or remove it callback = null; }); } @@ -72,35 +70,26 @@ function httpGet(link, timeout, callback) { * * @alias ssdpScan * @memberof tools - * @param {string} text filter string like "urn:dial-multiscreen-org:service:dial:1" - * @param {boolean} readXml if LOCATION xml should be read - * @param {number} timeout timeout in ms (default 1000) - * @param {function} callback return result - *
function (error, result, ip, xmlData) {}
+ * @param text filter string like "urn:dial-multiscreen-org:service:dial:1" + * @param readXml if LOCATION xml should be read + * @param timeout timeout in ms (default 1000) + * @param callback return result */ -function ssdpScan(text, readXml, timeout, callback) { - if (typeof readXml === 'function') { - callback = readXml; - readXml = false; - } - if (typeof readXml === 'number') { - timeout = readXml; - readXml = false; - } - if (typeof timeout === 'function') { - callback = timeout; - timeout = 1000; - } +export function ssdpScan( + text: string, + readXml: boolean, + timeout: number, + callback: (err: any, res: any, ip?: string, xmlData?: any) => void +) { timeout = timeout || 1000; - const dgram = require('dgram'); - let timer; + let timer: NodeJS.Timeout | undefined | null; - const interfaces = require('os').networkInterfaces(); - const sockets = []; - const result = []; + const interfaces = networkInterfaces(); + const sockets: any[] = []; + const result: any[] = []; Object.keys(interfaces).forEach(iName => { - interfaces[iName].forEach(ipInfo => { + interfaces[iName]!.forEach(ipInfo => { if (!ipInfo.internal && ipInfo.family === 'IPv4') { (ip => { const socket = dgram.createSocket({ type: 'udp4', reuseAddr: true }); @@ -116,6 +105,7 @@ function ssdpScan(text, readXml, timeout, callback) { } if (callback) { callback(err, result); + // @ts-expect-error fix it callback = null; } if (socket) { @@ -123,7 +113,7 @@ function ssdpScan(text, readXml, timeout, callback) { } }); - socket.on('message', (msg, rinfo) => { + socket.on('message', (_msg, rinfo) => { /* expected: HTTP/1.1 200 OK CACHE-CONTROL: max-age = 1800 @@ -137,13 +127,13 @@ function ssdpScan(text, readXml, timeout, callback) { X-RINCON-WIFIMODE: 0 X-RINCON-VARIANT: 0 */ - msg = msg ? msg.toString() : ''; + let msg = _msg ? _msg.toString() : ''; msg = msg.replace(/\r\n/g, '\n'); - const device = { ip: rinfo.address }; + const device: Record = { ip: rinfo.address }; if (!result.find(dev => dev.ip === device.ip)) { const lines = msg.split('\n'); - const obj = {}; + const obj: Record = {}; for (let i = 0; i < lines.length; i++) { const pos = lines[i].indexOf(':'); if (pos !== -1) { @@ -161,7 +151,7 @@ function ssdpScan(text, readXml, timeout, callback) { console.error(`No answer from ${device.ip}: ${JSON.stringify(err)}`); } else if (data) { device.xml = data.split('\n'); - device.xml.forEach(line => { + device.xml.forEach((line: string) => { let m = line.match('(.+)'); if (m) { device.manufacturer = m[1]; @@ -206,12 +196,8 @@ function ssdpScan(text, readXml, timeout, callback) { if (callback) { callback(null, result); + // @ts-expect-error fix it callback = null; } }, timeout || 1000); } - -module.exports = { - ssdpScan, - httpGet -}; diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..9157955 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,1295 @@ +/** + * Decode state e.g. for selectInput by searching for state in key and value of the states + * + * @alias decodeState + * @param stateRecord key value pair of states + * @param state state key or value which will be matched + */ +export function decodeState(stateRecord: Record, state: string | number): string { + for (const [id, name] of Object.entries(stateRecord)) { + if (state.toString().toUpperCase() === name.toUpperCase() || id === state.toString()) { + return name; + } + } + return ''; +} + +/** + * Converts user input into sendable volume command + * @param input + */ +export function inputToVol(input: number): string { + let leadingZero: string; + + if (input < 0) { + input = 0; + } + if (input % 0.5 !== 0) { + input = Math.round(input * 2) / 2; + } + if (input < 10) { + leadingZero = '0'; + } else { + leadingZero = ''; + } + + return leadingZero + input.toString().replace('.', ''); +} + +/** + * Convert volume to dB + * + * @alias volToDb + * @param vol volume e. g. '50.5' + * @returns dB + */ +export function volToDb(volStr: string): number { + let vol: number; + if (volStr.length === 3) { + vol = parseInt(volStr) / 10; // "305" -> 30.5 + } else { + vol = parseInt(volStr); + } + + vol -= 50; // Vol to dB + return vol; +} + +/** + * Waits given ms + * + * @param ms + */ +export function wait(ms: number): Promise { + return new Promise(resolve => { + setTimeout(() => { + resolve(); + }, ms); + }); +} + +/** + * Convert dB to volume + * + * @param vol volume in dB e. g. '10.5' + */ +export function dbToVol(vol: string): string { + vol += 50; // dB to vol + vol = vol.toString().replace('.', ''); + return vol; +} + +export const commonCommands: ioBroker.AnyObject[] = [ + { + _id: 'info.friendlyName', + type: 'state', + common: { + role: 'info.name', + name: 'Friendly Name', + type: 'string', + read: true, + write: false + }, + native: {} + }, + { + _id: 'tuner', + type: 'channel', + common: { + name: 'Tuner' + }, + native: {} + }, + { + _id: 'tuner.frequencyUp', + type: 'state', + common: { + name: 'Tuner Frequency Up', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'tuner.frequencyDown', + type: 'state', + common: { + name: 'Tuner Frequency Down', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'tuner.stationName', + type: 'state', + common: { + name: 'Tuner Station Name', + role: 'text', + type: 'string', + write: false, + read: true + }, + native: {} + }, + { + _id: 'tuner.frequency', + type: 'state', + common: { + name: 'Tuner Frequency', + role: 'value', + type: 'number', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain', + type: 'channel', + common: { + name: 'Main Zone' + }, + native: {} + }, + { + _id: 'zoneMain.powerZone', + type: 'state', + common: { + name: 'Main Zone Power State', + role: 'switch.power.zone', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'zoneMain.volume', + type: 'state', + common: { + name: 'Main Volume', + role: 'level.volume', + type: 'number', + read: true, + write: true, + min: 0, + max: 98 + }, + native: {} + }, + { + _id: 'zoneMain.volumeUp', + type: 'state', + common: { + name: 'Volume Up', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.volumeDown', + type: 'state', + common: { + name: 'Volume Down', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.selectInput', + type: 'state', + common: { + name: 'Select input', + role: 'media.input', + type: 'string', + write: true, + read: true, + states: { + 0: 'PHONO', + 1: 'CD', + 2: 'TUNER', + 3: 'DVD', + 4: 'BD', + 5: 'TV', + 6: 'SAT/CBL', + 7: 'MPLAY', + 8: 'GAME', + 9: 'NET', + 10: 'SPOTIFY', + 11: 'LASTFM', + 12: 'IRADIO', + 13: 'SERVER', + 14: 'FAVORITES', + 15: 'AUX1', + 16: 'AUX2', + 17: 'AUX3', + 18: 'AUX4', + 19: 'AUX5', + 20: 'AUX6', + 21: 'AUX7', + 22: 'BT', + 23: 'USB' + } + }, + native: {} + }, + { + _id: 'zoneMain.playPause', + type: 'state', + common: { + name: 'Play/Pause', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.play', + type: 'state', + common: { + name: 'Play', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.pause', + type: 'state', + common: { + name: 'Pause', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.skipPlus', + type: 'state', + common: { + name: 'Next', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.skipMinus', + type: 'state', + common: { + name: 'Previous', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.maximumVolume', + type: 'state', + common: { + name: 'Maximum Volume', + role: 'state', + type: 'number', + write: false, + read: true + }, + native: {} + }, + { + _id: 'zoneMain.muteIndicator', + type: 'state', + common: { + name: 'Muted', + role: 'media.mute', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'zoneMain.quickSelect', + type: 'state', + common: { + name: 'Quick select', + role: 'media.quickSelect', + type: 'number', + write: true, + read: true, + min: 1, + max: 5 + }, + native: {} + }, + { + _id: 'zoneMain.sleepTimer', + type: 'state', + common: { + name: 'Sleep timer', + role: 'level.timer.sleep', + unit: 'min', + type: 'number', + write: true, + read: true, + min: 0, + max: 120 + }, + native: {} + }, + { + _id: 'zoneMain.equalizerBass', + type: 'state', + common: { + name: 'Bass Level', + role: 'level.bass', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: -6, + max: 6 + }, + native: {} + }, + { + _id: 'zoneMain.equalizerBassUp', + type: 'state', + common: { + name: 'Bass Up', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.equalizerBassDown', + type: 'state', + common: { + name: 'Bass Down', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.equalizerTreble', + type: 'state', + common: { + name: 'Treble Level', + role: 'level.treble', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: -6, + max: 6 + }, + native: {} + }, + { + _id: 'zoneMain.equalizerTrebleUp', + type: 'state', + common: { + name: 'Treble Up', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.equalizerTrebleDown', + type: 'state', + common: { + name: 'Treble Down', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeFrontLeft', + type: 'state', + common: { + name: 'Channel Volume Front Left', + role: 'level', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: -12, + max: 12 + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeFrontRight', + type: 'state', + common: { + name: 'Channel Volume Front Right', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeCenter', + type: 'state', + common: { + name: 'Channel Volume Center', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSurroundRight', + type: 'state', + common: { + name: 'Channel Volume Surround Right', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSurroundLeft', + type: 'state', + common: { + name: 'Channel Volume Surround Left', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSurroundDolbyRight', + type: 'state', + common: { + name: 'Channel Volume Surround Dolby Right', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSurroundDolbyLeft', + type: 'state', + common: { + name: 'Channel Volume Surround Dolby Left', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeFrontDolbyLeft', + type: 'state', + common: { + name: 'Channel Volume Front Dolby Left', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeFrontDolbyRight', + type: 'state', + common: { + name: 'Channel Volume Front Dolby Right', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeFrontHeightLeft', + type: 'state', + common: { + name: 'Channel Volume Front Height Left', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeFrontHeightRight', + type: 'state', + common: { + name: 'Channel Volume Front Height Right', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeRearHeightLeft', + type: 'state', + common: { + name: 'Channel Volume Rear Height Left', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeRearHeightRight', + type: 'state', + common: { + name: 'Channel Volume Rear Height Right', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSurroundHeightRight', + type: 'state', + common: { + name: 'Channel Volume Surround Height Right', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSurroundHeightLeft', + type: 'state', + common: { + name: 'Channel Volume Surround Height Left', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSubwoofer', + type: 'state', + common: { + name: 'Channel Volume Subwoofer', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.channelVolumeSubwooferTwo', + type: 'state', + common: { + name: 'Channel Volume Subwoofer Two', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.volumeDB', + type: 'state', + common: { + name: 'Main Volume DB', + role: 'level.volume.main', + type: 'number', + read: true, + write: true, + min: -80, + max: 18, + unit: 'dB' + }, + native: {} + }, + { + _id: 'zoneMain.maximumVolumeDB', + type: 'state', + common: { + name: 'Maximum Volume DB', + role: 'state', + type: 'number', + write: false, + read: true, + unit: 'dB' + }, + native: {} + }, + { + _id: 'settings.surroundMode', + type: 'state', + common: { + name: 'Surround mode', + role: 'state', + type: 'string', + write: true, + read: true, + states: { + 0: 'STEREO', + 1: 'VIRTUAL', + 2: 'VIDEO GAME', + 3: 'MCH STEREO', + 4: 'DTS SURROUND', + 5: 'DOLBY DIGITAL', + 6: 'MOVIE', + 7: 'MUSIC', + 8: 'DIRECT', + 9: 'PURE DIRECT', + 10: 'AUTO', + 11: 'GAME', + 12: 'AURO3D', + 13: 'AURO2DSURR', + 14: 'WIDE SCREEN', + 15: 'SUPER STADIUM', + 16: 'ROCK ARENA', + 17: 'JAZZ CLUB', + 18: 'CLASSIC CONCERT', + 19: 'MONO MOVIE', + 20: 'MATRIX' + } + }, + native: {} + }, + { + _id: 'settings.dynamicEq', + type: 'state', + common: { + name: 'Dynamic Eq', + role: 'switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.subwooferLevelState', + type: 'state', + common: { + name: 'Subwoofer Level State', + desc: 'Subwoofer Level State', + role: 'switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.subwooferLevel', + type: 'state', + common: { + name: 'Subwoofer Level', + role: 'level', + type: 'number', + write: true, + read: true, + min: -12, + max: 12, + unit: 'dB' + }, + native: {} + }, + { + _id: 'settings.subwooferLevelUp', + type: 'state', + common: { + name: 'Subwoofer level Up', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'settings.subwooferLevelDown', + type: 'state', + common: { + name: 'Subwoofer level Down', + role: 'button', + type: 'boolean', + write: true, + read: false + }, + native: {} + }, + { + _id: 'settings.multEq', + type: 'state', + common: { + name: 'Mult EQ', + role: 'level', + type: 'string', + write: true, + read: true, + states: { + 0: 'OFF', + 1: 'AUDYSSEY', + 2: 'BYP.LR', + 3: 'FLAT', + 4: 'MANUAL' + } + }, + native: {} + }, + { + _id: 'settings.dynamicVolume', + type: 'state', + common: { + name: 'Dynamic Volume', + role: 'level', + type: 'string', + write: true, + read: true, + states: { + 0: 'OFF', + 1: 'LIT', + 2: 'MED', + 3: 'HEV' + } + }, + native: {} + }, + { + _id: 'settings.referenceLevelOffset', + type: 'state', + common: { + name: 'Reference Level Offset', + role: 'level', + type: 'string', + write: true, + read: true, + unit: 'dB', + states: { + 0: '0', + 5: '5', + 10: '10', + 15: '15' + } + }, + native: {} + }, + { + _id: 'settings.toneControl', + type: 'state', + common: { + name: 'Tone Control', + role: 'switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.cursorUp', + type: 'state', + common: { + name: 'Cursor Up', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.cursorDown', + type: 'state', + common: { + name: 'Cursor Down', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.cursorRight', + type: 'state', + common: { + name: 'Cursor Right', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.cursorLeft', + type: 'state', + common: { + name: 'Cursor Left', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.enter', + type: 'state', + common: { + name: 'Enter', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.return', + type: 'state', + common: { + name: 'Return', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.option', + type: 'state', + common: { + name: 'Option', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.info', + type: 'state', + common: { + name: 'Info', + role: 'button', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.setupMenu', + type: 'state', + common: { + name: 'Setup Menu', + role: 'switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.centerSpread', + type: 'state', + common: { + name: 'Center Spread', + role: 'switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'info.onlinePresets', + type: 'state', + common: { + name: 'Net Audio Presets', + role: 'presets.json', + type: 'string', + write: false, + read: true, + def: '{}' + }, + native: {} + }, + { + _id: 'settings.savePreset', + type: 'state', + common: { + name: 'Save Net Audio Preset', + role: 'presets.save', + type: 'string', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.loadPreset', + type: 'state', + common: { + name: 'Load Net Audio Preset', + role: 'presets.load', + type: 'string', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.lfeAmount', + type: 'state', + common: { + name: 'LFE Amount', + role: 'level', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: 0, + max: 10 + }, + native: {} + }, + { + _id: 'settings.dialogLevelAdjust', + type: 'state', + common: { + name: 'Dialog Level Adjustment', + role: 'indicator', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'settings.dialogLevel', + type: 'state', + common: { + name: 'Dialog Level', + role: 'level', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: -12, + max: 12 + }, + native: {} + }, + { + _id: 'settings.dialogControl', + type: 'state', + common: { + name: 'Dialog Control', + role: 'level', + type: 'number', + write: true, + read: true, + unit: 'dB', + min: 0, + max: 6 + }, + native: {} + } +]; + +export const usCommandsZone: ioBroker.StateObject[] = [ + { + _id: 'speakerOneVolume', + type: 'state', + common: { + name: 'Speaker One Volume', + role: 'level.volume', + type: 'number', + write: true, + read: true, + min: 0, + max: 99 + }, + native: {} + }, + { + _id: 'speakerTwoVolume', + type: 'state', + common: { + name: 'Speaker Two Volume', + role: 'level.volume', + type: 'number', + write: true, + read: true, + min: 0, + max: 99 + }, + native: {} + }, + { + _id: 'selectInputOne', + type: 'state', + common: { + name: 'Speaker One Select Input', + role: 'media.input', + type: 'string', + write: true, + read: true, + states: { + 0: 'BUS L', + 1: 'BUS R', + 2: 'BUS M', + 3: 'AUX' + } + }, + native: {} + }, + { + _id: 'selectInputTwo', + type: 'state', + common: { + name: 'Speaker Two Select Input', + role: 'media.input', + type: 'string', + write: true, + read: true, + states: { + 0: 'BUS L', + 1: 'BUS R', + 2: 'BUS M', + 3: 'AUX' + } + }, + native: {} + }, + { + _id: 'operationMode', + type: 'state', + common: { + name: 'Operation Mode', + role: 'media.mode', + type: 'string', + write: true, + read: true, + states: { + 0: 'NORMAL', + 1: 'BRIDGED' + } + }, + native: {} + }, + { + _id: 'lowCutFilterSpeakerOne', + type: 'state', + common: { + name: 'Speaker One Channel Low Cut Filter', + role: 'media.switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'lowCutFilterSpeakerTwo', + type: 'state', + common: { + name: 'Speaker Two Channel Low Cut Filter', + role: 'media.switch', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'zoneTurnOnModeChange', + type: 'state', + common: { + name: 'Zone Turn On Mode Change', + role: 'media.status', + type: 'string', + write: true, + read: true, + states: { + 0: 'Constant', + 1: 'Trigger in', + 2: 'Audio signal', + 3: 'Off' + } + }, + native: {} + }, + { + _id: 'triggerInput', + type: 'state', + common: { + name: 'Zone Trigger Input', + role: 'media.input', + type: 'boolean', + write: true, + read: true + }, + native: {} + }, + { + _id: 'audioSignalInput', + type: 'state', + common: { + name: 'Channel Audio Signal Input', + role: 'media.input', + type: 'boolean', + write: true, + read: true + }, + native: {} + } +]; + +export const usCommands: ioBroker.StateObject[] = [ + { + _id: 'settings.powerConfigurationChange', + type: 'state', + common: { + name: 'Power Configuration Change', + role: 'media.status', + type: 'string', + write: true, + read: true, + states: { + 0: 'Power Button', + 1: 'Master Trigger', + 2: 'On Line' + } + }, + native: {} + }, + { + _id: 'settings.masterTriggerInput', + type: 'state', + common: { + name: 'Master Trigger Input', + role: 'media.status', + type: 'boolean', + write: true, + read: true + }, + native: {} + } +]; + +/** + * Tests whether the given variable is a real object and not an Array + * @param it The variable to test + */ +export function isObject(it: any): it is Record { + // This is necessary because: + // typeof null === 'object' + // typeof [] === 'object' + // [] instanceof Object === true + return Object.prototype.toString.call(it) === '[object Object]'; // this code is 25% faster then below one +} diff --git a/main.js b/src/main.js similarity index 96% rename from main.js rename to src/main.js index b49bf7e..91034c9 100755 --- a/main.js +++ b/src/main.js @@ -62,9 +62,9 @@ function startAdapter(options) { client.destroy(); // kill connection client.unref(); // kill connection callback(); - } catch (e) { + } catch { callback(); - } // endTryCatch + } }); adapter.on('message', obj => { @@ -149,8 +149,6 @@ function startAdapter(options) { return handleUsStateChange(id, state); } - let leadingZero; - switch (id) { case 'zoneMain.powerZone': if (state === true) { @@ -159,38 +157,19 @@ function startAdapter(options) { await sendRequest('ZMOFF'); } break; - case 'zoneMain.volume': - if (state < 0) { - state = 0; - } - if (state % 0.5 !== 0) { - state = Math.round(state * 2) / 2; - } - if (state < 10) { - leadingZero = '0'; - } else { - leadingZero = ''; - } - state = state.toString().replace('.', ''); // remove dot - await sendRequest(`MV${leadingZero}${state}`); - adapter.log.debug(`[INFO] <== Changed mainVolume to ${state}`); + case 'zoneMain.volume': { + const vol = helper.inputToVol(state); + await sendRequest(`MV${vol}`); + adapter.log.debug(`[INFO] <== Changed mainVolume to ${vol}`); break; - case 'zoneMain.volumeDB': + } + case 'zoneMain.volumeDB': { state += 80; // convert to Vol - if (state < 0) { - state = 0; - } - if (state % 0.5 !== 0) { - state = Math.round(state * 2) / 2; - } - if (state < 10) { - leadingZero = '0'; - } else { - leadingZero = ''; - } - state = state.toString().replace('.', ''); // remove dot - await sendRequest(`MV${leadingZero}${state}`); + const vol = helper.inputToVol(state); + await sendRequest(`MV${vol}`); + adapter.log.debug(`[INFO] <== Changed mainVolume to ${vol}`); break; + } case 'zoneMain.sleepTimer': if (!state) { // state === 0 @@ -201,7 +180,7 @@ function startAdapter(options) { await sendRequest(`SLP0${state}`); } else if (state <= 120) { await sendRequest(`SLP${state}`); - } // endElseIf + } break; case 'zoneMain.volumeUp': await sendRequest('MVUP'); @@ -214,7 +193,7 @@ function startAdapter(options) { await sendRequest('MUON'); } else { await sendRequest('MUOFF'); - } // endElseIf + } break; case 'zoneMain.playPause': await sendRequest('NS94'); @@ -547,35 +526,11 @@ function startAdapter(options) { await sendRequest(`Z${zoneNumber}DOWN`); break; case 'zone.volume': - if (state < 0) { - state = 0; - } - if (state % 0.5 !== 0) { - state = Math.round(state * 2) / 2; - } - if (state < 10) { - leadingZero = '0'; - } else { - leadingZero = ''; - } - state = state.toString().replace('.', ''); // remove dot - await sendRequest(`Z${zoneNumber}${leadingZero}${state}`); + await sendRequest(`Z${zoneNumber}${helper.inputToVol(state)}`); break; case 'zone.volumeDB': state += 80; // Convert to Vol - if (state < 0) { - state = 0; - } - if (state % 0.5 !== 0) { - state = Math.round(state * 2) / 2; - } - if (state < 10) { - leadingZero = '0'; - } else { - leadingZero = ''; - } - state = state.toString().replace('.', ''); // remove dot - await sendRequest(`Z${zoneNumber}${leadingZero}${state}`); + await sendRequest(`Z${zoneNumber}${helper.inputToVol(state)}`); break; case 'zone.selectInput': { const obj = await adapter.getObjectAsync(`zone${zoneNumber}.selectInput`); @@ -1206,43 +1161,20 @@ async function handleUsStateChange(id, stateVal) { break; case 'speakerOneVolume': { const state = await adapter.getStateAsync(`zone${parseInt(zoneNumber)}.operationMode`); - let leadingZero; if (state.val.toString() === '0' || state.val === 'NORMAL') { zoneNumber = parseInt(zoneNumber) % 2 ? parseInt(zoneNumber) : parseInt(zoneNumber) - 1; zoneNumber = parseInt(zoneNumber) < 10 ? `0${zoneNumber}` : zoneNumber; - } // endIf - if (stateVal < 0) { - stateVal = 0; } - if (stateVal % 0.5 !== 0) { - stateVal = Math.round(stateVal * 2) / 2; - } - if (stateVal < 10) { - leadingZero = '0'; - } else { - leadingZero = ''; - } - stateVal = stateVal.toString().replace('.', ''); // remove dot - await sendRequest(`SV${zoneNumber}${leadingZero}${stateVal}`); - adapter.log.debug(`[INFO] <== Changed mainVolume to ${stateVal}`); + + const vol = helper.inputToVol(stateVal); + await sendRequest(`SV${zoneNumber}${vol}`); + adapter.log.debug(`[INFO] <== Changed speakerOneVolume to ${vol}`); break; } case 'speakerTwoVolume': { - let leadingZero; - if (stateVal < 0) { - stateVal = 0; - } - if (stateVal % 0.5 !== 0) { - stateVal = Math.round(stateVal * 2) / 2; - } - if (stateVal < 10) { - leadingZero = '0'; - } else { - leadingZero = ''; - } - stateVal = stateVal.toString().replace('.', ''); // remove dot - await sendRequest(`SV${zoneNumber}${leadingZero}${stateVal}`); - adapter.log.debug(`[INFO] <== Changed mainVolume to ${stateVal}`); + const vol = helper.inputToVol(stateVal); + await sendRequest(`SV${zoneNumber}${vol}`); + adapter.log.debug(`[INFO] <== Changed speakerTwoVolume to ${vol}`); break; } case 'triggerInput': diff --git a/test/integrationAdapter.js b/test/integrationAdapter.js index c8726f7..34f585f 100644 --- a/test/integrationAdapter.js +++ b/test/integrationAdapter.js @@ -1,22 +1,19 @@ 'use strict'; const path = require('path'); -const {tests} = require('@iobroker/testing'); +const { tests } = require('@iobroker/testing'); // Run tests tests.integration(path.join(__dirname, '..'), { defineAdditionalTests(getHarness) { - describe('Test sendTo()', () => { - it('Should work', () => { return new Promise(resolve => { // Create a fresh harness instance each test! const harness = getHarness(); // Start the adapter and wait until it has started harness.startAdapterAndWait().then(() => { - - harness.sendTo('denon.0', 'browse', 'message', (resp) => { + harness.sendTo('denon.0', 'browse', 'message', resp => { console.dir(resp); resolve(); }); @@ -25,4 +22,4 @@ tests.integration(path.join(__dirname, '..'), { }).timeout(6000); }); } -}); \ No newline at end of file +}); diff --git a/test/packageFiles.js b/test/packageFiles.js index 9806de3..6523fc0 100644 --- a/test/packageFiles.js +++ b/test/packageFiles.js @@ -1,7 +1,7 @@ 'use strict'; const path = require('path'); -const {tests} = require('@iobroker/testing'); +const { tests } = require('@iobroker/testing'); // Run tests -tests.packageFiles(path.join(__dirname, '..')); \ No newline at end of file +tests.packageFiles(path.join(__dirname, '..')); diff --git a/test/unitAdapter.js b/test/unitAdapter.js index 6571f95..04e0efb 100644 --- a/test/unitAdapter.js +++ b/test/unitAdapter.js @@ -1,7 +1,7 @@ -'use strict'; - -const path = require('path'); -const {tests} = require('@iobroker/testing'); - -// Run tests -tests.unit(path.join(__dirname, '..')); \ No newline at end of file +'use strict'; + +const path = require('path'); +const { tests } = require('@iobroker/testing'); + +// Run tests +tests.unit(path.join(__dirname, '..')); diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..f5bbf32 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,17 @@ +// Specialized tsconfig to only compile .ts-files in the src dir +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "allowJs": true, // we also have js + "checkJs": false, + "noEmit": false, + "declaration": true + }, + "include": [ + "src/**/*.ts", + "src/**/*.js" // we also have js currently + ], + "exclude": [ + "src/**/*.test.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..55a9c55 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,52 @@ +// Root tsconfig to set the settings and power editor support for all TS files +{ + "compileOnSave": true, + "compilerOptions": { + // do not compile anything, this file is just to configure type checking + // the compilation is configured in tsconfig.build.json + "noEmit": true, + + // check JS files, but do not compile them => tsconfig.build.json + "allowJs": true, + "checkJs": true, + + "skipLibCheck": true, // Don't report errors in 3rd party definitions + "noEmitOnError": true, + "outDir": "./build/", + "rootDir": "src", + "removeComments": false, + "module": "commonjs", + "moduleResolution": "node", + "esModuleInterop": true, + // this is necessary for the automatic typing of the adapter config + "resolveJsonModule": true, + + // Set this to false if you want to disable the very strict rules (not recommended) + "strict": true, + // Or enable some of those features for more fine-grained control + // "strictNullChecks": true, + // "strictPropertyInitialization": true, + // "strictBindCallApply": true, + // "noImplicitAny": true, + // "noUnusedLocals": true, + // "noUnusedParameters": true, + // Uncomment this if you want the old behavior of catch variables being `any` + // "useUnknownInCatchVariables": false, + + // Consider targetting es2019 or higher if you only support Node.js 12+ + "target": "es2018", + + "sourceMap": true, + "inlineSourceMap": false, + "watch": false + }, + "include": [ + "src/**/*.ts", + "admin/**/*.ts", + "admin/**/*.tsx" + ], + "exclude": [ + "build/**", + "node_modules/**" + ] +}