From 802aa07f7bc74aea6f327953f7a2ae8fe6ec9a07 Mon Sep 17 00:00:00 2001 From: eight04 Date: Sat, 11 Dec 2021 01:33:33 +0800 Subject: [PATCH] WIP: switch to draggable-list --- execution-order/execution-order.css | 9 +- execution-order/execution-order.html | 2 +- execution-order/execution-order.js | 17 +- package-lock.json | 1190 +++++++++++------ package.json | 2 +- tools/build-vendor.js | 4 +- vendor/@eight04/draggable-list/LICENSE | 22 + vendor/@eight04/draggable-list/README.md | 5 + .../dist/draggable-list.iife.js | 2 + vendor/slipjs/LICENSE | 9 - vendor/slipjs/README.md | 5 - vendor/slipjs/slip.js | 971 -------------- 12 files changed, 815 insertions(+), 1423 deletions(-) create mode 100644 vendor/@eight04/draggable-list/LICENSE create mode 100644 vendor/@eight04/draggable-list/README.md create mode 100644 vendor/@eight04/draggable-list/dist/draggable-list.iife.js delete mode 100644 vendor/slipjs/LICENSE delete mode 100644 vendor/slipjs/README.md delete mode 100644 vendor/slipjs/slip.js diff --git a/execution-order/execution-order.css b/execution-order/execution-order.css index 450f60ac..11bdc37a 100644 --- a/execution-order/execution-order.css +++ b/execution-order/execution-order.css @@ -36,7 +36,14 @@ li { cursor: grab; } li:not(:first-child) { - margin-top: -1px; + /* margin-top: -1px; */ +} +.draggable-list-dragging li { + transition: transform .25s ease-in-out; + z-index: 1; +} +li.draggable-list-target { + transition: none; } .dragger::before { content: "\2261" diff --git a/execution-order/execution-order.html b/execution-order/execution-order.html index e7dd2062..db1bed03 100644 --- a/execution-order/execution-order.html +++ b/execution-order/execution-order.html @@ -23,7 +23,7 @@
    - + diff --git a/execution-order/execution-order.js b/execution-order/execution-order.js index 4ea5d12a..89c44c7c 100644 --- a/execution-order/execution-order.js +++ b/execution-order/execution-order.js @@ -1,4 +1,4 @@ -/* global Slip */ +/* global DraggableList */ /* global prefs */ /* global API */ 'use strict'; @@ -7,19 +7,18 @@ const list = (await getOrderedStyles()).map(createLi); const ol = document.querySelector('#style-list'); ol.append(...list.map(l => l.el)); - ol.addEventListener('slip:beforeswipe', e => e.preventDefault()); - ol.addEventListener('slip:beforewait', e => { - if (browser.windows) { - e.preventDefault(); - } + ol.addEventListener('d:dragmove', e => { + e.detail.origin.dataTransfer.dropEffect = 'move'; + e.detail.dragTarget.style.transform = `translateY(${e.detail.currentPos.y - e.detail.startPos.y}px)`; + console.log(e.detail.origin.pageY, e.detail.origin.screenY); }); - ol.addEventListener('slip:reorder', e => { + ol.addEventListener('d:dragend', e => { const [item] = list.splice(e.detail.originalIndex, 1); list.splice(e.detail.spliceIndex, 0, item); - ol.insertBefore(e.target, e.detail.insertBefore); + ol.insertBefore(e.detail.dragTarget, e.detail.insertBefore); prefs.set('styles.order', list.map(l => l.style._id)); }); - new Slip(ol); + new DraggableList(ol); document.querySelector('#main').classList.add('ready'); document.querySelector('.closer').addEventListener('click', () => { diff --git a/package-lock.json b/package-lock.json index 27917982..bcc233fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "version": "1.5.22", "license": "GPL-3.0-only", "dependencies": { + "@eight04/draggable-list": "^0.2.0", "codemirror": "5.63.3", "db-to-cloud": "^0.7.0", "jsonlint": "^1.6.3", "less-bundle": "github:openstyles/less-bundle#v0.1.0", "lz-string-unsafe": "^1.4.4-fork-1", - "slipjs": "github:kornelski/slip", "stylelint-bundle": "^13.8.0", "stylus-lang-bundle": "github:openstyles/stylus-lang-bundle#v0.54.7", "usercss-meta": "^0.12.0", @@ -347,6 +347,14 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/@eight04/draggable-list": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eight04/draggable-list/-/draggable-list-0.2.0.tgz", + "integrity": "sha512-RphV30fMoYQ6O154qnDOirA13c/Da5/xrKcNZLomo9qHC8fzNFDyJjZOynpdXKXL/4dMaZGiX/tn5lpmes8JQw==", + "engines": { + "node": ">=8" + } + }, "node_modules/@eight04/read-write-lock": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@eight04/read-write-lock/-/read-write-lock-0.1.0.tgz", @@ -419,9 +427,9 @@ "dev": true }, "node_modules/@mdn/browser-compat-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.0.5.tgz", - "integrity": "sha512-KPSNaHUl5aikqsQU7LpBntFzaPbhm5OJxD88Wv00OKDc4wudyid2wDFqLeb7VcYT9x5bND8PPFloWdK5DY0pHA==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.0.11.tgz", + "integrity": "sha512-rmQPBLe3/DuJy0Bcr1KNuSiIcgV67R2AeLxagKMQTI0R8F9lLC894wJRYhA5ytV0CIi7dzxILqdFeuVbqrkoCA==", "dev": true }, "node_modules/@nodelib/fs.scandir": { @@ -566,9 +574,9 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, "node_modules/@types/node": { - "version": "16.11.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", - "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==", + "version": "16.11.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -610,9 +618,9 @@ } }, "node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -631,26 +639,25 @@ } }, "node_modules/addons-linter": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-3.20.0.tgz", - "integrity": "sha512-rHaahIZ34HSL1D7ZYCMs/QQPOp0pAnsOMqtNSy/zDSrkgVtlCQvSeMpx1a3ZnE2pGRVHjMIO506KWUmrN1lPRw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-4.4.0.tgz", + "integrity": "sha512-2N8oo97y2w2MJX/bcvnSb5BG2s+0BOlOu/0Q06wp5bnyEwWbfKFOVX/CorivGkRteY0fbSUWvU55LXgIiLyH5w==", "dev": true, "dependencies": { - "@mdn/browser-compat-data": "4.0.5", + "@mdn/browser-compat-data": "4.0.11", "addons-moz-compare": "1.2.0", - "addons-scanner-utils": "5.0.0", + "addons-scanner-utils": "6.1.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.2", "cheerio": "1.0.0-rc.10", "columnify": "1.5.4", - "common-tags": "1.8.0", + "common-tags": "1.8.2", "deepmerge": "4.2.2", - "dispensary": "0.62.0", - "eslint": "7.32.0", - "eslint-plugin-no-unsanitized": "3.1.5", - "eslint-visitor-keys": "3.0.0", - "espree": "9.0.0", + "eslint": "8.3.0", + "eslint-plugin-no-unsanitized": "4.0.0", + "eslint-visitor-keys": "3.1.0", + "espree": "9.1.0", "esprima": "4.0.1", "fluent-syntax": "0.13.0", "glob": "7.2.0", @@ -658,11 +665,12 @@ "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.13.3", - "postcss": "8.3.9", + "pino": "7.4.0", + "postcss": "8.3.11", "relaxed-json": "1.0.3", "semver": "7.3.5", - "source-map-support": "0.5.20", + "sha.js": "2.4.11", + "source-map-support": "0.5.21", "tosource": "1.0.0", "upath": "2.0.1", "yargs": "17.2.1", @@ -675,15 +683,227 @@ "node": ">=12.21.0" } }, + "node_modules/addons-linter/node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "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/addons-linter/node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "dev": true, + "dependencies": { + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/addons-linter/node_modules/@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/addons-linter/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/addons-linter/node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/addons-linter/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/addons-linter/node_modules/eslint": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", + "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.4", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.1.0", + "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": "^4.0.6", + "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", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "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/addons-linter/node_modules/eslint-plugin-no-unsanitized": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.0.tgz", + "integrity": "sha512-Wguc3EZS+7BJ/Pgu8C1/G86eXHUIRz4ZHEhPlwVkS42MbHEyfh8Wm+pDRVAg73EE0TR//SbjkPlHr93yLJT10g==", + "dev": true, + "peerDependencies": { + "eslint": "^6 || ^7 || ^8" + } + }, + "node_modules/addons-linter/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/addons-linter/node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/addons-linter/node_modules/eslint/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/addons-linter/node_modules/eslint/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/addons-linter/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/addons-linter/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/addons-linter/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/addons-linter/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -711,6 +931,16 @@ "node": ">=10" } }, + "node_modules/addons-linter/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/addons-linter/node_modules/yargs": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", @@ -736,9 +966,9 @@ "dev": true }, "node_modules/addons-scanner-utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-5.0.0.tgz", - "integrity": "sha512-uENKmGryUeR07I1c8RonDZY/bkAG+zKfZ3T61JFusgY5wiARQJ5+8hI33m8sctXxPopjfxiIjHsG/g7cQzn4Yw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-6.1.0.tgz", + "integrity": "sha512-O9rObtOmnMI1qBmHH2RlV+H3vAJWm594bbxbFYEkYeqSUkXd0Ohzjwnv1af4GFDlrBK6wB8TS0+/2X/zB8+LnA==", "dev": true, "dependencies": { "@types/yauzl": "2.9.2", @@ -953,12 +1183,6 @@ "node": ">=8" } }, - "node_modules/array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -966,18 +1190,6 @@ "dev": true, "peer": true }, - "node_modules/array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "node_modules/array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1668,9 +1880,9 @@ ] }, "node_modules/cheerio-select/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -1732,9 +1944,9 @@ ] }, "node_modules/cheerio/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -1795,9 +2007,9 @@ "dev": true }, "node_modules/chrome-launcher": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.14.0.tgz", - "integrity": "sha512-W//HpflaW6qBGrmuskup7g+XJZN6w03ko9QSIe5CtcTal2u0up5SeReK3Ll1Why4Ey8dPkv8XSodZyHPnGbVHQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", "dev": true, "dependencies": { "@types/node": "*", @@ -1805,6 +2017,9 @@ "is-wsl": "^2.2.0", "lighthouse-logger": "^1.0.0" }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, "engines": { "node": ">=12.13.0" } @@ -2250,9 +2465,9 @@ ] }, "node_modules/css-select/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -2341,9 +2556,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -2755,50 +2970,6 @@ "node": ">=8" } }, - "node_modules/dispensary": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", - "integrity": "sha512-x8vqPX7owhzDp3Y6t/iOuTuNoWx5hlZKITlzlybETsZoY05cYDubGpwt0soLfRLAWLuxX1lq0lTc/vXtk/CDCw==", - "dev": true, - "dependencies": { - "async": "~3.2.0", - "natural-compare-lite": "~1.4.0", - "pino": "~6.11.0", - "request": "~2.88.0", - "sha.js": "~2.4.4", - "source-map-support": "~0.5.4", - "yargs": "~16.2.0" - }, - "bin": { - "dispensary": "bin/dispensary" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/dispensary/node_modules/async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", - "dev": true - }, - "node_modules/dispensary/node_modules/pino": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.3.tgz", - "integrity": "sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw==", - "dev": true, - "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - }, - "bin": { - "pino": "bin.js" - } - }, "node_modules/docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", @@ -2900,6 +3071,18 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -3108,15 +3291,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-no-unsanitized": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.5.tgz", - "integrity": "sha512-s/6w++p1590h/H/dE2Wo660bOkaM/3OEK14Y7xm1UT0bafxkKw1Cq0ksjxkxLdH/WWd014DlsLKuD6CyNrR2Dw==", - "dev": true, - "peerDependencies": { - "eslint": "^5 || ^6 || ^7" - } - }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -3210,12 +3384,6 @@ "node": ">=4" } }, - "node_modules/eslint/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/eslint/node_modules/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -3223,23 +3391,23 @@ "dev": true }, "node_modules/espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", + "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", "dev": true, "dependencies": { - "acorn": "^8.5.0", + "acorn": "^8.6.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "eslint-visitor-keys": "^3.1.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3488,9 +3656,9 @@ ] }, "node_modules/fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + "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==" }, "node_modules/fast-glob": { "version": "3.2.4", @@ -3565,12 +3733,6 @@ "node": ">=6" } }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -3705,9 +3867,9 @@ } }, "node_modules/firefox-profile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.1.tgz", - "integrity": "sha512-KyA5ruS7V1nXpaHlJrKPW1jkoc9bq/WKquaKuca/ETembuxcBQPEPpxAp0biwjQCPf3sBslN/heZLdfa5Eotzg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.2.tgz", + "integrity": "sha512-3kI17Xl9dL9AeRkpV1yahsJ+UbekkPtlQswKrIsTY1NLgxtEOR4R19rjGGz5+7/rP8Jt6fvxHk+Bai9R6Eai3w==", "dev": true, "dependencies": { "adm-zip": "~0.5.x", @@ -3750,12 +3912,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", - "dev": true - }, "node_modules/flatted": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", @@ -3887,13 +4043,13 @@ "dev": true }, "node_modules/fx-runner": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.1.0.tgz", - "integrity": "sha512-v/Eo69DDFW30zPdvjCYVXddjVvLy2xGeRbg0S18bPd8kEc0q9VsDoDkjyOxY5lTZsAqcQGy0OWjs3HCfRVBNSg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.2.0.tgz", + "integrity": "sha512-/zR9BmHF8h4OaVJ+fHHJBv/5FdPV9mjOAPIscQZbAijm7Aa15Ls/P8UBHD5OKU5jwu2niTxkkzzHKITE7oCMoQ==", "dev": true, "dependencies": { "commander": "2.9.0", - "shell-quote": "1.6.1", + "shell-quote": "1.7.3", "spawn-sync": "1.0.15", "when": "3.7.7", "which": "1.2.4", @@ -4757,11 +4913,14 @@ } }, "node_modules/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==", "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-hexadecimal": { @@ -5086,15 +5245,6 @@ "universalify": "^1.0.0" } }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/jsonlint": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", @@ -5998,12 +6148,6 @@ "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": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", - "dev": true - }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -6259,6 +6403,12 @@ "integrity": "sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w==", "dev": true }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "dev": true + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -6700,9 +6850,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.2.2", @@ -6749,36 +6899,50 @@ } }, "node_modules/pino": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.3.tgz", - "integrity": "sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.4.0.tgz", + "integrity": "sha512-qEHLtKcmYcid6s2qjlGTxaLe9Lq1IiGmd74IZb9Obi/FRTaA+ymb8FD/cmOIL4vt6ug/EtmhGwxZbiGhI+7cuQ==", "dev": true, "dependencies": { "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", "fastify-warning": "^0.2.0", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", + "get-caller-file": "^2.0.5", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.13.0" }, "bin": { "pino": "bin.js" } }, + "node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "dev": true, + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, "node_modules/pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", "dev": true }, "node_modules/postcss": { - "version": "8.3.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", - "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", "dependencies": { - "nanoid": "^3.1.28", - "picocolors": "^0.2.1", + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", "source-map-js": "^0.6.2" }, "engines": { @@ -7296,6 +7460,15 @@ "util-deprecate": "^1.0.1" } }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -7331,10 +7504,16 @@ } }, "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true + "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/registry-auth-token": { "version": "4.2.1", @@ -7605,6 +7784,15 @@ "dev": true, "optional": true }, + "node_modules/safe-stable-stringify": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7765,16 +7953,10 @@ "dev": true }, "node_modules/shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "dependencies": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true }, "node_modules/shellwords": { "version": "0.1.1", @@ -7859,11 +8041,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/slipjs": { - "version": "3.0.0", - "resolved": "git+ssh://git@github.com/kornelski/slip.git#91c24e460dbadb9e0dc40daf93fd01928bfac94d", - "license": "BSD-2-Clause" - }, "node_modules/smart-buffer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", @@ -7892,13 +8069,12 @@ } }, "node_modules/sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.4.1.tgz", + "integrity": "sha512-WgtVLfGl347/zS1oTuLaOAvVD5zijgjphAJHgbbnBJGgexnr+C1ULSj0j7ftoGxpuxR4PaV635NkwFemG8m/5w==", "dev": true, "dependencies": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" + "atomic-sleep": "^1.0.0" } }, "node_modules/sort-keys": { @@ -8039,6 +8215,15 @@ "node": "*" } }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -8092,6 +8277,12 @@ "node": ">= 0.6" } }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, "node_modules/stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -8632,6 +8823,15 @@ "node": ">=0.8" } }, + "node_modules/thread-stream": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.13.0.tgz", + "integrity": "sha512-kTMZeX4Dzlb1zZ00/01aerGaTw2i8NE4sWF0TvF1uXewRhCiUjCvatQkvxIvFqauWG2ADFS2Wpd3qBeYL9i3dg==", + "dev": true, + "dependencies": { + "real-require": "^0.1.0" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -9242,24 +9442,24 @@ } }, "node_modules/web-ext": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.5.0.tgz", - "integrity": "sha512-71DE73YkxKEyiy1O5Ei5Uy1ZCT0tOPriPWIkH3g+mpnd52Gr1u2buexpq2upATekhc1Mu87d9EmRqXg2Kqhszw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.6.0.tgz", + "integrity": "sha512-ja9kuCleKQLesUEx+tEl6ByxwVF1CVCjSc3V0ag78S40NWDRTBJhXwc4c+qlyZ0h/XefXc3waxnsq1izUBe/Nw==", "dev": true, "dependencies": { "@babel/runtime": "7.13.9", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "3.20.0", + "addons-linter": "4.4.0", "bunyan": "1.8.15", "camelcase": "6.2.0", - "chrome-launcher": "0.14.0", + "chrome-launcher": "0.15.0", "debounce": "1.2.0", "decamelize": "5.0.0", "es6-error": "4.1.1", "event-to-promise": "0.8.0", - "firefox-profile": "4.2.1", + "firefox-profile": "4.2.2", "fs-extra": "9.1.0", - "fx-runner": "1.1.0", + "fx-runner": "1.2.0", "import-fresh": "3.3.0", "mkdirp": "1.0.4", "multimatch": "5.0.0", @@ -9878,6 +10078,11 @@ } } }, + "@eight04/draggable-list": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eight04/draggable-list/-/draggable-list-0.2.0.tgz", + "integrity": "sha512-RphV30fMoYQ6O154qnDOirA13c/Da5/xrKcNZLomo9qHC8fzNFDyJjZOynpdXKXL/4dMaZGiX/tn5lpmes8JQw==" + }, "@eight04/read-write-lock": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@eight04/read-write-lock/-/read-write-lock-0.1.0.tgz", @@ -9937,9 +10142,9 @@ "dev": true }, "@mdn/browser-compat-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.0.5.tgz", - "integrity": "sha512-KPSNaHUl5aikqsQU7LpBntFzaPbhm5OJxD88Wv00OKDc4wudyid2wDFqLeb7VcYT9x5bND8PPFloWdK5DY0pHA==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.0.11.tgz", + "integrity": "sha512-rmQPBLe3/DuJy0Bcr1KNuSiIcgV67R2AeLxagKMQTI0R8F9lLC894wJRYhA5ytV0CIi7dzxILqdFeuVbqrkoCA==", "dev": true }, "@nodelib/fs.scandir": { @@ -10061,9 +10266,9 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, "@types/node": { - "version": "16.11.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", - "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==", + "version": "16.11.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", "dev": true }, "@types/normalize-package-data": { @@ -10102,9 +10307,9 @@ } }, "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true }, "acorn-jsx": { @@ -10115,26 +10320,25 @@ "requires": {} }, "addons-linter": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-3.20.0.tgz", - "integrity": "sha512-rHaahIZ34HSL1D7ZYCMs/QQPOp0pAnsOMqtNSy/zDSrkgVtlCQvSeMpx1a3ZnE2pGRVHjMIO506KWUmrN1lPRw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-4.4.0.tgz", + "integrity": "sha512-2N8oo97y2w2MJX/bcvnSb5BG2s+0BOlOu/0Q06wp5bnyEwWbfKFOVX/CorivGkRteY0fbSUWvU55LXgIiLyH5w==", "dev": true, "requires": { - "@mdn/browser-compat-data": "4.0.5", + "@mdn/browser-compat-data": "4.0.11", "addons-moz-compare": "1.2.0", - "addons-scanner-utils": "5.0.0", + "addons-scanner-utils": "6.1.0", "ajv": "6.12.6", "ajv-merge-patch": "4.1.0", "chalk": "4.1.2", "cheerio": "1.0.0-rc.10", "columnify": "1.5.4", - "common-tags": "1.8.0", + "common-tags": "1.8.2", "deepmerge": "4.2.2", - "dispensary": "0.62.0", - "eslint": "7.32.0", - "eslint-plugin-no-unsanitized": "3.1.5", - "eslint-visitor-keys": "3.0.0", - "espree": "9.0.0", + "eslint": "8.3.0", + "eslint-plugin-no-unsanitized": "4.0.0", + "eslint-visitor-keys": "3.1.0", + "espree": "9.1.0", "esprima": "4.0.1", "fluent-syntax": "0.13.0", "glob": "7.2.0", @@ -10142,23 +10346,189 @@ "is-mergeable-object": "1.1.1", "jed": "1.1.1", "os-locale": "5.0.0", - "pino": "6.13.3", - "postcss": "8.3.9", + "pino": "7.4.0", + "postcss": "8.3.11", "relaxed-json": "1.0.3", "semver": "7.3.5", - "source-map-support": "0.5.20", + "sha.js": "2.4.11", + "source-map-support": "0.5.21", "tosource": "1.0.0", "upath": "2.0.1", "yargs": "17.2.1", "yauzl": "2.10.0" }, "dependencies": { - "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "espree": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "dev": true, + "requires": { + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "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 }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "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 + }, + "eslint": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", + "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.4", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.1.0", + "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": "^4.0.6", + "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", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "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, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "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 + } + } + } + } + }, + "eslint-plugin-no-unsanitized": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.0.tgz", + "integrity": "sha512-Wguc3EZS+7BJ/Pgu8C1/G86eXHUIRz4ZHEhPlwVkS42MbHEyfh8Wm+pDRVAg73EE0TR//SbjkPlHr93yLJT10g==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "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, + "requires": { + "is-glob": "^4.0.3" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -10177,6 +10547,16 @@ "lru-cache": "^6.0.0" } }, + "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, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "yargs": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", @@ -10201,9 +10581,9 @@ "dev": true }, "addons-scanner-utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-5.0.0.tgz", - "integrity": "sha512-uENKmGryUeR07I1c8RonDZY/bkAG+zKfZ3T61JFusgY5wiARQJ5+8hI33m8sctXxPopjfxiIjHsG/g7cQzn4Yw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-6.1.0.tgz", + "integrity": "sha512-O9rObtOmnMI1qBmHH2RlV+H3vAJWm594bbxbFYEkYeqSUkXd0Ohzjwnv1af4GFDlrBK6wB8TS0+/2X/zB8+LnA==", "dev": true, "requires": { "@types/yauzl": "2.9.2", @@ -10390,12 +10770,6 @@ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -10403,18 +10777,6 @@ "dev": true, "peer": true }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -10970,9 +11332,9 @@ "dev": true }, "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -11040,9 +11402,9 @@ "dev": true }, "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -11074,9 +11436,9 @@ "dev": true }, "chrome-launcher": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.14.0.tgz", - "integrity": "sha512-W//HpflaW6qBGrmuskup7g+XJZN6w03ko9QSIe5CtcTal2u0up5SeReK3Ll1Why4Ey8dPkv8XSodZyHPnGbVHQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", "dev": true, "requires": { "@types/node": "*", @@ -11459,9 +11821,9 @@ "dev": true }, "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -11522,9 +11884,9 @@ "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -11861,43 +12223,6 @@ "path-type": "^4.0.0" } }, - "dispensary": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.62.0.tgz", - "integrity": "sha512-x8vqPX7owhzDp3Y6t/iOuTuNoWx5hlZKITlzlybETsZoY05cYDubGpwt0soLfRLAWLuxX1lq0lTc/vXtk/CDCw==", - "dev": true, - "requires": { - "async": "~3.2.0", - "natural-compare-lite": "~1.4.0", - "pino": "~6.11.0", - "request": "~2.88.0", - "sha.js": "~2.4.4", - "source-map-support": "~0.5.4", - "yargs": "~16.2.0" - }, - "dependencies": { - "async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", - "dev": true - }, - "pino": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.3.tgz", - "integrity": "sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw==", - "dev": true, - "requires": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - } - } - } - }, "docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", @@ -11989,6 +12314,18 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -12210,12 +12547,6 @@ } } }, - "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 - }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -12224,13 +12555,6 @@ } } }, - "eslint-plugin-no-unsanitized": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.5.tgz", - "integrity": "sha512-s/6w++p1590h/H/dE2Wo660bOkaM/3OEK14Y7xm1UT0bafxkKw1Cq0ksjxkxLdH/WWd014DlsLKuD6CyNrR2Dw==", - "dev": true, - "requires": {} - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -12257,20 +12581,20 @@ "dev": true }, "espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", + "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", "dev": true, "requires": { - "acorn": "^8.5.0", + "acorn": "^8.6.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "eslint-visitor-keys": "^3.1.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true } } @@ -12478,9 +12802,9 @@ "dev": true }, "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + "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==" }, "fast-glob": { "version": "3.2.4", @@ -12547,12 +12871,6 @@ "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==", "dev": true }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, "fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -12668,9 +12986,9 @@ } }, "firefox-profile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.1.tgz", - "integrity": "sha512-KyA5ruS7V1nXpaHlJrKPW1jkoc9bq/WKquaKuca/ETembuxcBQPEPpxAp0biwjQCPf3sBslN/heZLdfa5Eotzg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.2.tgz", + "integrity": "sha512-3kI17Xl9dL9AeRkpV1yahsJ+UbekkPtlQswKrIsTY1NLgxtEOR4R19rjGGz5+7/rP8Jt6fvxHk+Bai9R6Eai3w==", "dev": true, "requires": { "adm-zip": "~0.5.x", @@ -12703,12 +13021,6 @@ "rimraf": "^3.0.2" } }, - "flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", - "dev": true - }, "flatted": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", @@ -12824,13 +13136,13 @@ "dev": true }, "fx-runner": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.1.0.tgz", - "integrity": "sha512-v/Eo69DDFW30zPdvjCYVXddjVvLy2xGeRbg0S18bPd8kEc0q9VsDoDkjyOxY5lTZsAqcQGy0OWjs3HCfRVBNSg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.2.0.tgz", + "integrity": "sha512-/zR9BmHF8h4OaVJ+fHHJBv/5FdPV9mjOAPIscQZbAijm7Aa15Ls/P8UBHD5OKU5jwu2niTxkkzzHKITE7oCMoQ==", "dev": true, "requires": { "commander": "2.9.0", - "shell-quote": "1.6.1", + "shell-quote": "1.7.3", "spawn-sync": "1.0.15", "when": "3.7.7", "which": "1.2.4", @@ -13490,9 +13802,9 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "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==", "requires": { "is-extglob": "^2.1.1" } @@ -13749,12 +14061,6 @@ "universalify": "^1.0.0" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsonlint": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", @@ -14525,12 +14831,6 @@ "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": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", - "dev": true - }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -14735,6 +15035,12 @@ "integrity": "sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w==", "dev": true }, + "on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "dev": true + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -15080,9 +15386,9 @@ "dev": true }, "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.2.2", @@ -15114,33 +15420,47 @@ } }, "pino": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.3.tgz", - "integrity": "sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.4.0.tgz", + "integrity": "sha512-qEHLtKcmYcid6s2qjlGTxaLe9Lq1IiGmd74IZb9Obi/FRTaA+ymb8FD/cmOIL4vt6ug/EtmhGwxZbiGhI+7cuQ==", "dev": true, "requires": { "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", "fastify-warning": "^0.2.0", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", + "get-caller-file": "^2.0.5", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.13.0" + } + }, + "pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "dev": true, + "requires": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" } }, "pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", "dev": true }, "postcss": { - "version": "8.3.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", - "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", "requires": { - "nanoid": "^3.1.28", - "picocolors": "^0.2.1", + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", "source-map-js": "^0.6.2" } }, @@ -15559,6 +15879,12 @@ "util-deprecate": "^1.0.1" } }, + "real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "dev": true + }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -15585,9 +15911,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "registry-auth-token": { @@ -15789,6 +16115,12 @@ "dev": true, "optional": true }, + "safe-stable-stringify": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "dev": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -15933,16 +16265,10 @@ "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true }, "shellwords": { "version": "0.1.1", @@ -16011,10 +16337,6 @@ } } }, - "slipjs": { - "version": "git+ssh://git@github.com/kornelski/slip.git#91c24e460dbadb9e0dc40daf93fd01928bfac94d", - "from": "slipjs@kornelski/slip" - }, "smart-buffer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", @@ -16043,13 +16365,12 @@ } }, "sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.4.1.tgz", + "integrity": "sha512-WgtVLfGl347/zS1oTuLaOAvVD5zijgjphAJHgbbnBJGgexnr+C1ULSj0j7ftoGxpuxR4PaV635NkwFemG8m/5w==", "dev": true, "requires": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" + "atomic-sleep": "^1.0.0" } }, "sort-keys": { @@ -16173,6 +16494,12 @@ "through": "2" } }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -16212,6 +16539,12 @@ "dev": true, "peer": true }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, "stream-to-array": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", @@ -16670,6 +17003,15 @@ "thenify": ">= 3.1.0 < 4" } }, + "thread-stream": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.13.0.tgz", + "integrity": "sha512-kTMZeX4Dzlb1zZ00/01aerGaTw2i8NE4sWF0TvF1uXewRhCiUjCvatQkvxIvFqauWG2ADFS2Wpd3qBeYL9i3dg==", + "dev": true, + "requires": { + "real-require": "^0.1.0" + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -17133,24 +17475,24 @@ } }, "web-ext": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.5.0.tgz", - "integrity": "sha512-71DE73YkxKEyiy1O5Ei5Uy1ZCT0tOPriPWIkH3g+mpnd52Gr1u2buexpq2upATekhc1Mu87d9EmRqXg2Kqhszw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-6.6.0.tgz", + "integrity": "sha512-ja9kuCleKQLesUEx+tEl6ByxwVF1CVCjSc3V0ag78S40NWDRTBJhXwc4c+qlyZ0h/XefXc3waxnsq1izUBe/Nw==", "dev": true, "requires": { "@babel/runtime": "7.13.9", "@devicefarmer/adbkit": "2.11.3", - "addons-linter": "3.20.0", + "addons-linter": "4.4.0", "bunyan": "1.8.15", "camelcase": "6.2.0", - "chrome-launcher": "0.14.0", + "chrome-launcher": "0.15.0", "debounce": "1.2.0", "decamelize": "5.0.0", "es6-error": "4.1.1", "event-to-promise": "0.8.0", - "firefox-profile": "4.2.1", + "firefox-profile": "4.2.2", "fs-extra": "9.1.0", - "fx-runner": "1.1.0", + "fx-runner": "1.2.0", "import-fresh": "3.3.0", "mkdirp": "1.0.4", "multimatch": "5.0.0", diff --git a/package.json b/package.json index 74cdd08a..a4b3b52e 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,12 @@ "codemirror": "WARNING! Always use an exact version and test it for a while before releasing" }, "dependencies": { + "@eight04/draggable-list": "^0.2.0", "codemirror": "5.63.3", "db-to-cloud": "^0.7.0", "jsonlint": "^1.6.3", "less-bundle": "github:openstyles/less-bundle#v0.1.0", "lz-string-unsafe": "^1.4.4-fork-1", - "slipjs": "github:kornelski/slip", "stylelint-bundle": "^13.8.0", "stylus-lang-bundle": "github:openstyles/stylus-lang-bundle#v0.54.7", "usercss-meta": "^0.12.0", diff --git a/tools/build-vendor.js b/tools/build-vendor.js index 8a1d3113..2091f0f8 100644 --- a/tools/build-vendor.js +++ b/tools/build-vendor.js @@ -60,8 +60,8 @@ const files = { 'webext-launch-web-auth-flow': [ 'dist/webext-launch-web-auth-flow.min.js → webext-launch-web-auth-flow.min.js', ], - 'slipjs': [ - 'slip.js', + '@eight04/draggable-list': [ + 'dist/draggable-list.iife.js', ], }; diff --git a/vendor/@eight04/draggable-list/LICENSE b/vendor/@eight04/draggable-list/LICENSE new file mode 100644 index 00000000..59f7f0e8 --- /dev/null +++ b/vendor/@eight04/draggable-list/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2021 eight + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/vendor/@eight04/draggable-list/README.md b/vendor/@eight04/draggable-list/README.md new file mode 100644 index 00000000..9fc32899 --- /dev/null +++ b/vendor/@eight04/draggable-list/README.md @@ -0,0 +1,5 @@ +## @eight04/draggable-list v0.2.0 + +Following files are copied from npm (node_modules): + +* dist\draggable-list.iife.js diff --git a/vendor/@eight04/draggable-list/dist/draggable-list.iife.js b/vendor/@eight04/draggable-list/dist/draggable-list.iife.js new file mode 100644 index 00000000..98884e4e --- /dev/null +++ b/vendor/@eight04/draggable-list/dist/draggable-list.iife.js @@ -0,0 +1,2 @@ +var DraggableList=function(){"use strict";return function(t){for(const e of t.children)e.draggable=!0;new MutationObserver((t=>{for(const e of t)for(const t of e.addedNodes)t.draggable=!0})).observe(t,{childList:!0});let e=null,r=0,a=0,s=null,n=[],o=null,d=!1;function l(r,a,n){const d={origin:r,startPos:e,currentPos:s,dragTarget:o};n&&Object.assign(d,n),t.dispatchEvent(new CustomEvent(a,{detail:d}))}t.addEventListener("dragstart",(i=>{if(i.target.parentNode!==t)return;o=i.target,d=!1,e={x:i.pageX,y:i.pageY},r=[...t.children].indexOf(i.target),a=r,s=e;const g=window.scrollY;n=[...t.children].map((t=>{const e=t.getBoundingClientRect();return{top:e.top+g,bottom:e.bottom+g}})),o.classList.add("draggable-list-target"),t.classList.add("draggable-list-dragging"),l(i,"d:dragstart")})),t.addEventListener("dragenter",(t=>{o&&(t.preventDefault(),l(t,"d:dragmove"))})),t.addEventListener("dragover",(e=>{if(!o)return;e.preventDefault();const d={x:e.pageX,y:e.pageY};a=function(t,e,r,a,s,n){if(n>a)for(let a=s;an);a++)ar&&e[a].top=0&&!(e[a].bottomr&&e[a].top>n&&t[a].classList.contains("draggable-list-transformed")?(t[a].classList.remove("draggable-list-transformed"),t[a].style=""):an&&!t[a].classList.contains("draggable-list-transformed")&&(t[a].classList.add("draggable-list-transformed"),t[a].style.transform="translateY(".concat(e[r].bottom-e[r-1].bottom,"px)")),s=a;return s}(t.children,n,r,s.y,a,d.y),s=d,l(e,"d:dragmove")})),document.addEventListener("dragend",(e=>{if(o){for(const e of t.children)e.classList.remove("draggable-list-transformed"),e.style="";o.classList.remove("draggable-list-target"),t.classList.remove("draggable-list-dragging"),l(e,"d:dragend",{originalIndex:r,spliceIndex:a,insertBefore:a{o&&(d=!0,t.preventDefault())}))}}(); +//# sourceMappingURL=draggable-list.iife.js.map diff --git a/vendor/slipjs/LICENSE b/vendor/slipjs/LICENSE deleted file mode 100644 index b37cfccf..00000000 --- a/vendor/slipjs/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (c) 2014-2021 Kornel Lesiński. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/slipjs/README.md b/vendor/slipjs/README.md deleted file mode 100644 index 46b7411e..00000000 --- a/vendor/slipjs/README.md +++ /dev/null @@ -1,5 +0,0 @@ -## slipjs v3.0.0 - -Following files are copied from npm (node_modules): - -* slip.js diff --git a/vendor/slipjs/slip.js b/vendor/slipjs/slip.js deleted file mode 100644 index ed291b02..00000000 --- a/vendor/slipjs/slip.js +++ /dev/null @@ -1,971 +0,0 @@ -/* - Slip - swiping and reordering in lists of elements on touch screens, no fuss. - - Fires these events on list elements: - - • slip:swipe - When swipe has been done and user has lifted finger off the screen. - If you execute event.preventDefault() the element will be animated back to original position. - Otherwise it will be animated off the list and set to display:none. - - • slip:beforeswipe - Fired before first swipe movement starts. - If you execute event.preventDefault() then element will not move at all. - - • slip:cancelswipe - Fired after the user has started to swipe, but lets go without actually swiping left or right. - - • slip:animateswipe - Fired while swiping, before the user has let go of the element. - event.detail.x contains the amount of movement in the x direction. - If you execute event.preventDefault() then the element will not move to this position. - This can be useful for saturating the amount of swipe, or preventing movement in one direction, but allowing it in the other. - - • slip:reorder - Element has been dropped in new location. event.detail contains the following: - • insertBefore: DOM node before which element has been dropped (null is the end of the list). Use with node.insertBefore(). - • spliceIndex: Index of element before which current element has been dropped, not counting the element iself. - For use with Array.splice() if the list is reflecting objects in some array. - • originalIndex: The original index of the element before it was reordered. - - • slip:beforereorder - When reordering movement starts. - Element being reordered gets class `slip-reordering`. - If you execute event.preventDefault() then the element will not move at all. - - • slip:beforewait - If you execute event.preventDefault() then reordering will begin immediately, blocking ability to scroll the page. - - • slip:tap - When element was tapped without being swiped/reordered. You can check `event.target` to limit that behavior to drag handles. - - - Usage: - - CSS: - You should set `user-select:none` (and WebKit prefixes, sigh) on list elements, - otherwise unstoppable and glitchy text selection in iOS will get in the way. - - You should set `overflow-x: hidden` on the container or body to prevent horizontal scrollbar - appearing when elements are swiped off the list. - - - var list = document.querySelector('ul#slippylist'); - new Slip(list); - - list.addEventListener('slip:beforeswipe', function(e) { - if (shouldNotSwipe(e.target)) e.preventDefault(); - }); - - list.addEventListener('slip:swipe', function(e) { - // e.target swiped - if (thatWasSwipeToRemove) { - e.target.parentNode.removeChild(e.target); - } else { - e.preventDefault(); // will animate back to original position - } - }); - - list.addEventListener('slip:beforereorder', function(e) { - if (shouldNotReorder(e.target)) e.preventDefault(); - }); - - list.addEventListener('slip:reorder', function(e) { - // e.target reordered. - if (reorderedOK) { - e.target.parentNode.insertBefore(e.target, e.detail.insertBefore); - } else { - e.preventDefault(); - } - }); - - Requires: - • Touch events - • CSS transforms - • Function.bind() - - Caveats: - • Elements must not change size while reordering or swiping takes place (otherwise it will be visually out of sync) -*/ -/*! @license - Slip.js 1.2.0 - - © 2014 Kornel Lesiński . All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and - the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -window['Slip'] = (function(){ - 'use strict'; - - var accessibilityDefaults = { - // Set values to false if you don't want Slip to manage them - container: { - role: "listbox", - tabIndex: 0, - focus: false, // focuses after drop - }, - items: { - role: "option", // If "option" flattens items, try "group": - // https://www.marcozehe.de/2013/03/08/sometimes-you-have-to-use-illegal-wai-aria-to-make-stuff-work/ - tabIndex: -1, // 0 will make every item tabbable, which isn't always useful - focus: false, // focuses when dragging - }, - }; - - var damnYouChrome = /Chrome\/[3-5]/.test(navigator.userAgent); // For bugs that can't be programmatically detected :( Intended to catch all versions of Chrome 30-40 - var needsBodyHandlerHack = damnYouChrome; // Otherwise I _sometimes_ don't get any touchstart events and only clicks instead. - - /* When dragging elements down in Chrome (tested 34-37) dragged element may appear below stationary elements. - Looks like WebKit bug #61824, but iOS Safari doesn't have that problem. */ - var compositorDoesNotOrderLayers = damnYouChrome; - - // -webkit-mess - var testElementStyle = document.createElement('div').style; - - var transitionJSPropertyName = "transition" in testElementStyle ? "transition" : "webkitTransition"; - var transformJSPropertyName = "transform" in testElementStyle ? "transform" : "webkitTransform"; - var transformCSSPropertyName = transformJSPropertyName === "webkitTransform" ? "-webkit-transform" : "transform"; - var userSelectJSPropertyName = "userSelect" in testElementStyle ? "userSelect" : "webkitUserSelect"; - - testElementStyle[transformJSPropertyName] = 'translateZ(0)'; - var hwLayerMagicStyle = testElementStyle[transformJSPropertyName] ? 'translateZ(0) ' : ''; - var hwTopLayerMagicStyle = testElementStyle[transformJSPropertyName] ? 'translateZ(1px) ' : ''; - testElementStyle = null; - - var globalInstances = 0; - var attachedBodyHandlerHack = false; - var nullHandler = function(){}; - - function Slip(container, options) { - if ('string' === typeof container) container = document.querySelector(container); - if (!container || !container.addEventListener) throw new Error("Please specify DOM node to attach to"); - - if (!this || this === window) return new Slip(container, options); - - this.options = options = options || {}; - this.options.keepSwipingPercent = options.keepSwipingPercent || 0; - this.options.minimumSwipeVelocity = options.minimumSwipeVelocity || 1; - this.options.minimumSwipeTime = options.minimumSwipeTime || 110; - this.options.ignoredElements = options.ignoredElements || []; - this.options.accessibility = options.accessibility || accessibilityDefaults; - this.options.accessibility.container = options.accessibility.container || accessibilityDefaults.container; - - this.options.accessibility.container.role = options.accessibility.container.role !== undefined ? - options.accessibility.container.role : - accessibilityDefaults.container.role; - - this.options.accessibility.container.tabIndex = options.accessibility.container.tabIndex !== undefined ? - options.accessibility.container.tabIndex : - accessibilityDefaults.container.tabIndex; - - this.options.accessibility.container.focus = options.accessibility.container.focus !== undefined ? - options.accessibility.container.focus : - accessibilityDefaults.container.focus; - - this.options.accessibility.items = options.accessibility.items || accessibilityDefaults.items; - - this.options.accessibility.items.role = options.accessibility.items.role !== undefined ? - options.accessibility.items.role : - accessibilityDefaults.items.role; - - this.options.accessibility.items.tabIndex = options.accessibility.items.tabIndex !== undefined ? - options.accessibility.items.tabIndex : - accessibilityDefaults.items.tabIndex; - - this.options.accessibility.items.role = options.accessibility.items.focus !== undefined ? - options.accessibility.items.focus : - accessibilityDefaults.items.focus; - - if (!Array.isArray(this.options.ignoredElements)) throw new Error("ignoredElements must be an Array"); - - // Functions used for as event handlers need usable `this` and must not change to be removable - this.cancel = this.setState.bind(this, this.states.idle); - this.onTouchStart = this.onTouchStart.bind(this); - this.onTouchMove = this.onTouchMove.bind(this); - this.onTouchEnd = this.onTouchEnd.bind(this); - this.onMouseDown = this.onMouseDown.bind(this); - this.onMouseMove = this.onMouseMove.bind(this); - this.onMouseUp = this.onMouseUp.bind(this); - this.onMouseLeave = this.onMouseLeave.bind(this); - this.onSelection = this.onSelection.bind(this); - this.onContainerFocus = this.onContainerFocus.bind(this); - - this.setState(this.states.idle); - this.attach(container); - } - - function getTransform(node) { - var transform = node.style[transformJSPropertyName]; - if (transform) { - return { - value: transform, - original: transform, - }; - } - - if (window.getComputedStyle) { - var style = window.getComputedStyle(node).getPropertyValue(transformCSSPropertyName); - if (style && style !== 'none') return {value:style, original:''}; - } - return {value:'', original:''}; - } - - function findIndex(target, nodes) { - var originalIndex = 0; - var listCount = 0; - - for (var i=0; i < nodes.length; i++) { - if (nodes[i].nodeType === 1) { - listCount++; - if (nodes[i] === target.node) { - originalIndex = listCount-1; - } - } - } - - return originalIndex; - } - - // All functions in states are going to be executed in context of Slip object - Slip.prototype = { - - container: null, - options: {}, - state: null, - - target: null, // the tapped/swiped/reordered node with height and backed up styles - - usingTouch: false, // there's no good way to detect touchscreen preference other than receiving a touch event (really, trust me). - mouseHandlersAttached: false, - - startPosition: null, // x,y,time where first touch began - latestPosition: null, // x,y,time where the finger is currently - previousPosition: null, // x,y,time where the finger was ~100ms ago (for velocity calculation) - - canPreventScrolling: false, - - states: { - idle: function idleStateInit() { - this.removeMouseHandlers(); - if (this.target) { - this.target.node.style.willChange = ''; - this.target = null; - } - this.usingTouch = false; - - return { - allowTextSelection: true, - }; - }, - - undecided: function undecidedStateInit() { - this.target.height = this.target.node.offsetHeight; - this.target.node.style.willChange = transformCSSPropertyName; - this.target.node.style[transitionJSPropertyName] = ''; - - if (!this.dispatch(this.target.originalTarget, 'beforewait')) { - if (this.dispatch(this.target.originalTarget, 'beforereorder')) { - this.setState(this.states.reorder); - } - } else { - var holdTimer = setTimeout(function(){ - var move = this.getAbsoluteMovement(); - if (this.canPreventScrolling && move.x < 15 && move.y < 25) { - if (this.dispatch(this.target.originalTarget, 'beforereorder')) { - this.setState(this.states.reorder); - } - } - }.bind(this), 300); - } - - return { - leaveState: function() { - clearTimeout(holdTimer); - }, - - onMove: function() { - var move = this.getAbsoluteMovement(); - - if (move.x > 20 && move.y < Math.max(100, this.target.height)) { - if (this.dispatch(this.target.originalTarget, 'beforeswipe', {directionX: move.directionX, directionY: move.directionY})) { - this.setState(this.states.swipe); - return false; - } else { - this.setState(this.states.idle); - } - } - if (move.y > 20) { - this.setState(this.states.idle); - } - - // Chrome likes sideways scrolling :( - if (move.x > move.y*1.2) return false; - }, - - onLeave: function() { - this.setState(this.states.idle); - }, - - onEnd: function() { - var allowDefault = this.dispatch(this.target.originalTarget, 'tap'); - this.setState(this.states.idle); - return allowDefault; - }, - }; - }, - - swipe: function swipeStateInit() { - var swipeSuccess = false; - var container = this.container; - - var originalIndex = findIndex(this.target, this.container.childNodes); - - container.classList.add('slip-swiping-container'); - function removeClass() { - container.classList.remove('slip-swiping-container'); - } - - this.target.height = this.target.node.offsetHeight; - - return { - leaveState: function() { - if (swipeSuccess) { - this.animateSwipe(function(target){ - target.node.style[transformJSPropertyName] = target.baseTransform.original; - target.node.style[transitionJSPropertyName] = ''; - if (this.dispatch(target.node, 'afterswipe')) { - removeClass(); - return true; - } else { - this.animateToZero(undefined, target); - } - }.bind(this)); - } else { - this.animateToZero(removeClass); - } - }, - - onMove: function() { - var move = this.getTotalMovement(); - - if (Math.abs(move.y) < this.target.height+20) { - if (this.dispatch(this.target.node, 'animateswipe', {x: move.x, originalIndex: originalIndex})) { - this.target.node.style[transformJSPropertyName] = 'translate(' + move.x + 'px,0) ' + hwLayerMagicStyle + this.target.baseTransform.value; - } - return false; - } else { - this.dispatch(this.target.node, 'cancelswipe'); - this.setState(this.states.idle); - } - }, - - onLeave: function() { - this.state.onEnd.call(this); - }, - - onEnd: function() { - var move = this.getAbsoluteMovement(); - var velocity = move.x / move.time; - - // How far out has the item been swiped? - var swipedPercent = Math.abs((this.startPosition.x - this.previousPosition.x) / this.container.clientWidth) * 100; - - var swiped = (velocity > this.options.minimumSwipeVelocity && move.time > this.options.minimumSwipeTime) || (this.options.keepSwipingPercent && swipedPercent > this.options.keepSwipingPercent); - - if (swiped) { - if (this.dispatch(this.target.node, 'swipe', {direction: move.directionX, originalIndex: originalIndex})) { - swipeSuccess = true; // can't animate here, leaveState overrides anim - } - } else { - this.dispatch(this.target.node, 'cancelswipe'); - } - this.setState(this.states.idle); - return !swiped; - }, - }; - }, - - reorder: function reorderStateInit() { - if (this.target.node.focus && this.options.accessibility.items.focus) { - this.target.node.focus(); - } - - this.target.height = this.target.node.offsetHeight; - - var nodes; - if (this.options.ignoredElements.length) { - var container = this.container; - var query = container.tagName.toLowerCase(); - if (container.getAttribute('id')) { - query = '#' + container.getAttribute('id'); - } else if (container.classList.length) { - query += '.' + container.getAttribute('class').replace(' ', '.'); - } - query += ' > '; - this.options.ignoredElements.forEach(function (selector) { - query += ':not(' + selector + ')'; - }); - try { - nodes = container.parentNode.querySelectorAll(query); - } catch(err) { - if (err instanceof DOMException && err.name === 'SyntaxError') - throw new Error('ignoredElements you specified contain invalid query'); - else - throw err; - } - } else { - nodes = this.container.childNodes; - } - var originalIndex = findIndex(this.target, nodes); - var mouseOutsideTimer; - var zero = this.target.node.offsetTop + this.target.height/2; - var otherNodes = []; - for(var i=0; i < nodes.length; i++) { - if (nodes[i].nodeType != 1 || nodes[i] === this.target.node) continue; - var t = nodes[i].offsetTop; - nodes[i].style[transitionJSPropertyName] = transformCSSPropertyName + ' 0.2s ease-in-out'; - otherNodes.push({ - node: nodes[i], - baseTransform: getTransform(nodes[i]), - pos: t + (t < zero ? nodes[i].offsetHeight : 0) - zero, - }); - } - - this.target.node.classList.add('slip-reordering'); - this.target.node.style.zIndex = '99999'; - this.target.node.style[userSelectJSPropertyName] = 'none'; - if (compositorDoesNotOrderLayers) { - // Chrome's compositor doesn't sort 2D layers - this.container.style.webkitTransformStyle = 'preserve-3d'; - } - - function onMove() { - /*jshint validthis:true */ - - this.updateScrolling(); - - if (mouseOutsideTimer) { - // don't care where the mouse is as long as it moves - clearTimeout(mouseOutsideTimer); mouseOutsideTimer = null; - } - - var move = this.getTotalMovement(); - this.target.node.style[transformJSPropertyName] = 'translate(0,' + move.y + 'px) ' + hwTopLayerMagicStyle + this.target.baseTransform.value; - - var height = this.target.height; - otherNodes.forEach(function(o){ - var off = 0; - if (o.pos < 0 && move.y < 0 && o.pos > move.y) { - off = height; - } - else if (o.pos > 0 && move.y > 0 && o.pos < move.y) { - off = -height; - } - // FIXME: should change accelerated/non-accelerated state lazily - o.node.style[transformJSPropertyName] = off ? 'translate(0,'+off+'px) ' + hwLayerMagicStyle + o.baseTransform.value : o.baseTransform.original; - }); - return false; - } - - onMove.call(this); - - return { - leaveState: function() { - if (mouseOutsideTimer) clearTimeout(mouseOutsideTimer); - - if (compositorDoesNotOrderLayers) { - this.container.style.webkitTransformStyle = ''; - } - - if (this.container.focus && this.options.accessibility.container.focus) { - this.container.focus(); - } - - this.target.node.classList.remove('slip-reordering'); - this.target.node.style[userSelectJSPropertyName] = ''; - - this.animateToZero(function(target){ - target.node.style.zIndex = ''; - }); - otherNodes.forEach(function(o){ - o.node.style[transformJSPropertyName] = o.baseTransform.original; - o.node.style[transitionJSPropertyName] = ''; // FIXME: animate to new position - }); - }, - - onMove: onMove, - - onLeave: function() { - // don't let element get stuck if mouse left the window - // but don't cancel immediately as it'd be annoying near window edges - if (mouseOutsideTimer) clearTimeout(mouseOutsideTimer); - mouseOutsideTimer = setTimeout(function(){ - mouseOutsideTimer = null; - this.cancel(); - }.bind(this), 700); - }, - - onEnd: function() { - var move = this.getTotalMovement(); - var i, spliceIndex; - if (move.y < 0) { - for (i=0; i < otherNodes.length; i++) { - if (otherNodes[i].pos > move.y) { - break; - } - } - spliceIndex = i; - } else { - for (i=otherNodes.length-1; i >= 0; i--) { - if (otherNodes[i].pos < move.y) { - break; - } - } - spliceIndex = i+1; - } - - this.dispatch(this.target.node, 'reorder', { - spliceIndex: spliceIndex, - originalIndex: originalIndex, - insertBefore: otherNodes[spliceIndex] ? otherNodes[spliceIndex].node : null, - }); - - this.setState(this.states.idle); - return false; - }, - }; - }, - }, - - attach: function(container) { - globalInstances++; - if (this.container) this.detach(); - - // In some cases taps on list elements send *only* click events and no touch events. Spotted only in Chrome 32+ - // Having event listener on body seems to solve the issue (although AFAIK may disable smooth scrolling as a side-effect) - if (!attachedBodyHandlerHack && needsBodyHandlerHack) { - attachedBodyHandlerHack = true; - document.body.addEventListener('touchstart', nullHandler, false); - } - - this.container = container; - - // Accessibility - if (false !== this.options.accessibility.container.tabIndex) { - this.container.tabIndex = this.options.accessibility.container.tabIndex; - } - if (this.options.accessibility.container.role) { - this.container.setAttribute('role', this.options.accessibility.container.role); - } - this.setChildNodesRoles(); - this.container.addEventListener('focus', this.onContainerFocus, false); - - this.otherNodes = []; - - // selection on iOS interferes with reordering - document.addEventListener("selectionchange", this.onSelection, false); - - // cancel is called e.g. when iOS detects multitasking gesture - this.container.addEventListener('touchcancel', this.cancel, false); - this.container.addEventListener('touchstart', this.onTouchStart, false); - this.container.addEventListener('touchmove', this.onTouchMove, false); - this.container.addEventListener('touchend', this.onTouchEnd, false); - this.container.addEventListener('mousedown', this.onMouseDown, false); - // mousemove and mouseup are attached dynamically - }, - - detach: function() { - this.cancel(); - - this.container.removeEventListener('mousedown', this.onMouseDown, false); - this.container.removeEventListener('touchend', this.onTouchEnd, false); - this.container.removeEventListener('touchmove', this.onTouchMove, false); - this.container.removeEventListener('touchstart', this.onTouchStart, false); - this.container.removeEventListener('touchcancel', this.cancel, false); - - document.removeEventListener("selectionchange", this.onSelection, false); - - if (false !== this.options.accessibility.container.tabIndex) { - this.container.removeAttribute('tabIndex'); - } - if (this.options.accessibility.container.role) { - this.container.removeAttribute('role'); - } - this.unSetChildNodesRoles(); - - globalInstances--; - if (!globalInstances && attachedBodyHandlerHack) { - attachedBodyHandlerHack = false; - document.body.removeEventListener('touchstart', nullHandler, false); - } - }, - - setState: function(newStateCtor){ - if (this.state) { - if (this.state.ctor === newStateCtor) return; - if (this.state.leaveState) this.state.leaveState.call(this); - } - - // Must be re-entrant in case ctor changes state - var prevState = this.state; - var nextState = newStateCtor.call(this); - if (this.state === prevState) { - nextState.ctor = newStateCtor; - this.state = nextState; - } - }, - - findTargetNode: function(targetNode) { - while(targetNode && targetNode.parentNode !== this.container) { - targetNode = targetNode.parentNode; - } - return targetNode; - }, - - onContainerFocus: function(e) { - e.stopPropagation(); - this.setChildNodesRoles(); - }, - - setChildNodesRoles: function() { - var nodes = this.container.childNodes; - for(var i=0; i < nodes.length; i++) { - if (nodes[i].nodeType != 1) continue; - if (this.options.accessibility.items.role) { - nodes[i].setAttribute('role', this.options.accessibility.items.role); - } - if (false !== this.options.accessibility.items.tabIndex) { - nodes[i].tabIndex = this.options.accessibility.items.tabIndex; - } - } - }, - - unSetChildNodesRoles: function() { - var nodes = this.container.childNodes; - for(var i=0; i < nodes.length; i++) { - if (nodes[i].nodeType != 1) continue; - if (this.options.accessibility.items.role) { - nodes[i].removeAttribute('role'); - } - if (false !== this.options.accessibility.items.tabIndex) { - nodes[i].removeAttribute('tabIndex'); - } - } - }, - onSelection: function(e) { - e.stopPropagation(); - var isRelated = e.target === document || this.findTargetNode(e); - var iOS = /(iPhone|iPad|iPod)/i.test(navigator.userAgent) && !/(Android|Windows)/i.test(navigator.userAgent); - if (!isRelated) return; - - if (iOS) { - // iOS doesn't allow selection to be prevented - this.setState(this.states.idle); - } else { - if (!this.state.allowTextSelection) { - e.preventDefault(); - } - } - }, - - addMouseHandlers: function() { - // unlike touch events, mousemove/up is not conveniently fired on the same element, - // but I don't need to listen to unrelated events all the time - if (!this.mouseHandlersAttached) { - this.mouseHandlersAttached = true; - document.documentElement.addEventListener('mouseleave', this.onMouseLeave, false); - window.addEventListener('mousemove', this.onMouseMove, true); - window.addEventListener('mouseup', this.onMouseUp, true); - window.addEventListener('blur', this.cancel, false); - } - }, - - removeMouseHandlers: function() { - if (this.mouseHandlersAttached) { - this.mouseHandlersAttached = false; - document.documentElement.removeEventListener('mouseleave', this.onMouseLeave, false); - window.removeEventListener('mousemove', this.onMouseMove, true); - window.removeEventListener('mouseup', this.onMouseUp, true); - window.removeEventListener('blur', this.cancel, false); - } - }, - - onMouseLeave: function(e) { - e.stopPropagation(); - if (this.usingTouch) return; - - if (e.target === document.documentElement || e.relatedTarget === document.documentElement) { - if (this.state.onLeave) { - this.state.onLeave.call(this); - } - } - }, - - onMouseDown: function(e) { - e.stopPropagation(); - if (this.usingTouch || e.button != 0 || !this.setTarget(e)) return; - - this.addMouseHandlers(); // mouseup, etc. - - this.canPreventScrolling = true; // or rather it doesn't apply to mouse - - this.startAtPosition({ - x: e.clientX, - y: e.clientY, - time: e.timeStamp, - }); - }, - - onTouchStart: function(e) { - e.stopPropagation(); - this.usingTouch = true; - this.canPreventScrolling = true; - - // This implementation cares only about single touch - if (e.touches.length > 1) { - this.setState(this.states.idle); - return; - } - - if (!this.setTarget(e)) return; - - this.startAtPosition({ - x: e.touches[0].clientX, - y: e.touches[0].clientY, - time: e.timeStamp, - }); - }, - - setTarget: function(e) { - var targetNode = this.findTargetNode(e.target); - if (!targetNode) { - this.setState(this.states.idle); - return false; - } - - // scrollContainer may be explicitly set via options, otherwise search upwards for a parent with an overflow-y property - // fallback to document.scrollingElement (or documentElement on IE), and do not use document.body - var scrollContainer = this.options.scrollContainer; - if (!scrollContainer) { - var top = document.scrollingElement || document.documentElement; - scrollContainer = targetNode.parentNode; - while (scrollContainer) { - if (scrollContainer == top) break; - if (scrollContainer != document.body && scrollContainer.scrollHeight > scrollContainer.clientHeight && window.getComputedStyle(scrollContainer)['overflow-y'] != 'visible') break; - scrollContainer = scrollContainer.parentNode; - } - scrollContainer = scrollContainer || top; - } - - this.target = { - originalTarget: e.target, - node: targetNode, - scrollContainer: scrollContainer, - origScrollTop: scrollContainer.scrollTop, - origScrollHeight: scrollContainer.scrollHeight, - baseTransform: getTransform(targetNode), - }; - return true; - }, - - startAtPosition: function(pos) { - this.startPosition = this.previousPosition = this.latestPosition = pos; - this.setState(this.states.undecided); - }, - - updatePosition: function(e, pos) { - if (this.target == null) { - return; - } - this.latestPosition = pos; - - if (this.state.onMove) { - if (this.state.onMove.call(this) === false) { - e.preventDefault(); - } - } - - // sample latestPosition 100ms for velocity - if (this.latestPosition.time - this.previousPosition.time > 100) { - this.previousPosition = this.latestPosition; - } - }, - - onMouseMove: function(e) { - e.stopPropagation(); - this.updatePosition(e, { - x: e.clientX, - y: e.clientY, - time: e.timeStamp, - }); - }, - - onTouchMove: function(e) { - e.stopPropagation(); - this.updatePosition(e, { - x: e.touches[0].clientX, - y: e.touches[0].clientY, - time: e.timeStamp, - }); - - // In Apple's touch model only the first move event after touchstart can prevent scrolling (and event.cancelable is broken) - this.canPreventScrolling = false; - }, - - onMouseUp: function(e) { - e.stopPropagation(); - if (this.usingTouch || e.button !== 0) return; - - if (this.state.onEnd && false === this.state.onEnd.call(this)) { - e.preventDefault(); - } - }, - - onTouchEnd: function(e) { - e.stopPropagation(); - if (e.touches.length > 1) { - this.cancel(); - } else if (this.state.onEnd && false === this.state.onEnd.call(this)) { - e.preventDefault(); - } - }, - - getTotalMovement: function() { - var scrollOffset = this.target.scrollContainer.scrollTop - this.target.origScrollTop; - return { - x: this.latestPosition.x - this.startPosition.x, - y: this.latestPosition.y - this.startPosition.y + scrollOffset, - time: this.latestPosition.time - this.startPosition.time, - }; - }, - - getAbsoluteMovement: function() { - var move = this.getTotalMovement(); - return { - x: Math.abs(move.x), - y: Math.abs(move.y), - time: move.time, - directionX: move.x < 0 ? 'left' : 'right', - directionY: move.y < 0 ? 'up' : 'down', - }; - }, - - updateScrolling: function() { - var triggerOffset = 40, - offset = 0; - - var scrollable = this.target.scrollContainer, - containerRect = scrollable.getBoundingClientRect(), - targetRect = this.target.node.getBoundingClientRect(), - bottomOffset = Math.min(containerRect.bottom, window.innerHeight) - targetRect.bottom, - topOffset = targetRect.top - Math.max(containerRect.top, 0), - maxScrollTop = this.target.origScrollHeight - Math.min(scrollable.clientHeight, window.innerHeight); - - if (bottomOffset < triggerOffset) { - offset = Math.min(triggerOffset, triggerOffset - bottomOffset); - } - else if (topOffset < triggerOffset) { - offset = Math.max(-triggerOffset, topOffset - triggerOffset); - } - - scrollable.scrollTop = Math.max(0, Math.min(maxScrollTop, scrollable.scrollTop + offset)); - }, - - dispatch: function(targetNode, eventName, detail) { - var event = document.createEvent('CustomEvent'); - if (event && event.initCustomEvent) { - event.initCustomEvent('slip:' + eventName, true, true, detail); - } else { - event = document.createEvent('Event'); - event.initEvent('slip:' + eventName, true, true); - event.detail = detail; - } - return targetNode.dispatchEvent(event); - }, - - getSiblings: function(target) { - var siblings = []; - var tmp = target.node.nextSibling; - while(tmp) { - if (tmp.nodeType == 1) siblings.push({ - node: tmp, - baseTransform: getTransform(tmp), - }); - tmp = tmp.nextSibling; - } - return siblings; - }, - - animateToZero: function(callback, target) { - // save, because this.target/container could change during animation - target = target || this.target; - - target.node.style[transitionJSPropertyName] = transformCSSPropertyName + ' 0.1s ease-out'; - target.node.style[transformJSPropertyName] = 'translate(0,0) ' + hwLayerMagicStyle + target.baseTransform.value; - setTimeout(function(){ - target.node.style[transitionJSPropertyName] = ''; - target.node.style[transformJSPropertyName] = target.baseTransform.original; - if (callback) callback.call(this, target); - }.bind(this), 101); - }, - - animateSwipe: function(callback) { - var target = this.target; - var siblings = this.getSiblings(target); - var emptySpaceTransformStyle = 'translate(0,' + this.target.height + 'px) ' + hwLayerMagicStyle + ' '; - - // FIXME: animate with real velocity - target.node.style[transitionJSPropertyName] = 'all 0.1s linear'; - target.node.style[transformJSPropertyName] = ' translate(' + (this.getTotalMovement().x > 0 ? '' : '-') + '100%,0) ' + hwLayerMagicStyle + target.baseTransform.value; - - setTimeout(function(){ - if (callback.call(this, target)) { - siblings.forEach(function(o){ - o.node.style[transitionJSPropertyName] = ''; - o.node.style[transformJSPropertyName] = emptySpaceTransformStyle + o.baseTransform.value; - }); - setTimeout(function(){ - siblings.forEach(function(o){ - o.node.style[transitionJSPropertyName] = transformCSSPropertyName + ' 0.1s ease-in-out'; - o.node.style[transformJSPropertyName] = 'translate(0,0) ' + hwLayerMagicStyle + o.baseTransform.value; - }); - setTimeout(function(){ - siblings.forEach(function(o){ - o.node.style[transitionJSPropertyName] = ''; - o.node.style[transformJSPropertyName] = o.baseTransform.original; - }); - }, 101); - }, 1); - } - }.bind(this), 101); - }, - }; - - // AMD - if ('function' === typeof define && define.amd) { - define(function(){ - return Slip; - }); - } - // CJS - if ('object' === typeof module && module.exports) { - module.exports = Slip; - } - return Slip; -})(); -