From 249d3eb6c2021967fc225eb0a2ba26261754e590 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 3 Apr 2019 20:29:40 +0900 Subject: [PATCH 01/13] Install power-assert --- package-lock.json | 1424 ++++++++++++++++++++++++++++----------------- package.json | 2 + 2 files changed, 878 insertions(+), 548 deletions(-) diff --git a/package-lock.json b/package-lock.json index fcf6641..7064f2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -492,6 +492,12 @@ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true }, + "acorn-es7-plugin": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz", + "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=", + "dev": true + }, "acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", @@ -780,15 +786,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "dev": true }, "globals": { "version": "11.11.0", @@ -1176,6 +1174,12 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, + "array-find": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", + "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", + "dev": true + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -1348,9 +1352,9 @@ "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "aws-sign2": { @@ -2366,6 +2370,24 @@ } } }, + "call-matcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.1.0.tgz", + "integrity": "sha512-IoQLeNwwf9KTNbtSA7aEBb1yfDbdnzwjCetjkC8io5oGeOmK2CBNdg0xr+tadRYKO0p7uQyZzvon0kXlZbvGrw==", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "deep-equal": "^1.0.0", + "espurify": "^1.6.0", + "estraverse": "^4.0.0" + } + }, + "call-signature": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz", + "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=", + "dev": true + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -2581,15 +2603,6 @@ "static-extend": "^0.1.1" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -3372,56 +3385,12 @@ } }, "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "is-descriptor": "^0.1.0" } }, "delayed-stream": { @@ -3479,6 +3448,12 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "diff-match-patch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", + "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -3890,6 +3865,12 @@ "stream-shift": "^1.0.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -3942,6 +3923,35 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "empower": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/empower/-/empower-1.3.1.tgz", + "integrity": "sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA==", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "empower-core": "^1.2.0" + } + }, + "empower-assert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/empower-assert/-/empower-assert-1.1.0.tgz", + "integrity": "sha512-Ylck0Q6p8y/LpNzYeBccaxAPm2ZyuqBgErgZpO9KT0HuQWF0sJckBKCLmgS1/DEXEiyBi9XtYh3clZm5cAdARw==", + "dev": true, + "requires": { + "estraverse": "^4.2.0" + } + }, + "empower-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-1.2.0.tgz", + "integrity": "sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ==", + "dev": true, + "requires": { + "call-signature": "0.0.2", + "core-js": "^2.0.0" + } + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -4199,6 +4209,24 @@ "es6-symbol": "^3.1.1" } }, + "escallmatch": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/escallmatch/-/escallmatch-1.5.0.tgz", + "integrity": "sha1-UAmdhugJGwkt+N37w/mm+wWgJNA=", + "dev": true, + "requires": { + "call-matcher": "^1.0.0", + "esprima": "^2.0.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4211,6 +4239,34 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "escodegen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", @@ -4798,6 +4854,75 @@ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", "dev": true }, + "espower": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/espower/-/espower-2.1.2.tgz", + "integrity": "sha512-2qa3aEFtcgPB782jTKDPu82hOdw8+zJsWdOn12Tey8XlexHTqsYUIdLC2B7cUECENXly0vZblH1CEZcqttPNjw==", + "dev": true, + "requires": { + "array-find": "^1.0.0", + "escallmatch": "^1.5.0", + "escodegen": "^1.7.0", + "escope": "^3.3.0", + "espower-location-detector": "^1.0.0", + "espurify": "^1.3.0", + "estraverse": "^4.1.0", + "source-map": "^0.5.0", + "type-name": "^2.0.0" + } + }, + "espower-loader": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/espower-loader/-/espower-loader-1.2.2.tgz", + "integrity": "sha1-7bRsPFmga6yOpzppXIblxaC8gto=", + "dev": true, + "requires": { + "convert-source-map": "^1.1.0", + "espower-source": "^2.0.0", + "minimatch": "^3.0.0", + "source-map-support": "^0.4.0", + "xtend": "^4.0.0" + } + }, + "espower-location-detector": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz", + "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=", + "dev": true, + "requires": { + "is-url": "^1.2.1", + "path-is-absolute": "^1.0.0", + "source-map": "^0.5.0", + "xtend": "^4.0.0" + } + }, + "espower-source": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/espower-source/-/espower-source-2.3.0.tgz", + "integrity": "sha512-Wc4kC4zUAEV7Qt31JRPoBUc5jjowHRylml2L2VaDQ1XEbnqQofGWx+gPR03TZAPokAMl5dqyL36h3ITyMXy3iA==", + "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-es7-plugin": "^1.0.10", + "convert-source-map": "^1.1.1", + "empower-assert": "^1.0.0", + "escodegen": "^1.10.0", + "espower": "^2.1.1", + "estraverse": "^4.0.0", + "merge-estraverse-visitors": "^1.0.0", + "multi-stage-sourcemap": "^0.2.1", + "path-is-absolute": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, "espree": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", @@ -4815,6 +4940,15 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "espurify": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.8.1.tgz", + "integrity": "sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==", + "dev": true, + "requires": { + "core-js": "^2.0.0" + } + }, "esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", @@ -4955,24 +5089,12 @@ "dev": true }, "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-extendable": "^0.1.0" } }, "external-editor": { @@ -5165,41 +5287,22 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" } } }, @@ -5207,52 +5310,26 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" } } }, @@ -5260,38 +5337,23 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" } } }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -5299,35 +5361,16 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" } } }, @@ -5335,121 +5378,67 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" } } }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } + "dev": true }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" } } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } + "dev": true } } }, @@ -5720,7 +5709,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5763,7 +5753,8 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -5774,7 +5765,8 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5891,7 +5883,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5903,6 +5896,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5925,12 +5919,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5949,6 +5945,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6029,7 +6026,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6041,6 +6039,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6126,7 +6125,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6162,6 +6162,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6181,6 +6182,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6224,12 +6226,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -6475,6 +6479,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, + "optional": true, "requires": { "is-glob": "^2.0.0" } @@ -7237,6 +7242,15 @@ } } }, + "intelli-espower-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/intelli-espower-loader/-/intelli-espower-loader-1.0.1.tgz", + "integrity": "sha1-LHsDFGvB1GvyENCgOXxckatMorA=", + "dev": true, + "requires": { + "espower-loader": "^1.0.0" + } + }, "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", @@ -7373,7 +7387,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "dev": true, + "optional": true }, "is-finite": { "version": "1.0.2", @@ -7395,6 +7410,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -7456,23 +7472,6 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", @@ -7576,6 +7575,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -7894,10 +7899,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "dev": true } } }, @@ -7951,6 +7953,16 @@ "upath": "^1.1.0" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -8038,10 +8050,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "dev": true }, "extglob": { "version": "2.0.4", @@ -8102,7 +8111,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -8145,7 +8155,8 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -8156,7 +8167,8 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -8273,7 +8285,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -8285,6 +8298,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -8307,12 +8321,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -8331,6 +8347,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -8411,7 +8428,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -8423,6 +8441,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -8508,7 +8527,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -8544,6 +8564,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -8563,6 +8584,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -8606,12 +8628,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -8750,20 +8774,12 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } + "dev": true }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" }, "kind-of": { "version": "6.0.2", @@ -8783,12 +8799,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } + "dev": true }, "source-map": { "version": "0.6.1", @@ -9234,10 +9245,9 @@ "dev": true }, "map-age-cleaner": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", - "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", - "dev": true, + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "requires": { "p-defer": "^1.0.0" } @@ -9305,14 +9315,20 @@ "dev": true }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } } }, "memory-fs": { @@ -9351,6 +9367,15 @@ } } }, + "merge-estraverse-visitors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/merge-estraverse-visitors/-/merge-estraverse-visitors-1.0.0.tgz", + "integrity": "sha1-65aDOLXe1c7tgs7AMH3sui2OqZQ=", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -9537,38 +9562,22 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "camelcase": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", - "dev": true + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==" }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==" }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" }, "debug": { "version": "3.2.6", @@ -9582,35 +9591,17 @@ "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==" }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" }, "glob": { "version": "7.1.3", @@ -9635,27 +9626,17 @@ "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==" }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" }, "ms": { "version": "2.1.1", @@ -9667,7 +9648,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", @@ -9677,45 +9657,27 @@ "p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==" }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==" }, "p-try": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" }, "supports-color": { "version": "6.0.0", @@ -9738,38 +9700,19 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } + "dev": true }, "yargs-parser": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "dev": true } } }, @@ -9800,6 +9743,26 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "multi-stage-sourcemap": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz", + "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=", + "dev": true, + "requires": { + "source-map": "^0.1.34" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, "multimatch": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", @@ -9874,9 +9837,9 @@ "dev": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -9884,7 +9847,6 @@ "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", @@ -9905,6 +9867,70 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -9951,9 +9977,9 @@ "dev": true }, "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "nise": { @@ -10349,17 +10375,6 @@ "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } } }, "object-keys": { @@ -10572,8 +10587,7 @@ "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" }, "p-finally": { "version": "1.0.0", @@ -10582,10 +10596,9 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, "p-limit": { "version": "1.2.0", @@ -10963,10 +10976,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "dev": true } } }, @@ -11280,6 +11290,134 @@ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, + "power-assert": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.6.1.tgz", + "integrity": "sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "empower": "^1.3.1", + "power-assert-formatter": "^1.4.1", + "universal-deep-strict-equal": "^1.2.1", + "xtend": "^4.0.0" + } + }, + "power-assert-context-formatter": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz", + "integrity": "sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg==", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "power-assert-context-traversal": "^1.2.0" + } + }, + "power-assert-context-reducer-ast": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz", + "integrity": "sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw==", + "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-es7-plugin": "^1.0.12", + "core-js": "^2.0.0", + "espurify": "^1.6.0", + "estraverse": "^4.2.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "power-assert-context-traversal": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz", + "integrity": "sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ==", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "estraverse": "^4.1.0" + } + }, + "power-assert-formatter": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz", + "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "power-assert-context-formatter": "^1.0.7", + "power-assert-context-reducer-ast": "^1.0.7", + "power-assert-renderer-assertion": "^1.0.7", + "power-assert-renderer-comparison": "^1.0.7", + "power-assert-renderer-diagram": "^1.0.7", + "power-assert-renderer-file": "^1.0.7" + } + }, + "power-assert-renderer-assertion": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz", + "integrity": "sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg==", + "dev": true, + "requires": { + "power-assert-renderer-base": "^1.1.1", + "power-assert-util-string-width": "^1.2.0" + } + }, + "power-assert-renderer-base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz", + "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=", + "dev": true + }, + "power-assert-renderer-comparison": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz", + "integrity": "sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g==", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "diff-match-patch": "^1.0.0", + "power-assert-renderer-base": "^1.1.1", + "stringifier": "^1.3.0", + "type-name": "^2.0.1" + } + }, + "power-assert-renderer-diagram": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz", + "integrity": "sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg==", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "power-assert-renderer-base": "^1.1.1", + "power-assert-util-string-width": "^1.2.0", + "stringifier": "^1.3.0" + } + }, + "power-assert-renderer-file": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz", + "integrity": "sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg==", + "dev": true, + "requires": { + "power-assert-renderer-base": "^1.1.1" + } + }, + "power-assert-util-string-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz", + "integrity": "sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0" + } + }, "preact": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/preact/-/preact-8.4.2.tgz", @@ -11741,6 +11879,27 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "regexpp": { @@ -12114,17 +12273,13 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "dev": true } } }, @@ -12193,17 +12348,6 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "setimmediate": { @@ -12423,26 +12567,6 @@ "source-map": "^0.5.6", "source-map-resolve": "^0.5.0", "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "snapdragon-node": { @@ -12716,6 +12840,27 @@ "dev": true, "requires": { "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "sprintf-js": { @@ -12758,17 +12903,6 @@ "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } } }, "statuses": { @@ -12968,6 +13102,25 @@ "safe-buffer": "~5.1.0" } }, + "stringifier": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stringifier/-/stringifier-1.4.0.tgz", + "integrity": "sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw==", + "dev": true, + "requires": { + "core-js": "^2.0.0", + "traverse": "^0.6.6", + "type-name": "^2.0.1" + }, + "dependencies": { + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -13307,11 +13460,7 @@ "version": "0.5.10", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "dev": true } } }, @@ -13515,6 +13664,78 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "to-regex-range": { @@ -13655,6 +13876,12 @@ "mime-types": "~2.1.18" } }, + "type-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", + "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -13703,15 +13930,6 @@ "set-value": "^0.4.3" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, "set-value": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", @@ -13759,6 +13977,25 @@ "crypto-random-string": "^1.0.0" } }, + "universal-deep-strict-equal": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz", + "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=", + "dev": true, + "requires": { + "array-filter": "^1.0.0", + "indexof": "0.0.1", + "object-keys": "^1.0.0" + }, + "dependencies": { + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + } + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -13946,21 +14183,10 @@ } }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "user-home": { "version": "1.1.1", @@ -14165,6 +14391,16 @@ "upath": "^1.1.0" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -14257,6 +14493,27 @@ } } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -14336,7 +14593,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -14751,7 +15009,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -14807,6 +15066,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -14850,12 +15110,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -15141,6 +15403,16 @@ "xregexp": "4.0.0" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -15233,6 +15505,27 @@ } } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -15312,7 +15605,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -15333,12 +15627,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15353,17 +15649,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -15480,7 +15779,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -15492,6 +15792,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -15506,6 +15807,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -15513,12 +15815,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -15537,6 +15841,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -15617,7 +15922,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -15629,6 +15935,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -15714,7 +16021,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -15750,6 +16058,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -15769,6 +16078,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -15812,12 +16122,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -16172,6 +16484,16 @@ } } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "eslint-scope": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", @@ -16274,6 +16596,27 @@ } } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -17036,8 +17379,7 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "camelcase": { "version": "5.2.0", @@ -17060,14 +17402,7 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } + "dev": true }, "execa": { "version": "1.0.0", @@ -17172,20 +17507,13 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "dev": true }, "which-module": { "version": "2.0.0", diff --git a/package.json b/package.json index b8a2250..6afe0fc 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "eslint": "^5.15.1", "eslint-plugin-react": "^7.12.4", "html-webpack-plugin": "^3.2.0", + "intelli-espower-loader": "^1.0.1", "karma": "^4.0.1", "karma-firefox-launcher": "^1.1.0", "karma-html2js-preprocessor": "^1.1.0", @@ -42,6 +43,7 @@ "karma-webpack": "^3.0.5", "mocha": "^6.0.2", "node-sass": "^4.11.0", + "power-assert": "^1.6.1", "preact": "^8.4.2", "preact-redux": "^2.0.3", "redux": "^4.0.1", From 39ea9231ffd960b97fae1d27d12596b46c889a59 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 3 Apr 2019 21:00:18 +0900 Subject: [PATCH 02/13] Install lanthan --- package-lock.json | 349 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 350 insertions(+) diff --git a/package-lock.json b/package-lock.json index 7064f2f..3dd0ae1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1186,6 +1186,12 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, "array-from": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", @@ -2884,6 +2890,12 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -2902,6 +2914,12 @@ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", "dev": true }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -3421,6 +3439,12 @@ "minimalistic-assert": "^1.0.0" } }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -4979,6 +5003,12 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -5082,6 +5112,73 @@ "homedir-polyfill": "^1.0.1" } }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -5629,6 +5726,12 @@ } } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -5638,6 +5741,12 @@ "map-cache": "^0.2.2" } }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -7272,6 +7381,12 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "dev": true + }, "is-absolute": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", @@ -8933,6 +9048,131 @@ "is-buffer": "^1.1.5" } }, + "lanthan": { + "version": "git+https://github.com/ueokande/lanthan.git#47935d5481f3e7c369e5b8d33433abf4a664a21f", + "from": "git+https://github.com/ueokande/lanthan.git#master", + "dev": true, + "requires": { + "commander": "^2.19.0", + "express": "^4.16.4", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "web-ext": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, + "requires": { + "mime-db": "~1.38.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } + } + }, "latest-version": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", @@ -9367,6 +9607,12 @@ } } }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, "merge-estraverse-visitors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/merge-estraverse-visitors/-/merge-estraverse-visitors-1.0.0.tgz", @@ -9376,6 +9622,12 @@ "estraverse": "^4.0.0" } }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -11521,6 +11773,16 @@ "object-assign": "^4.1.1" } }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -12019,6 +12281,34 @@ "uuid": "^3.1.0" } }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + } + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -12319,12 +12609,59 @@ "semver": "^5.0.3" } }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, "serialize-javascript": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -12920,6 +13257,12 @@ "readable-stream": "^2.0.1" } }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -14272,6 +14615,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", diff --git a/package.json b/package.json index 6afe0fc..975ae6b 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "karma-sinon": "^1.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^3.0.5", + "lanthan": "git+https://github.com/ueokande/lanthan.git#master", "mocha": "^6.0.2", "node-sass": "^4.11.0", "power-assert": "^1.6.1", From af9662f86cce9adbb2a791efb1dd420ab8ba5c3f Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 3 Apr 2019 21:44:32 +0900 Subject: [PATCH 03/13] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 07d22c4..918565a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /build/ /e2e/ambassador/build/ *.zip +lanthan-driver.log From 6e6cd4c01e089781f06ee25d50766e79007ac172 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 3 Apr 2019 21:44:42 +0900 Subject: [PATCH 04/13] Add integration tests for scroll --- e2e-lanthan/scroll.test.js | 150 +++++++++++++++++++++++++++++++ e2e-lanthan/server/MockServer.js | 58 ++++++++++++ e2e-lanthan/server/handlers.js | 17 ++++ 3 files changed, 225 insertions(+) create mode 100644 e2e-lanthan/scroll.test.js create mode 100644 e2e-lanthan/server/MockServer.js create mode 100644 e2e-lanthan/server/handlers.js diff --git a/e2e-lanthan/scroll.test.js b/e2e-lanthan/scroll.test.js new file mode 100644 index 0000000..7b13a72 --- /dev/null +++ b/e2e-lanthan/scroll.test.js @@ -0,0 +1,150 @@ +const express = require('express'); +const lanthan = require('lanthan'); +const path = require('path'); +const assert = require('power-assert'); + +const Key = lanthan.Key; + +const newApp = () => { + let app = express(); + app.get('/', (req, res) => { + res.send(` + + +`); + }); + return app; +}; + +describe("scroll test", () => { + + const port = 12321; + let http; + let firefox; + let session; + let body; + + before(async() => { + http = newApp().listen(port); + + firefox = await lanthan.firefox(); + await firefox.session.installAddon(path.join(__dirname, '..')); + session = firefox.session; + }); + + after(async() => { + if (firefox) { + await firefox.close(); + } + http.close(); + }); + + beforeEach(async() => { + await session.navigateTo(`http://127.0.0.1:${port}`); + body = await session.findElementByCSS('body'); + }); + + + it('scrolls up by k', async () => { + await body.sendKeys('j'); + + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert.equal(pageYOffset, 64); + }); + + it('scrolls down by j', async () => { + await session.executeScript(() => window.scrollTo(0, 200)); + await body.sendKeys('k'); + + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert.equal(pageYOffset, 136); + }); + + it('scrolls left by h', async () => { + await session.executeScript(() => window.scrollTo(100, 100)); + await body.sendKeys('h'); + + let pageXOffset = await session.executeScript(() => window.pageXOffset); + assert.equal(pageXOffset, 36); + }); + + it('scrolls left by l', async () => { + await session.executeScript(() => window.scrollTo(100, 100)); + await body.sendKeys('l'); + + let pageXOffset = await session.executeScript(() => window.pageXOffset); + assert.equal(pageXOffset, 164); + }); + + it('scrolls top by gg', async () => { + await session.executeScript(() => window.scrollTo(0, 100)); + await body.sendKeys('g', 'g'); + + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert.equal(pageYOffset, 0); + }); + + it('scrolls bottom by G', async () => { + await session.executeScript(() => window.scrollTo(0, 100)); + await body.sendKeys(Key.Shift, 'g'); + + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert(pageYOffset > 5000); + }); + + it('scrolls bottom by 0', async () => { + await session.executeScript(() => window.scrollTo(0, 100)); + await body.sendKeys(Key.Shift, '0'); + + let pageXOffset = await session.executeScript(() => window.pageXOffset); + assert(pageXOffset === 0); + }); + + it('scrolls bottom by $', async () => { + await session.executeScript(() => window.scrollTo(0, 100)); + await body.sendKeys(Key.Shift, '$'); + + let pageXOffset = await session.executeScript(() => window.pageXOffset); + assert(pageXOffset > 5000); + }); + + it('scrolls bottom by ', async () => { + await session.executeScript(() => window.scrollTo(0, 1000)); + await body.sendKeys(Key.Control, 'u'); + + let pageHeight = + await session.executeScript(() => window.document.documentElement.clientHeight); + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert(Math.abs(pageYOffset - (1000 - Math.floor(pageHeight / 2))) < 5); + }); + + it('scrolls bottom by ', async () => { + await session.executeScript(() => window.scrollTo(0, 1000)); + await body.sendKeys(Key.Control, 'd'); + + let pageHeight = + await session.executeScript(() => window.document.documentElement.clientHeight); + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert(Math.abs(pageYOffset - (1000 + Math.floor(pageHeight / 2))) < 5); + }); + + it('scrolls bottom by ', async () => { + await session.executeScript(() => window.scrollTo(0, 1000)); + await body.sendKeys(Key.Control, 'b'); + + let pageHeight = + await session.executeScript(() => window.document.documentElement.clientHeight); + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert(Math.abs(pageYOffset - (1000 - pageHeight)) < 5); + }); + + it('scrolls bottom by ', async () => { + await session.executeScript(() => window.scrollTo(0, 1000)); + await body.sendKeys(Key.Control, 'f'); + + let pageHeight = + await session.executeScript(() => window.document.documentElement.clientHeight); + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert(Math.abs(pageYOffset - (1000 + pageHeight)) < 5); + }); +}); diff --git a/e2e-lanthan/server/MockServer.js b/e2e-lanthan/server/MockServer.js new file mode 100644 index 0000000..131c177 --- /dev/null +++ b/e2e-lanthan/server/MockServer.js @@ -0,0 +1,58 @@ +var http = require('http'); +var url = require('url'); +var handlers = require('./handlers'); + +class MockServer { + constructor() { + this.handlers = []; + this.server = undefined; + } + + start() { + if (this.server) { + throw new Error('Server is already started'); + } + + let listener = (req, res) => { + if (req.method !== 'GET') { + res.writeHead(404, {'Content-Type': 'text/plain'}); + res.end('not found') + return + } + + let u = url.parse(req.url); + let handler = this.handlers.find(h => u.pathname == h.pathname); + if (!handler) { + res.writeHead(404, {'Content-Type': 'text/plain'}); + res.end('not found') + return + } + + handler.handler(req, res); + } + + this.server = http.createServer(listener); + this.server.listen(); + } + + stop() { + if (!this.server) { + throw new Error('Server is not started'); + } + this.server.close(); + this.server = undefined; + } + + port() { + if (!this.server) { + throw new Error('Server is not started'); + } + return this.server.address().port + } + + on(pathname, handler) { + this.handlers.push({ pathname, handler }); + } +} + +module.exports = MockServer diff --git a/e2e-lanthan/server/handlers.js b/e2e-lanthan/server/handlers.js new file mode 100644 index 0000000..979b4be --- /dev/null +++ b/e2e-lanthan/server/handlers.js @@ -0,0 +1,17 @@ +const handleText = (body) => { + return (req, res) => { + res.writeHead(200, {'Content-Type': 'text/plane'}); + res.end(body); + } +} + +const handleHtml = (body) => { + return (req, res) => { + res.writeHead(200, {'Content-Type': 'text/html'}); + res.end(body); + } +} + +module.exports = { + handleText, handleHtml +} From 1ae9b108fdf72b0583e4f0c34b5d2c31eb43062d Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 18:34:19 +0900 Subject: [PATCH 05/13] Add tabs e2e test --- e2e-lanthan/tab.test.js | 210 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 e2e-lanthan/tab.test.js diff --git a/e2e-lanthan/tab.test.js b/e2e-lanthan/tab.test.js new file mode 100644 index 0000000..36f4acc --- /dev/null +++ b/e2e-lanthan/tab.test.js @@ -0,0 +1,210 @@ +const express = require('express'); +const lanthan = require('lanthan'); +const path = require('path'); +const assert = require('power-assert'); + +const Key = lanthan.Key; + +const newApp = () => { + let app = express(); + app.get('/', (req, res) => { + res.send('ok'); + }); + return app; +}; + +describe("tab test", () => { + + const port = 12321; + const url = `http://127.0.0.1:${port}/`; + + let http; + let firefox; + let session; + let browser; + let win; + let tabs; + + before(async() => { + firefox = await lanthan.firefox(); + await firefox.session.installAddon(path.join(__dirname, '..')); + session = firefox.session; + browser = firefox.browser; + http = newApp().listen(port); + }); + + after(async() => { + http.close(); + if (firefox) { + await firefox.close(); + } + }); + + beforeEach(async() => { + win = await browser.windows.create({ url: `${url}#0` }); + for (let i = 1; i < 5; ++i) { + await browser.tabs.create({ url: `${url}#${i}`, windowId: win.id }); + await session.navigateTo(`${url}#${i}`); + } + tabs = await browser.tabs.query({ windowId: win.id }); + tabs.sort((t1, t2) => t1.index - t2.index); + }); + + afterEach(async() => { + await browser.windows.remove(win.id); + }); + + it('deletes tab by d', async () => { + let body = await session.findElementByCSS('body'); + await body.sendKeys('d'); + + await new Promise(resolve => setTimeout(resolve, 100)); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current.length === tabs.length - 1); + }); + + it('deletes tabs to the right by D', async () => { + await browser.tabs.update(tabs[1].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys(Key.Shift, 'd'); + + await new Promise(resolve => setTimeout(resolve, 100)); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current.length === 2); + }); + + it('duplicates tab by zd', async () => { + await browser.tabs.update(tabs[0].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys('z', 'd'); + + await new Promise(resolve => setTimeout(resolve, 1000)); + + let current = await browser.tabs.query({ windowId: win.id }); + current.sort((t1, t2) => t1.index - t2.index); + assert(current.length === tabs.length + 1); + assert(current[0].url === current[1].url); + }); + + it('makes pinned by zp', async () => { + await browser.tabs.update(tabs[0].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys('z', 'p'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[0].pinned); + }); + + it('selects previous tab by K', async () => { + await browser.tabs.update(tabs[2].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys(Key.Shift, 'K'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[1].active); + }); + + it('selects previous tab by K rotatory', async () => { + await browser.tabs.update(tabs[0].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys(Key.Shift, 'K'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[current.length - 1].active) + }); + + it('selects next tab by J', async () => { + await browser.tabs.update(tabs[2].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys(Key.Shift, 'J'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[3].active); + }); + + it('selects previous tab by J rotatory', async () => { + await browser.tabs.update(tabs[tabs.length - 1].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys(Key.Shift, 'J'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[0].active) + }); + + it('selects first tab by g0', async () => { + await browser.tabs.update(tabs[2].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys('g', '0'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[0].active) + }); + + it('selects last tab by g$', async () => { + await browser.tabs.update(tabs[2].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys('g', '$'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[current.length - 1].active) + }); + + it('selects last selected tab by ', async () => { + await browser.tabs.update(tabs[1].id, { active: true }); + await browser.tabs.update(tabs[4].id, { active: true }); + + let body = await session.findElementByCSS('body'); + await body.sendKeys(Key.Control, '6'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current[1].active) + }); + + // browser.sessions.getRecentlyClosed() sometime throws "An unexpected error occurred" + // This might be a bug in Firefox. + it.skip('reopen tab by u', async () => { + await browser.tabs.remove(tabs[1].id); + let body = await session.findElementByCSS('body'); + await body.sendKeys('u'); + + await new Promise(resolve => setTimeout(resolve, 2000)); + + let current = await browser.tabs.query({ windowId: win.id }); + if (current.length !== tabs.length) { + await new Promise(resolve => setTimeout(resolve, 50000)); + } + assert(current.length === tabs.length); + }); + + it('does not delete pinned tab by d', async () => { + await browser.tabs.update(tabs[0].id, { active: true, pinned: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys('d'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current.length === tabs.length); + }); + + it('deletes pinned tab by !d', async () => { + await browser.tabs.update(tabs[0].id, { active: true, pinned: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys('!', 'd'); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current.length === tabs.length - 1); + }); + + it('opens view-source by gf', async () => { + await browser.tabs.update(tabs[0].id, { active: true }); + let body = await session.findElementByCSS('body'); + await body.sendKeys('g', 'f'); + + await new Promise(resolve => setTimeout(resolve, 1000)); + + let current = await browser.tabs.query({ windowId: win.id }); + assert(current.length === tabs.length + 1); + assert(current[current.length - 1].url === `view-source:${url}#0`); + }); +}); From 88a87504d1b2c94459ca6585c88fa1551b8459b6 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 19:10:32 +0900 Subject: [PATCH 06/13] Use eventually instead of sleep --- e2e-lanthan/eventually.js | 25 +++++++++++++++++++++++++ e2e-lanthan/tab.test.js | 32 ++++++++++++-------------------- 2 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 e2e-lanthan/eventually.js diff --git a/e2e-lanthan/eventually.js b/e2e-lanthan/eventually.js new file mode 100644 index 0000000..c04c277 --- /dev/null +++ b/e2e-lanthan/eventually.js @@ -0,0 +1,25 @@ +const assert = require('assert'); + +let defaultInterval = 100; +let defaultTimeout = 2000; + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +const eventually = async (fn, timeout = defaultTimeout, interval = defaultInterval) => { + let start = Date.now(); + let loop = async() => { + try { + await fn(); + } catch (err) { + if (Date.now() - start > timeout) { + throw err; + } + await new Promise((resolve) => setTimeout(resolve, interval)) + await loop(); + } + }; + await loop(); +}; +module.exports = eventually; diff --git a/e2e-lanthan/tab.test.js b/e2e-lanthan/tab.test.js index 36f4acc..93b0fc6 100644 --- a/e2e-lanthan/tab.test.js +++ b/e2e-lanthan/tab.test.js @@ -2,6 +2,7 @@ const express = require('express'); const lanthan = require('lanthan'); const path = require('path'); const assert = require('power-assert'); +const eventually = require('./eventually'); const Key = lanthan.Key; @@ -58,8 +59,6 @@ describe("tab test", () => { let body = await session.findElementByCSS('body'); await body.sendKeys('d'); - await new Promise(resolve => setTimeout(resolve, 100)); - let current = await browser.tabs.query({ windowId: win.id }); assert(current.length === tabs.length - 1); }); @@ -69,8 +68,6 @@ describe("tab test", () => { let body = await session.findElementByCSS('body'); await body.sendKeys(Key.Shift, 'd'); - await new Promise(resolve => setTimeout(resolve, 100)); - let current = await browser.tabs.query({ windowId: win.id }); assert(current.length === 2); }); @@ -80,12 +77,12 @@ describe("tab test", () => { let body = await session.findElementByCSS('body'); await body.sendKeys('z', 'd'); - await new Promise(resolve => setTimeout(resolve, 1000)); - - let current = await browser.tabs.query({ windowId: win.id }); - current.sort((t1, t2) => t1.index - t2.index); - assert(current.length === tabs.length + 1); - assert(current[0].url === current[1].url); + await eventually(async() => { + let current = await browser.tabs.query({ windowId: win.id }); + current.sort((t1, t2) => t1.index - t2.index); + assert(current.length === tabs.length + 1); + assert(current[0].url === current[1].url); + }); }); it('makes pinned by zp', async () => { @@ -169,12 +166,7 @@ describe("tab test", () => { let body = await session.findElementByCSS('body'); await body.sendKeys('u'); - await new Promise(resolve => setTimeout(resolve, 2000)); - let current = await browser.tabs.query({ windowId: win.id }); - if (current.length !== tabs.length) { - await new Promise(resolve => setTimeout(resolve, 50000)); - } assert(current.length === tabs.length); }); @@ -201,10 +193,10 @@ describe("tab test", () => { let body = await session.findElementByCSS('body'); await body.sendKeys('g', 'f'); - await new Promise(resolve => setTimeout(resolve, 1000)); - - let current = await browser.tabs.query({ windowId: win.id }); - assert(current.length === tabs.length + 1); - assert(current[current.length - 1].url === `view-source:${url}#0`); + await eventually(async() => { + let current = await browser.tabs.query({ windowId: win.id }); + assert(current.length === tabs.length + 1); + assert(current[current.length - 1].url === `view-source:${url}#0`); + }); }); }); From f80f14f9d410b2fd8ce04fc4bc60d72906a1a121 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 19:34:36 +0900 Subject: [PATCH 07/13] Add zoom e2e test --- e2e-lanthan/zoom.test.js | 81 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 e2e-lanthan/zoom.test.js diff --git a/e2e-lanthan/zoom.test.js b/e2e-lanthan/zoom.test.js new file mode 100644 index 0000000..1f59e3d --- /dev/null +++ b/e2e-lanthan/zoom.test.js @@ -0,0 +1,81 @@ +const express = require('express'); +const lanthan = require('lanthan'); +const path = require('path'); +const assert = require('power-assert'); +const eventually = require('./eventually'); + +const Key = lanthan.Key; + +const newApp = () => { + let app = express(); + app.get('/', (req, res) => { + res.send(` + +`); + }); + return app; +}; + +describe("zoom test", () => { + + const port = 12321; + let http; + let firefox; + let session; + let browser; + let tab; + let body; + + before(async() => { + http = newApp().listen(port); + + firefox = await lanthan.firefox(); + await firefox.session.installAddon(path.join(__dirname, '..')); + session = firefox.session; + browser = firefox.browser; + tab = (await browser.tabs.query({}))[0] + }); + + after(async() => { + if (firefox) { + await firefox.close(); + } + http.close(); + }); + + beforeEach(async() => { + await session.navigateTo(`http://127.0.0.1:${port}`); + body = await session.findElementByCSS('body'); + }); + + it('should zoom in by zi', async () => { + let before = await browser.tabs.getZoom(tab.id); + await body.sendKeys('z', 'i'); + + await eventually(async() => { + let actual = await browser.tabs.getZoom(tab.id); + assert(before < actual); + }); + }); + + it('should zoom out by zo', async () => { + let before = await browser.tabs.getZoom(tab.id); + await body.sendKeys('z', 'o'); + + await eventually(async() => { + let actual = await browser.tabs.getZoom(tab.id); + assert(before > actual); + }); + }); + + it('scrolls left by h', async () => { + await browser.tabs.setZoom(tab.id, 2); + await body.sendKeys('z', 'z'); + + await eventually(async() => { + let actual = await browser.tabs.getZoom(tab.id); + assert(actual === 1); + }); + }); +}); + From 46eb287154b142ba39ecc9c7c4abde866435343e Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 20:10:19 +0900 Subject: [PATCH 08/13] Add navigate e2e tests --- e2e-lanthan/navigate.test.js | 167 +++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 e2e-lanthan/navigate.test.js diff --git a/e2e-lanthan/navigate.test.js b/e2e-lanthan/navigate.test.js new file mode 100644 index 0000000..5b3a794 --- /dev/null +++ b/e2e-lanthan/navigate.test.js @@ -0,0 +1,167 @@ +const express = require('express'); +const lanthan = require('lanthan'); +const path = require('path'); +const assert = require('power-assert'); +const eventually = require('./eventually'); + +const Key = lanthan.Key; + +const newApp = () => { + let app = express(); + app.get('/pagenation-a/:page', (req, res) => { + res.status(200).send(` + + prev + next +`); + }); + app.get('/pagenation-link/:page', (req, res) => { + res.status(200).send(` + + + + + +`); + }); + + app.get('/*', (req, res) => { + res.send(` + + ${req.path} +`); + }); + return app; +}; + +describe("zoom test", () => { + + const port = 12321; + let http; + let firefox; + let session; + let browser; + + before(async() => { + http = newApp().listen(port); + + firefox = await lanthan.firefox(); + await firefox.session.installAddon(path.join(__dirname, '..')); + session = firefox.session; + browser = firefox.browser; + }); + + after(async() => { + if (firefox) { + await firefox.close(); + } + http.close(); + }); + + it('should go to parent path without hash by gu', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/a/b/c`); + let body = await session.findElementByCSS('body'); + + await body.sendKeys('g', 'u'); + + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.pathname, `/a/b/`) + }); + + it('should remove hash by gu', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/a/b/c#hash`); + let body = await session.findElementByCSS('body'); + + await body.sendKeys('g', 'u'); + + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.hash, '') + assert.equal(url.pathname, `/a/b/c`) + }); + + it('should go to root path by gU', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/a/b/c#hash`); + let body = await session.findElementByCSS('body'); + + await body.sendKeys('g', Key.Shift, 'u'); + + await eventually(async() => { + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.pathname, `/`) + }); + }); + + it('should go back and forward in history by H and L', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/first`); + await session.navigateTo(`http://127.0.0.1:${port}/second`); + let body = await session.findElementByCSS('body'); + + await body.sendKeys(Key.Shift, 'h'); + + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.pathname, `/first`) + + body = await session.findElementByCSS('body'); + await body.sendKeys(Key.Shift, 'l'); + + tab = (await browser.tabs.query({}))[0]; + url = new URL(tab.url); + assert.equal(url.pathname, `/second`) + }); + + it('should go previous and next page in by [[ and ]]', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/pagenation-a/10`); + + let body = await session.findElementByCSS('body'); + await body.sendKeys('[', '['); + + await eventually(async() => { + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.pathname, '/pagenation-a/9'); + }); + }); + + it('should go next page in by ]]', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/pagenation-a/10`); + let body = await session.findElementByCSS('body'); + await body.sendKeys(']', ']'); + + await eventually(async() => { + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.pathname, '/pagenation-a/11'); + }); + }); + + it('should go previous page in by ]]', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/pagenation-link/10`); + + let body = await session.findElementByCSS('body'); + await body.sendKeys('[', '['); + + await eventually(async() => { + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.pathname, '/pagenation-link/9'); + }); + }); + + it('should go next page by in by [[', async () => { + await session.navigateTo(`http://127.0.0.1:${port}/pagenation-link/10`); + let body = await session.findElementByCSS('body'); + await body.sendKeys(']', ']'); + + await eventually(async() => { + let tab = (await browser.tabs.query({}))[0]; + let url = new URL(tab.url); + assert.equal(url.pathname, '/pagenation-link/11'); + }); + }); +}); + + From c9a0bf87d0ba81beb1b958c374a40c4b69f4192b Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 21:37:29 +0900 Subject: [PATCH 09/13] Add mark e2e tests --- e2e-lanthan/mark.test.js | 121 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 e2e-lanthan/mark.test.js diff --git a/e2e-lanthan/mark.test.js b/e2e-lanthan/mark.test.js new file mode 100644 index 0000000..abcef03 --- /dev/null +++ b/e2e-lanthan/mark.test.js @@ -0,0 +1,121 @@ +const express = require('express'); +const lanthan = require('lanthan'); +const path = require('path'); +const assert = require('power-assert'); +const eventually = require('./eventually'); + +const Key = lanthan.Key; + +const newApp = () => { + let app = express(); + app.get('/', (req, res) => { + res.send(` + + +`); + }); + return app; +}; + +describe("mark test", () => { + + const port = 12321; + let http; + let firefox; + let session; + let browser; + + before(async() => { + http = newApp().listen(port); + + firefox = await lanthan.firefox(); + await firefox.session.installAddon(path.join(__dirname, '..')); + session = firefox.session; + browser = firefox.browser; + }); + + after(async() => { + if (firefox) { + await firefox.close(); + } + http.close(); + }); + + it('should set a local mark and jump to it', async () => { + await session.navigateTo(`http://127.0.0.1:${port}`); + let body = await session.findElementByCSS('body'); + + await session.executeScript(() => window.scrollTo(200, 200)); + await body.sendKeys('m', 'a'); + await session.executeScript(() => window.scrollTo(500, 500)); + await body.sendKeys('\'', 'a'); + + await eventually(async() => { + let pageXOffset = await session.executeScript(() => window.pageXOffset); + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert.equal(pageXOffset, 200); + assert.equal(pageYOffset, 200); + }); + }); + + it('should set a global mark and jump to it', async () => { + await session.navigateTo(`http://127.0.0.1:${port}#first`); + let body = await session.findElementByCSS('body'); + + await session.executeScript(() => window.scrollTo(200, 200)); + await body.sendKeys('m', 'A'); + await session.executeScript(() => window.scrollTo(500, 500)); + await body.sendKeys('\'', 'A'); + + await eventually(async() => { + let pageXOffset = await session.executeScript(() => window.pageXOffset); + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert.equal(pageXOffset, 200); + assert.equal(pageYOffset, 200); + }); + + await browser.tabs.create({ url: `http://127.0.0.1:${port}#second` }); + body = await session.findElementByCSS('body'); + await body.sendKeys('\'', 'A'); + + await eventually(async() => { + let tab = (await browser.tabs.query({ active: true }))[0]; + let url = new URL(tab.url); + assert.equal(url.hash, '#first'); + + let pageXOffset = await session.executeScript(() => window.pageXOffset); + let pageYOffset = await session.executeScript(() => window.pageYOffset); + assert.equal(pageXOffset, 200); + assert.equal(pageYOffset, 200); + }); + }); + + it('set a global mark and creates new tab from gone', async () => { + await session.navigateTo(`http://127.0.0.1:${port}#first`); + await session.executeScript(() => window.scrollTo(500, 500)); + let body = await session.findElementByCSS('body'); + await body.sendKeys('m', 'A'); + + let tab = (await browser.tabs.query({ active: true }))[0]; + await browser.tabs.create({ url: `http://127.0.0.1:${port}#second` }); + await browser.tabs.remove(tab.id); + + let handles; + await eventually(async() => { + handles = await session.getWindowHandles(); + assert.equal(handles.length, 2); + }); + await session.switchToWindow(handles[0]); + await session.navigateTo(`http://127.0.0.1:${port}#second`); + body = await session.findElementByCSS('body'); + await body.sendKeys('\'', 'A'); + + await eventually(async() => { + let tab = (await browser.tabs.query({ active: true }))[0]; + let url = new URL(tab.url); + assert.equal(url.hash, '#first'); + }); + }); +}); + + From b04eecce7fea8b262411a5817924dc730cbe127a Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 21:48:16 +0900 Subject: [PATCH 10/13] Replace e2e with lanthan --- e2e-lanthan/server/MockServer.js | 58 -------- e2e-lanthan/server/handlers.js | 17 --- e2e/ambassador/manifest.json | 28 ---- e2e/ambassador/src/background/index.js | 49 ------- e2e/ambassador/src/background/ipc.js | 7 - e2e/ambassador/src/background/tabs.js | 28 ---- e2e/ambassador/src/client/ipc.js | 29 ---- e2e/ambassador/src/client/keys.js | 28 ---- e2e/ambassador/src/client/scrolls.js | 20 --- e2e/ambassador/src/client/tabs.js | 60 -------- e2e/ambassador/src/client/windows.js | 27 ---- e2e/ambassador/src/content/events.js | 31 ---- e2e/ambassador/src/content/index.js | 30 ---- e2e/ambassador/src/content/ipc.js | 40 ------ e2e/ambassador/src/content/scrolls.js | 20 --- e2e/ambassador/src/shared/messages.js | 40 ------ e2e/ambassador/webpack.config.js | 24 ---- e2e/contents/follow.test.js | 83 ----------- e2e/contents/mark.test.js | 71 --------- e2e/contents/navigate.test.js | 102 ------------- e2e/contents/scroll.test.js | 106 -------------- e2e/contents/tab.test.js | 192 ------------------------- e2e/contents/zoom.test.js | 53 ------- {e2e-lanthan => e2e}/eventually.js | 0 e2e/karma-delay.js | 10 -- e2e/karma-webext-launcher.js | 53 ------- e2e/karma.conf.js | 53 ------- e2e/main.js | 2 - {e2e-lanthan => e2e}/mark.test.js | 0 {e2e-lanthan => e2e}/navigate.test.js | 0 {e2e-lanthan => e2e}/scroll.test.js | 0 {e2e-lanthan => e2e}/tab.test.js | 0 e2e/web-server/index.js | 88 ------------ e2e/web-server/url.js | 5 - {e2e-lanthan => e2e}/zoom.test.js | 0 35 files changed, 1354 deletions(-) delete mode 100644 e2e-lanthan/server/MockServer.js delete mode 100644 e2e-lanthan/server/handlers.js delete mode 100644 e2e/ambassador/manifest.json delete mode 100644 e2e/ambassador/src/background/index.js delete mode 100644 e2e/ambassador/src/background/ipc.js delete mode 100644 e2e/ambassador/src/background/tabs.js delete mode 100644 e2e/ambassador/src/client/ipc.js delete mode 100644 e2e/ambassador/src/client/keys.js delete mode 100644 e2e/ambassador/src/client/scrolls.js delete mode 100644 e2e/ambassador/src/client/tabs.js delete mode 100644 e2e/ambassador/src/client/windows.js delete mode 100644 e2e/ambassador/src/content/events.js delete mode 100644 e2e/ambassador/src/content/index.js delete mode 100644 e2e/ambassador/src/content/ipc.js delete mode 100644 e2e/ambassador/src/content/scrolls.js delete mode 100644 e2e/ambassador/src/shared/messages.js delete mode 100644 e2e/ambassador/webpack.config.js delete mode 100644 e2e/contents/follow.test.js delete mode 100644 e2e/contents/mark.test.js delete mode 100644 e2e/contents/navigate.test.js delete mode 100644 e2e/contents/scroll.test.js delete mode 100644 e2e/contents/tab.test.js delete mode 100644 e2e/contents/zoom.test.js rename {e2e-lanthan => e2e}/eventually.js (100%) delete mode 100644 e2e/karma-delay.js delete mode 100644 e2e/karma-webext-launcher.js delete mode 100644 e2e/karma.conf.js delete mode 100644 e2e/main.js rename {e2e-lanthan => e2e}/mark.test.js (100%) rename {e2e-lanthan => e2e}/navigate.test.js (100%) rename {e2e-lanthan => e2e}/scroll.test.js (100%) rename {e2e-lanthan => e2e}/tab.test.js (100%) delete mode 100644 e2e/web-server/index.js delete mode 100644 e2e/web-server/url.js rename {e2e-lanthan => e2e}/zoom.test.js (100%) diff --git a/e2e-lanthan/server/MockServer.js b/e2e-lanthan/server/MockServer.js deleted file mode 100644 index 131c177..0000000 --- a/e2e-lanthan/server/MockServer.js +++ /dev/null @@ -1,58 +0,0 @@ -var http = require('http'); -var url = require('url'); -var handlers = require('./handlers'); - -class MockServer { - constructor() { - this.handlers = []; - this.server = undefined; - } - - start() { - if (this.server) { - throw new Error('Server is already started'); - } - - let listener = (req, res) => { - if (req.method !== 'GET') { - res.writeHead(404, {'Content-Type': 'text/plain'}); - res.end('not found') - return - } - - let u = url.parse(req.url); - let handler = this.handlers.find(h => u.pathname == h.pathname); - if (!handler) { - res.writeHead(404, {'Content-Type': 'text/plain'}); - res.end('not found') - return - } - - handler.handler(req, res); - } - - this.server = http.createServer(listener); - this.server.listen(); - } - - stop() { - if (!this.server) { - throw new Error('Server is not started'); - } - this.server.close(); - this.server = undefined; - } - - port() { - if (!this.server) { - throw new Error('Server is not started'); - } - return this.server.address().port - } - - on(pathname, handler) { - this.handlers.push({ pathname, handler }); - } -} - -module.exports = MockServer diff --git a/e2e-lanthan/server/handlers.js b/e2e-lanthan/server/handlers.js deleted file mode 100644 index 979b4be..0000000 --- a/e2e-lanthan/server/handlers.js +++ /dev/null @@ -1,17 +0,0 @@ -const handleText = (body) => { - return (req, res) => { - res.writeHead(200, {'Content-Type': 'text/plane'}); - res.end(body); - } -} - -const handleHtml = (body) => { - return (req, res) => { - res.writeHead(200, {'Content-Type': 'text/html'}); - res.end(body); - } -} - -module.exports = { - handleText, handleHtml -} diff --git a/e2e/ambassador/manifest.json b/e2e/ambassador/manifest.json deleted file mode 100644 index d2253f6..0000000 --- a/e2e/ambassador/manifest.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "manifest_version": 2, - "name": "ambassador", - "description": "WebExtension test helper", - "version": "0.1", - "content_scripts": [ - { - "all_frames": true, - "matches": [ "" ], - "js": [ "build/content.js" ], - "run_at": "document_start", - "match_about_blank": true - } - ], - "background": { - "scripts": [ - "build/background.js" - ] - }, - "permissions": [ - "history", - "sessions", - "storage", - "tabs", - "clipboardRead", - "activeTab" - ] -} diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js deleted file mode 100644 index ce21dc8..0000000 --- a/e2e/ambassador/src/background/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import { - WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, - TABS_CREATE, TABS_SELECT_AT, TABS_GET, TABS_UPDATE, TABS_REMOVE, - TABS_GET_ZOOM, TABS_SET_ZOOM, - EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, - SCROLL_GET, SCROLL_SET, -} from '../shared/messages'; -import * as tabs from './tabs'; -import { receiveContentMessage } from './ipc'; - -receiveContentMessage((message) => { - switch (message.type) { - case WINDOWS_CREATE: - return browser.windows.create({ url: message.url }); - case WINDOWS_REMOVE: - return browser.windows.remove(message.windowId); - case WINDOWS_GET: - return browser.windows.get(message.windowId, { populate: true }); - case TABS_CREATE: - return tabs.create({ - url: message.url, - windowId: message.windowId, - }); - case TABS_SELECT_AT: - return tabs.selectAt({ - windowId: message.windowId, - index: message.index, - }); - case TABS_GET: - return browser.tabs.get(message.tabId); - case TABS_UPDATE: - return browser.tabs.update(message.tabId, message.properties); - case TABS_REMOVE: - return browser.tabs.remove(message.tabId); - case TABS_GET_ZOOM: - return browser.tabs.getZoom(message.tabId); - case TABS_SET_ZOOM: - return browser.tabs.setZoom(message.tabId, message.factor); - case EVENT_KEYPRESS: - case EVENT_KEYDOWN: - case EVENT_KEYUP: - case SCROLL_GET: - case SCROLL_SET: - return browser.tabs.sendMessage( - message.tabId, - message - ); - } -}); diff --git a/e2e/ambassador/src/background/ipc.js b/e2e/ambassador/src/background/ipc.js deleted file mode 100644 index 95d2164..0000000 --- a/e2e/ambassador/src/background/ipc.js +++ /dev/null @@ -1,7 +0,0 @@ -const receiveContentMessage = (func) => { - browser.runtime.onMessage.addListener((message) => { - return func(message); - }); -}; - -export { receiveContentMessage }; diff --git a/e2e/ambassador/src/background/tabs.js b/e2e/ambassador/src/background/tabs.js deleted file mode 100644 index 5594134..0000000 --- a/e2e/ambassador/src/background/tabs.js +++ /dev/null @@ -1,28 +0,0 @@ -const create = (props = {}) => { - return new Promise((resolve) => { - browser.tabs.create(props).then((createdTab) => { - let callback = (tabId, changeInfo, tab) => { - if (tab.url !== 'about:blank' && tabId === createdTab.id && - changeInfo.status === 'complete') { - browser.tabs.onUpdated.removeListener(callback); - - // wait for 50 milliseconds to ensure plugin loaded; - setTimeout(() => resolve(tab), 50); - } - }; - browser.tabs.onUpdated.addListener(callback); - }); - }); -}; - -const selectAt = (props = {}) => { - return browser.tabs.query({ windowId: props.windowId }).then((tabs) => { - let target = tabs[props.index]; - return browser.tabs.update(target.id, { active: true }); - }); -}; - - -export { - create, selectAt -}; diff --git a/e2e/ambassador/src/client/ipc.js b/e2e/ambassador/src/client/ipc.js deleted file mode 100644 index 9f232ea..0000000 --- a/e2e/ambassador/src/client/ipc.js +++ /dev/null @@ -1,29 +0,0 @@ -import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages'; - -const generateId = () => { - return Math.random().toString(); -}; - -const send = (message) => { - return new Promise((resolve) => { - let id = generateId(); - let callback = (e) => { - let packet = e.data; - if (e.source !== window || packet.method !== METHOD_RESPONSE || - packet.id !== id) { - return; - } - window.removeEventListener('message', callback); - resolve(packet.message); - }; - window.addEventListener('message', callback); - - window.postMessage({ - id, - method: METHOD_REQUEST, - message - }, window.origin); - }); -}; - -export { send }; diff --git a/e2e/ambassador/src/client/keys.js b/e2e/ambassador/src/client/keys.js deleted file mode 100644 index 6b36c23..0000000 --- a/e2e/ambassador/src/client/keys.js +++ /dev/null @@ -1,28 +0,0 @@ -import { EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP } from '../shared/messages'; -import * as ipc from './ipc'; - -const NEUTRAL_MODIFIERS = { shiftKey: false, altKey: false, ctrlKey: false }; - -const press = (tabId, key, modifiers = NEUTRAL_MODIFIERS) => { - return ipc.send({ ...modifiers, - type: EVENT_KEYPRESS, - tabId, - key, }); -}; - -const down = (tabId, key, modifiers = NEUTRAL_MODIFIERS) => { - return ipc.send({ modifiers, - type: EVENT_KEYDOWN, - tabId, - key, }); -}; - - -const up = (tabId, key, modifiers = NEUTRAL_MODIFIERS) => { - return ipc.send({ modifiers, - type: EVENT_KEYUP, - tabId, - key, }); -}; - -export { press, down, up }; diff --git a/e2e/ambassador/src/client/scrolls.js b/e2e/ambassador/src/client/scrolls.js deleted file mode 100644 index f8f82e9..0000000 --- a/e2e/ambassador/src/client/scrolls.js +++ /dev/null @@ -1,20 +0,0 @@ -import { SCROLL_GET, SCROLL_SET } from '../shared/messages'; -import * as ipc from './ipc'; - -const get = (tabId) => { - return ipc.send({ - type: SCROLL_GET, - tabId, - }); -}; - -const set = (tabId, x, y) => { - return ipc.send({ - type: SCROLL_SET, - tabId, - x, - y, - }); -}; - -export { get, set }; diff --git a/e2e/ambassador/src/client/tabs.js b/e2e/ambassador/src/client/tabs.js deleted file mode 100644 index d0cd578..0000000 --- a/e2e/ambassador/src/client/tabs.js +++ /dev/null @@ -1,60 +0,0 @@ -import { - TABS_CREATE, TABS_SELECT_AT, TABS_GET, TABS_UPDATE, TABS_REMOVE, - TABS_GET_ZOOM, TABS_SET_ZOOM, -} from '../shared/messages'; -import * as ipc from './ipc'; - -const create = (windowId, url) => { - return ipc.send({ - type: TABS_CREATE, - windowId, - url, - }); -}; - -const selectAt = (windowId, index) => { - return ipc.send({ - type: TABS_SELECT_AT, - windowId, - index, - }); -}; - -const get = (tabId) => { - return ipc.send({ - type: TABS_GET, - tabId, - }); -}; - -const update = (tabId, properties) => { - return ipc.send({ - type: TABS_UPDATE, - tabId, - properties, - }); -}; - -const remove = (tabId) => { - return ipc.send({ - type: TABS_REMOVE, - tabId - }); -}; - -const getZoom = (tabId) => { - return ipc.send({ - tabId, - type: TABS_GET_ZOOM, - }); -}; - -const setZoom = (tabId, factor) => { - return ipc.send({ - type: TABS_SET_ZOOM, - tabId, - factor, - }); -}; - -export { create, selectAt, get, update, remove, getZoom, setZoom }; diff --git a/e2e/ambassador/src/client/windows.js b/e2e/ambassador/src/client/windows.js deleted file mode 100644 index f92405a..0000000 --- a/e2e/ambassador/src/client/windows.js +++ /dev/null @@ -1,27 +0,0 @@ -import { - WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET -} from '../shared/messages'; -import * as ipc from './ipc'; - -const create = (url) => { - return ipc.send({ - type: WINDOWS_CREATE, - url, - }); -}; - -const remove = (windowId) => { - return ipc.send({ - type: WINDOWS_REMOVE, - windowId, - }); -}; - -const get = (windowId) => { - return ipc.send({ - type: WINDOWS_GET, - windowId, - }); -}; - -export { create, remove, get }; diff --git a/e2e/ambassador/src/content/events.js b/e2e/ambassador/src/content/events.js deleted file mode 100644 index 1e45909..0000000 --- a/e2e/ambassador/src/content/events.js +++ /dev/null @@ -1,31 +0,0 @@ -const keypress = (opts) => { - let event = new KeyboardEvent('keypress', { - key: opts.key, - altKey: opts.altKey, - shiftKey: opts.shiftKey, - ctrlKey: opts.ctrlKey - }); - document.body.dispatchEvent(event); -}; - -const keydown = (opts) => { - let event = new KeyboardEvent('keydown', { - key: opts.key, - altKey: opts.altKey, - shiftKey: opts.shiftKey, - ctrlKey: opts.ctrlKey - }); - document.body.dispatchEvent(event); -}; - -const keyup = (opts) => { - let event = new KeyboardEvent('keyup', { - key: opts.key, - altKey: opts.altKey, - shiftKey: opts.shiftKey, - ctrlKey: opts.ctrlKey - }); - document.body.dispatchEvent(event); -}; - -export { keypress, keydown, keyup }; diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js deleted file mode 100644 index fd19136..0000000 --- a/e2e/ambassador/src/content/index.js +++ /dev/null @@ -1,30 +0,0 @@ -import { - EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, - SCROLL_GET, SCROLL_SET, -} from '../shared/messages'; -import * as ipc from './ipc'; -import * as events from './events'; -import * as scrolls from './scrolls'; - -ipc.receivePageMessage((message) => { - return ipc.sendToBackground(message); -}); - -ipc.receiveBackgroundMesssage((message) => { - switch (message.type) { - case EVENT_KEYPRESS: - events.keypress(message); - break; - case EVENT_KEYDOWN: - events.keydown(message); - break; - case EVENT_KEYUP: - events.keyup(message); - break; - case SCROLL_GET: - return Promise.resolve(scrolls.get()); - case SCROLL_SET: - return Promise.resolve(scrolls.set(message.x, message.y)); - } - return Promise.resolve({}); -}); diff --git a/e2e/ambassador/src/content/ipc.js b/e2e/ambassador/src/content/ipc.js deleted file mode 100644 index 917623c..0000000 --- a/e2e/ambassador/src/content/ipc.js +++ /dev/null @@ -1,40 +0,0 @@ -import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages'; - -const sendToBackground = (message) => { - return browser.runtime.sendMessage(message); -}; - -const receiveBackgroundMesssage = (func) => { - return browser.runtime.onMessage.addListener((message) => { - return Promise.resolve(func(message)); - }); -}; - -const receivePageMessage = (func) => { - window.addEventListener('message', (e) => { - let packet = e.data; - if (e.origin !== window.origin || packet.method !== METHOD_REQUEST) { - return; - } - - let resp = { - id: packet.id, - method: METHOD_RESPONSE, - }; - let respMessage = func(packet.message); - if (respMessage instanceof Promise) { - return respMessage.then((data) => { - resp.message = data; - e.source.postMessage(resp, e.origin); - }); - } else if (respMessage) { - resp.message = respMessage; - } - e.source.postMessage(resp, e.origin); - }); -}; - -export { - sendToBackground, receiveBackgroundMesssage, - receivePageMessage, -}; diff --git a/e2e/ambassador/src/content/scrolls.js b/e2e/ambassador/src/content/scrolls.js deleted file mode 100644 index 4227cf7..0000000 --- a/e2e/ambassador/src/content/scrolls.js +++ /dev/null @@ -1,20 +0,0 @@ -const get = () => { - let element = document.documentElement; - return { - xMax: element.scrollWidth - element.clientWidth, - yMax: element.scrollHeight - element.clientHeight, - x: element.scrollLeft, - y: element.scrollTop, - frameWidth: element.clientWidth, - frameHeight: element.clientHeight, - }; -}; - -const set = (x, y) => { - let element = document.documentElement; - element.scrollLeft = x; - element.scrollTop = y; - return get(); -}; - -export { get, set }; diff --git a/e2e/ambassador/src/shared/messages.js b/e2e/ambassador/src/shared/messages.js deleted file mode 100644 index 35c41d7..0000000 --- a/e2e/ambassador/src/shared/messages.js +++ /dev/null @@ -1,40 +0,0 @@ -const METHOD_REQUEST = 'request'; -const METHOD_RESPONSE = 'response'; -const WINDOWS_CREATE = 'windows.create'; -const WINDOWS_REMOVE = 'windows.remove'; -const WINDOWS_GET = 'windows.get'; -const TABS_CREATE = 'tabs.create'; -const TABS_SELECT_AT = 'tabs.selectAt'; -const TABS_GET = 'tabs.get'; -const TABS_UPDATE = 'tabs.update'; -const TABS_REMOVE = 'tabs.remove'; -const TABS_GET_ZOOM = 'tabs.get.zoom'; -const TABS_SET_ZOOM = 'tabs.set.zoom'; -const EVENT_KEYPRESS = 'event.keypress'; -const EVENT_KEYDOWN = 'event.keydown'; -const EVENT_KEYUP = 'event.keyup'; -const SCROLL_GET = 'scroll.get'; -const SCROLL_SET = 'scroll.set'; - -export { - METHOD_REQUEST, - METHOD_RESPONSE, - - WINDOWS_CREATE, - WINDOWS_REMOVE, - WINDOWS_GET, - - TABS_GET, - TABS_UPDATE, - TABS_CREATE, - TABS_SELECT_AT, - TABS_GET_ZOOM, - TABS_SET_ZOOM, - TABS_REMOVE, - - EVENT_KEYPRESS, - EVENT_KEYDOWN, - EVENT_KEYUP, - SCROLL_GET, - SCROLL_SET, -}; diff --git a/e2e/ambassador/webpack.config.js b/e2e/ambassador/webpack.config.js deleted file mode 100644 index d292317..0000000 --- a/e2e/ambassador/webpack.config.js +++ /dev/null @@ -1,24 +0,0 @@ -const path = require('path'); - -const src = path.resolve(__dirname, 'src'); -const dist = path.resolve(__dirname, 'build'); - -config = { - entry: { - content: path.join(src, 'content'), - background: path.join(src, 'background') - }, - - output: { - path: dist, - filename: '[name].js' - }, - - resolve: { - extensions: [ '.js' ], - modules: [path.join(__dirname, 'src'), 'node_modules'] - } -}; - -module.exports = config - diff --git a/e2e/contents/follow.test.js b/e2e/contents/follow.test.js deleted file mode 100644 index f78780b..0000000 --- a/e2e/contents/follow.test.js +++ /dev/null @@ -1,83 +0,0 @@ -import * as windows from "../ambassador/src/client/windows"; -import * as tabs from "../ambassador/src/client/tabs"; -import * as keys from "../ambassador/src/client/keys"; -import { CLIENT_URL } from '../web-server/url'; - -describe("tab test", () => { - let targetWindow; - - beforeEach(async () => { - targetWindow = await windows.create(CLIENT_URL); - }); - - afterEach(async () => { - await windows.remove(targetWindow.id); - });return - - it('follows link by `f`', async() => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); - await keys.press(tab.id, 'f'); - await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - await keys.press(tab.id, 'a'); - await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - - tab = tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/follow#a'); - }); - - it('follows link into new tab by `F`', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); - await keys.press(tab.id, 'F', { shiftKey: true }); - await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - await keys.press(tab.id, 'a'); - await new Promise(resolve => { setTimeout(() => resolve(), 500) }); - - let win = await windows.get(targetWindow.id); - let urls = win.tabs.map(t => t.url); - expect(urls).to.have.lengthOf(3); - expect(urls).to.include(CLIENT_URL + '/'); - expect(urls).to.include(CLIENT_URL + '/follow'); - expect(urls).to.include(CLIENT_URL + '/follow#a'); - }); - - it('follows link with target=_blank into new tab by `f`', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); - await keys.press(tab.id, 'f'); - await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - await keys.press(tab.id, 'b'); - await new Promise(resolve => { setTimeout(() => resolve(), 500) }); - - let win = await windows.get(targetWindow.id); - let urls = win.tabs.map(t => t.url); - expect(urls).to.have.lengthOf(3); - expect(urls).to.include(CLIENT_URL + '/'); - expect(urls).to.include(CLIENT_URL + '/follow'); - expect(urls).to.include(CLIENT_URL + '/follow#external'); - }); - - it('follows link with target=_blank into new tab by `F`', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); - await keys.press(tab.id, 'F', { shiftKey: true }); - await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - await keys.press(tab.id, 'b'); - await new Promise(resolve => { setTimeout(() => resolve(), 500) }); - - let win = await windows.get(targetWindow.id); - let urls = win.tabs.map(t => t.url); - expect(urls).to.have.lengthOf(3); - expect(urls).to.include(CLIENT_URL + '/'); - expect(urls).to.include(CLIENT_URL + '/follow'); - expect(urls).to.include(CLIENT_URL + '/follow#external'); - }); - - it('follows area by `F`', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); - await keys.press(tab.id, 'f'); - await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - await keys.press(tab.id, 'c'); - await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/follow#area'); - }); -}); diff --git a/e2e/contents/mark.test.js b/e2e/contents/mark.test.js deleted file mode 100644 index 85566bd..0000000 --- a/e2e/contents/mark.test.js +++ /dev/null @@ -1,71 +0,0 @@ -import * as windows from "../ambassador/src/client/windows"; -import * as tabs from "../ambassador/src/client/tabs"; -import * as keys from "../ambassador/src/client/keys"; -import * as scrolls from "../ambassador/src/client/scrolls"; -import { CLIENT_URL } from '../web-server/url'; - -describe("mark test", () => { - let targetWindow; - - before(async () => { - targetWindow = await windows.create(); - }); - - after(async () => { - await windows.remove(targetWindow.id); - }); - - it('set a local mark and jump to it', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/mark#local'); - await scrolls.set(tab.id, 100, 100); - await keys.press(tab.id, 'm'); - await keys.press(tab.id, 'a'); - - await scrolls.set(tab.id, 200, 200); - await keys.press(tab.id, "'"); - await keys.press(tab.id, 'a'); - - let scroll = await scrolls.get(tab.id); - expect(scroll.x).to.be.equals(100); - expect(scroll.y).to.be.equals(100); - }); - - it('set a global mark and jump to it', async () => { - let tab1 = await tabs.create(targetWindow.id, CLIENT_URL + '/mark#global1'); - await scrolls.set(tab1.id, 100, 100); - await keys.press(tab1.id, 'm'); - await keys.press(tab1.id, 'A'); - await new Promise(resolve => { setTimeout(() => resolve(), 100) }); - await scrolls.set(tab1.id, 200, 200); - - let tab2 = await tabs.create(targetWindow.id, CLIENT_URL + '/mark#global2'); - await keys.press(tab2.id, "'"); - await keys.press(tab2.id, 'A'); - await new Promise(resolve => { setTimeout(() => resolve(), 100) }); - - tab1 = await tabs.get(tab1.id); - expect(tab1.active).to.be.true; - let scroll = await scrolls.get(tab1.id); - expect(scroll.x).to.be.equals(100); - expect(scroll.y).to.be.equals(100); - }); - - it('set a global mark and creates new tab from gone', async () => { - let tab1 = await tabs.create(targetWindow.id, CLIENT_URL + '/mark#gone'); - await scrolls.set(tab1.id, 100, 100); - await keys.press(tab1.id, 'm'); - await keys.press(tab1.id, 'A'); - await tabs.remove(tab1.id); - await new Promise(resolve => { setTimeout(() => resolve(), 100) }); - - let tab2 = await tabs.create(targetWindow.id, CLIENT_URL + '/mark#newtab'); - await keys.press(tab2.id, "'"); - await keys.press(tab2.id, 'A'); - await new Promise(resolve => { setTimeout(() => resolve(), 100) }); - - let win = await windows.get(targetWindow.id); - let found = win.tabs.find(tab => tab.url === CLIENT_URL + '/mark#gone') - expect(found).to.be.an('object'); - expect(found.id).to.not.equal(tab1.id); - }); -}); diff --git a/e2e/contents/navigate.test.js b/e2e/contents/navigate.test.js deleted file mode 100644 index 32ed423..0000000 --- a/e2e/contents/navigate.test.js +++ /dev/null @@ -1,102 +0,0 @@ -import * as windows from "../ambassador/src/client/windows"; -import * as tabs from "../ambassador/src/client/tabs"; -import * as keys from "../ambassador/src/client/keys"; -import * as scrolls from "../ambassador/src/client/scrolls"; -import { CLIENT_URL } from '../web-server/url'; - -describe("navigate test", () => { - let targetWindow; - - before(async () => { - targetWindow = await windows.create(); - await tabs.create(targetWindow.id, CLIENT_URL); - }); - - after(async () => { - await windows.remove(targetWindow.id); - }); - - it('goes to parent', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c'); - await keys.press(tab.id, 'g'); - await keys.press(tab.id, 'u'); - await new Promise((resolve) => setTimeout(resolve, 10)); - - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/a/b/'); - }); - - it('removes hash', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c#navigate'); - await keys.press(tab.id, 'g'); - await keys.press(tab.id, 'u'); - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/a/b/c#'); - }); - - it('goes to root', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c'); - await keys.press(tab.id, 'g'); - await keys.press(tab.id, 'U', { shiftKey: true }); - await new Promise((resolve) => setTimeout(resolve, 10)); - - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/'); - }); - - it('goes back and forward in history', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/#navigate'); - await keys.press(tab.id, 'g'); - await keys.press(tab.id, 'u'); - await keys.press(tab.id, 'H', { shiftKey: true }); - await new Promise((resolve) => setTimeout(resolve, 10)); - - tab = await tabs.get(tab.id); - expect(tab.url, 'go back in history').to.be.equal(CLIENT_URL + '/#navigate'); - await new Promise((resolve) => setTimeout(resolve, 10)); - await keys.press(tab.id, 'L', { shiftKey: true }); - - tab = await tabs.get(tab.id); - expect(tab.url, 'go next in history').to.be.equal(CLIENT_URL + '/#'); - }); - - it('goes previous page by ', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10'); - await keys.press(tab.id, '['); - await keys.press(tab.id, '['); - await new Promise((resolve) => setTimeout(resolve, 10)); - - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=9'); - }) - - it('goes next page by ', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10'); - await keys.press(tab.id, ']'); - await keys.press(tab.id, ']'); - await new Promise((resolve) => setTimeout(resolve, 100)); - - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=11'); - }) - - it('goes previous page by ', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10'); - await keys.press(tab.id, '['); - await keys.press(tab.id, '['); - await new Promise((resolve) => setTimeout(resolve, 10)); - - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=9'); - }) - - it('goes next page by ', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10'); - await keys.press(tab.id, ']'); - await keys.press(tab.id, ']'); - await new Promise((resolve) => setTimeout(resolve, 10)); - - tab = await tabs.get(tab.id); - expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=11'); - }) -}); diff --git a/e2e/contents/scroll.test.js b/e2e/contents/scroll.test.js deleted file mode 100644 index f364890..0000000 --- a/e2e/contents/scroll.test.js +++ /dev/null @@ -1,106 +0,0 @@ -import * as windows from "../ambassador/src/client/windows"; -import * as tabs from "../ambassador/src/client/tabs"; -import * as keys from "../ambassador/src/client/keys"; -import * as scrolls from "../ambassador/src/client/scrolls"; -import { CLIENT_URL } from '../web-server/url'; - -describe("scroll test", () => { - let targetWindow; - let targetTab; - - before(async () => { - targetWindow = await windows.create(); - targetTab = await tabs.create(targetWindow.id, CLIENT_URL + '/scroll'); - }); - - after(async () => { - await windows.remove(targetWindow.id); - }); - - it('scrolls up by k', async () => { - let before = await scrolls.set(targetTab.id, 100, 100); - await keys.press(targetTab.id, 'k'); - - let actual = await scrolls.get(targetTab.id); - expect(actual.y).to.be.lessThan(before.y); - }); - - it('scrolls down by j', async () => { - let before = await scrolls.set(targetTab.id, 100, 100); - await keys.press(targetTab.id, 'j'); - - let actual = await scrolls.get(targetTab.id); - expect(actual.y).to.be.greaterThan(before.y); - }); - - it('scrolls left by h', async () => { - let before = await scrolls.set(targetTab.id, 100, 100) - await keys.press(targetTab.id, 'h'); - - let actual = await scrolls.get(targetTab.id); - expect(actual.x).to.be.lessThan(before.x); - }); - - it('scrolls top by gg', async () => { - await scrolls.set(targetTab.id, 100, 100); - await keys.press(targetTab.id, 'g'); - await keys.press(targetTab.id, 'g'); - let actual = await scrolls.get(targetTab.id); - expect(actual.y).to.be.equals(0); - }); - - it('scrolls bottom by G', async () => { - await scrolls.set(targetTab.id, 100, 100); - await keys.press(targetTab.id, 'G', { shiftKey: true }); - - let actual = await scrolls.get(targetTab.id); - expect(actual.y).to.be.equals(actual.yMax); - }); - - it('scrolls bottom by 0', async () => { - await scrolls.set(targetTab.id, 100, 100); - await keys.press(targetTab.id, '0'); - - let actual = await scrolls.get(targetTab.id); - expect(actual.x).to.be.equals(0); - }); - - it('scrolls bottom by $', async () => { - await scrolls.set(targetTab.id, 100, 100); - await keys.press(targetTab.id, '$'); - - let actual = await scrolls.get(targetTab.id); - expect(actual.x).to.be.equals(actual.xMax); - }); - - it('scrolls bottom by ', async () => { - let before = await scrolls.set(targetTab.id, 5000, 5000); - await keys.press(targetTab.id, 'u', { ctrlKey: true }); - - let actual = await scrolls.get(targetTab.id); - expect(actual.y).to.closeTo(before.y - before.frameHeight / 2, 1); - }); - - it('scrolls bottom by ', async () => { - let before = await scrolls.set(targetTab.id, 5000, 5000); - await keys.press(targetTab.id, 'd', { ctrlKey: true }); - - let actual = await scrolls.get(targetTab.id); - expect(actual.y).to.closeTo(before.y + before.frameHeight / 2, 1); - }); - - it('scrolls bottom by ', async () => { - let before = await scrolls.set(targetTab.id, 5000, 5000); - await keys.press(targetTab.id, 'b', { ctrlKey: true }); - - let actual = await await scrolls.get(targetTab.id); - expect(actual.y).to.equals(before.y - before.frameHeight); - }); - - it('scrolls bottom by ', async () => { - let before = await scrolls.set(targetTab.id, 5000, 5000); - await keys.press(targetTab.id, 'f', { ctrlKey: true }); - let actual = await scrolls.get(targetTab.id); - expect(actual.y).to.equals(before.y + before.frameHeight); - }); -}); diff --git a/e2e/contents/tab.test.js b/e2e/contents/tab.test.js deleted file mode 100644 index 3c98dc9..0000000 --- a/e2e/contents/tab.test.js +++ /dev/null @@ -1,192 +0,0 @@ -import * as windows from "../ambassador/src/client/windows"; -import * as tabs from "../ambassador/src/client/tabs"; -import * as keys from "../ambassador/src/client/keys"; -import { CLIENT_URL } from '../web-server/url'; - -describe("tab test", () => { - let targetWindow; - - beforeEach(async () => { - targetWindow = await windows.create(CLIENT_URL); - }); - - afterEach(async () => { - await windows.remove(targetWindow.id); - }); - - it('deletes tab by d', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL); - let before = await windows.get(targetWindow.id); - await keys.press(tab.id, 'd'); - - let actual = await windows.get(targetWindow.id); - expect(actual.tabs).to.have.lengthOf(before.tabs.length - 1); - }); - - it('deletes tabs to the right by D', async () => { - let tab1 = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - - let before = await windows.get(targetWindow.id) - let tab = await tabs.selectAt(targetWindow.id, tab1.index) - await keys.press(tab.id, 'D', { shiftKey: true }); - - let actual = await windows.get(targetWindow.id); - expect(actual.tabs).to.have.lengthOf(before.tabs.length - 2); - }); - - it('duplicates tab by zd', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL); - let before = await windows.get(targetWindow.id) - await keys.press(tab.id, 'z'); - await keys.press(tab.id, 'd'); - - let actual = await windows.get(targetWindow.id); - expect(actual.tabs).to.have.lengthOf(before.tabs.length + 1); - }); - - it('makes pinned by zp', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL); - let before = await windows.get(targetWindow.id); - await keys.press(tab.id, 'z'); - await keys.press(tab.id, 'p'); - - let actual = await windows.get(targetWindow.id); - expect(actual.tabs[0].pinned).to.be.true; - }); - - it('selects previous tab by K', async () => { - await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - let tab = await tabs.selectAt(targetWindow.id, 2); - await keys.press(tab.id, 'K', { shiftKey: true }); - - let win = await windows.get(targetWindow.id); - expect(win.tabs[1].active).to.be.true; - }); - - it('selects previous tab by K rotatory', async () => { - await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - let tab = await tabs.selectAt(targetWindow.id, 0); - await keys.press(tab.id, 'K', { shiftKey: true }); - - let win = await windows.get(targetWindow.id); - expect(win.tabs[3].active).to.be.true; - }); - - it('selects next tab by J', async () => { - await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - let tab = await tabs.selectAt(targetWindow.id, 2); - await keys.press(tab.id, 'J', { shiftKey: true }); - - let win = await windows.get(targetWindow.id); - expect(win.tabs[3].active).to.be.true; - }); - - it('selects previous tab by J rotatory', async () => { - await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - let tab = await tabs.selectAt(targetWindow.id, 3); - await keys.press(tab.id, 'J', { shiftKey: true }); - - let win = await windows.get(targetWindow.id); - expect(win.tabs[0].active).to.be.true; - }); - - it('selects first tab by g0', async () => { - await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - let tab = await tabs.selectAt(targetWindow.id, 2); - await keys.press(tab.id, 'g'); - await keys.press(tab.id, '0'); - - let win = await windows.get(targetWindow.id); - expect(win.tabs[0].active).to.be.true; - }); - - it('selects last tab by g$', async () => { - await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - let tab = await tabs.selectAt(targetWindow.id, 2); - await keys.press(tab.id, 'g'); - await keys.press(tab.id, '$'); - - let win = await windows.get(targetWindow.id); - expect(win.tabs[3].active).to.be.true; - }); - - it('selects last selected tab by ', async () => { - await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await tabs.create(targetWindow.id, CLIENT_URL + '#2'); - await tabs.create(targetWindow.id, CLIENT_URL + '#3'); - await tabs.selectAt(targetWindow.id, 1); - let tab = await tabs.selectAt(targetWindow.id, 3); - await keys.press(tab.id, '6', { ctrlKey: true }); - - let win = await windows.get(targetWindow.id); - expect(win.tabs[1].active).to.be.true; - }); - - it('deletes tab by d', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await keys.press(tab.id, 'd'); - - let win = await windows.get(targetWindow.id); - expect(win.tabs).to.have.lengthOf(1); - }); - - it('reopen tab by u', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - await keys.press(tab.id, 'd'); - - let win = await windows.get(targetWindow.id); - expect(win.tabs).to.have.lengthOf(1); - - await keys.press(win.tabs[0].id, 'u'); - await new Promise(resolve => setTimeout(resolve, 100)); - - win = await windows.get(targetWindow.id); - expect(win.tabs).to.have.lengthOf(2); - }); - - it('does not delete pinned tab by d', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - tab = await tabs.update(tab.id, { pinned: true }); - await keys.press(tab.id, 'd'); - - let win = await windows.get(targetWindow.id); - expect(win.tabs).to.have.lengthOf(2); - }); - - it('deletes pinned tab by !d', async () => { - let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); - tab = await tabs.update(tab.id, { pinned: true }); - await keys.press(tab.id, '!'); - await keys.press(tab.id, 'd'); - - let win = await windows.get(targetWindow.id); - expect(win.tabs).to.have.lengthOf(1); - }); - - it('opens view-source by gf', async () => { - await new Promise(resolve => setTimeout(resolve, 100)); - let win = await windows.get(targetWindow.id); - let tab = win.tabs[0]; - await keys.press(tab.id, 'g'); - await keys.press(tab.id, 'f'); - await new Promise(resolve => setTimeout(resolve, 500)); - - win = await windows.get(targetWindow.id); - let urls = win.tabs.map((t) => t.url) - expect(urls).to.include.members([CLIENT_URL + '/', 'view-source:' + CLIENT_URL + '/']); - }); -}); diff --git a/e2e/contents/zoom.test.js b/e2e/contents/zoom.test.js deleted file mode 100644 index 74d4f56..0000000 --- a/e2e/contents/zoom.test.js +++ /dev/null @@ -1,53 +0,0 @@ -import * as windows from "../ambassador/src/client/windows"; -import * as tabs from "../ambassador/src/client/tabs"; -import * as keys from "../ambassador/src/client/keys"; -import { CLIENT_URL } from '../web-server/url'; - -describe("zoom test", () => { - let targetWindow; - let targetTab; - - before(async () => { - targetWindow = await windows.create(CLIENT_URL); - }); - - after(async () => { - await windows.remove(targetWindow.id); - }); - - beforeEach(async () => { - targetTab = await tabs.create(targetWindow.id, CLIENT_URL); - }); - - it('zooms-in by zi', async () => { - let before = await tabs.getZoom(targetTab.id); - await keys.press(targetTab.id, 'z'); - await keys.press(targetTab.id, 'i'); - await new Promise(resolve => setTimeout(resolve, 100)); - - let actual = await tabs.getZoom(targetTab.id); - expect(actual).to.be.greaterThan(before); - }); - - it('zooms-in by zo', async () => { - let before = await tabs.getZoom(targetTab.id); - await keys.press(targetTab.id, 'z'); - await keys.press(targetTab.id, 'o'); - await new Promise(resolve => setTimeout(resolve, 100)); - - let actual = await tabs.getZoom(targetTab.id); - expect(actual).to.be.lessThan(before); - }); - - it('zooms-in by zz', async () => { - await tabs.setZoom(targetTab.id, 1.5); - let before = await tabs.getZoom(targetTab.id); - await keys.press(targetTab.id, 'z'); - await keys.press(targetTab.id, 'z'); - await new Promise(resolve => setTimeout(resolve, 100)); - - let actual = await tabs.getZoom(targetTab.id); - expect(actual).to.be.lessThan(before); - expect(actual).to.equal(1); - }); -}); diff --git a/e2e-lanthan/eventually.js b/e2e/eventually.js similarity index 100% rename from e2e-lanthan/eventually.js rename to e2e/eventually.js diff --git a/e2e/karma-delay.js b/e2e/karma-delay.js deleted file mode 100644 index 7d18c4a..0000000 --- a/e2e/karma-delay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -window.__karma__.start = (function(start){ -return function(){ - var args = arguments - setTimeout(() => { - start(args) - }, 3000); -}; -}(window.__karma__.start)); diff --git a/e2e/karma-webext-launcher.js b/e2e/karma-webext-launcher.js deleted file mode 100644 index e0a3e42..0000000 --- a/e2e/karma-webext-launcher.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict' - -var fs = require('fs') -var path = require('path') - -var PREFS = { - 'browser.shell.checkDefaultBrowser': 'false', - 'browser.bookmarks.restore_default_bookmarks': 'false', - 'dom.disable_open_during_load': 'false', - 'dom.max_script_run_time': '0', - 'dom.min_background_timeout_value': '10', - 'extensions.autoDisableScopes': '0', - 'extensions.enabledScopes': '15', -} - -var FirefoxWebExt = function (id, baseBrowserDecorator, args) { - baseBrowserDecorator(this) - - this._start = function (url) { - var self = this - var command = this._getCommand() - - let prefArgs = [].concat(...Object.keys(PREFS).map((key) => { - return ['--pref', key + '=' + PREFS[key]]; - })); - let sourceDirArgs = [].concat(...args.sourceDirs.map((dir) => { - return ['--source-dir', dir]; - })); - - self._execCommand( - command, - ['run', '--start-url', url, '--no-input'].concat(sourceDirArgs, prefArgs) - ) - } -} - -FirefoxWebExt.prototype = { - name: 'FirefoxWebExt', - - DEFAULT_CMD: { - linux: 'node_modules/web-ext/bin/web-ext', - darwin: 'node_modules/web-ext/bin/web-ext', - win32: 'node_modules/web-ext/bin/web-ext', - } -} - -FirefoxWebExt.$inject = ['id', 'baseBrowserDecorator', 'args'] - -// PUBLISH DI MODULE -module.exports = { - 'launcher:FirefoxWebExt': ['type', FirefoxWebExt], -} - diff --git a/e2e/karma.conf.js b/e2e/karma.conf.js deleted file mode 100644 index fcda415..0000000 --- a/e2e/karma.conf.js +++ /dev/null @@ -1,53 +0,0 @@ -module.exports = function (config) { - - config.set({ - basePath: '', - frameworks: ['mocha'], - files: [ - 'main.js', - 'karma-delay.js', - '**/*.test.js' - ], - - preprocessors: { - '**/main.js': ['webpack'], - '**/*.test.js': ['webpack'] - }, - - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - - customLaunchers: { - FirefoxWebExtRunner: { - base: 'FirefoxWebExt', - sourceDirs: [ '.', 'e2e/ambassador'], - }, - }, - browsers: ['FirefoxWebExtRunner'], - sauceLabs: { - username: 'michael_jackson' - }, - - singleRun: true, - - webpackMiddleware: { - noInfo: true - }, - - reporters: ['mocha'], - - plugins: [ - require('./karma-webext-launcher'), - 'karma-mocha', - 'karma-webpack', - 'karma-mocha-reporter', - ], - - client: { - mocha: { - timeout: 5000 - } - } - }) -} diff --git a/e2e/main.js b/e2e/main.js deleted file mode 100644 index d923aaa..0000000 --- a/e2e/main.js +++ /dev/null @@ -1,2 +0,0 @@ -import chai from 'chai'; -global.expect = chai.expect; diff --git a/e2e-lanthan/mark.test.js b/e2e/mark.test.js similarity index 100% rename from e2e-lanthan/mark.test.js rename to e2e/mark.test.js diff --git a/e2e-lanthan/navigate.test.js b/e2e/navigate.test.js similarity index 100% rename from e2e-lanthan/navigate.test.js rename to e2e/navigate.test.js diff --git a/e2e-lanthan/scroll.test.js b/e2e/scroll.test.js similarity index 100% rename from e2e-lanthan/scroll.test.js rename to e2e/scroll.test.js diff --git a/e2e-lanthan/tab.test.js b/e2e/tab.test.js similarity index 100% rename from e2e-lanthan/tab.test.js rename to e2e/tab.test.js diff --git a/e2e/web-server/index.js b/e2e/web-server/index.js deleted file mode 100644 index 376e118..0000000 --- a/e2e/web-server/index.js +++ /dev/null @@ -1,88 +0,0 @@ -'use strict'; - -var serverUrl = require('./url'); -var http = require('http'); -var url = require('url'); - -const handleScroll = (req, res) => { - res.writeHead(200, {'Content-Type': 'text/html'}); - res.end(''); -}; - -const handleAPagenation = (req, res) => { - let u = url.parse(req.url); - let params = new url.URLSearchParams(u.search); - let page = params.get('page') === null ? null : Number(params.get('page')); - if (page === null || isNaN(page)) { - return handle404(req, res); - } - - let body = ''; - let nextLink = u.pathname + '?page=' + (page + 1); - let prevLink = u.pathname + '?page=' + (page - 1); - - if (page > 1) { - body += 'prev | '; - } - body += 'next'; - - res.writeHead(200, {'Content-Type': 'text/html'}); - res.end('' + body + ''); -}; - -const handleLinkPagenation = (req, res) => { - let u = url.parse(req.url); - let params = new url.URLSearchParams(u.search); - let page = params.get('page') === null ? null : Number(params.get('page')); - if (page === null || isNaN(page)) { - return handle404(req, res); - } - - let head = ''; - let nextLink = u.pathname + '?page=' + (page + 1); - let prevLink = u.pathname + '?page=' + (page - 1); - - if (page > 1) { - head += ''; - } - head += ''; - - res.writeHead(200, {'Content-Type': 'text/html'}); - res.end('' + head + ''); -}; - -const handleFollow = (req, res) => { - let body = ''; - body += 'a'; - body += 'external'; - body += '' - - res.writeHead(200, {'Content-Type': 'text/html'}); - res.end('' + body + ''); -} - -const handle404 = (req, res) => { - res.writeHead(404, {'Content-Type': 'text/plain'}); - res.end('not found') -}; - -http.createServer(function (req, res) { - if (req.method !== 'GET') { - handle404(req, res); - } - - let u = url.parse(req.url); - if (u.pathname === '/scroll' || u.pathname === '/mark') { - handleScroll(req, res); - } else if (u.pathname === '/a-pagenation') { - handleAPagenation(req, res); - } else if (u.pathname === '/link-pagenation') { - handleLinkPagenation(req, res); - } else if (u.pathname === '/follow') { - handleFollow(req, res); - } else { - handle404(req, res); - } - - console.log(`"${req.method} ${req.url}"`, res.statusCode) -}).listen(serverUrl.PORT, serverUrl.HOST); diff --git a/e2e/web-server/url.js b/e2e/web-server/url.js deleted file mode 100644 index 37f3d84..0000000 --- a/e2e/web-server/url.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - PORT: 11111, - HOST: '127.0.0.1', - CLIENT_URL: 'http://127.0.0.1:11111', -} diff --git a/e2e-lanthan/zoom.test.js b/e2e/zoom.test.js similarity index 100% rename from e2e-lanthan/zoom.test.js rename to e2e/zoom.test.js From 69bfd5953165fbdc9165c17f31f363e8efd8ab27 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 21:50:08 +0900 Subject: [PATCH 11/13] Configure build script to run e2e --- .circleci/config.yml | 18 +++++++++++++++--- .gitignore | 1 - package.json | 6 ++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4116684..2d83bc3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,6 +6,7 @@ executors: - image: circleci/node:10-stretch-browsers environment: - FIREFOX_VERSION: "60.0esr" + - GECKODRIVER_VERSION: "0.24.0" working_directory: ~ commands: @@ -29,6 +30,18 @@ commands: - ~/firefox - run: echo 'export PATH=~/firefox/$FIREFOX_VERSION:$PATH' >> $BASH_ENV + install_geckodriver: + steps: + - run: + name: Install geckodriver + command: | + mkdir -p geckodriver + + url=https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz + curl -sSLf "$url" | tar -C geckodriver xvf - + + echo 'export PATH=~/geckodriver/$GECKODRIVER_VERSION:$PATH' >> $BASH_ENV + setup_npm: steps: - restore_cache: @@ -61,10 +74,9 @@ jobs: - checkout - setup_npm - run: npm run build - - run: npm run ambassador:build - run: - name: Run web server - command: node e2e/web-server + name: Run geckodriver + command: geckodriver background: true - run: npm run test:e2e diff --git a/.gitignore b/.gitignore index 918565a..10a2021 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /node_modules/ /build/ -/e2e/ambassador/build/ *.zip lanthan-driver.log diff --git a/package.json b/package.json index 975ae6b..08d3782 100644 --- a/package.json +++ b/package.json @@ -5,11 +5,9 @@ "start": "webpack --mode development -w --debug --devtool inline-source-map", "build": "NODE_ENV=production webpack --mode production --progress --display-error-details", "package": "npm run build && script/package.sh", - "lint": "eslint --ext .jsx,.js src e2e/ambassador/src", + "lint": "eslint --ext .jsx,.js src", "test": "karma start", - "test:e2e": "karma start e2e/karma.conf.js", - "ambassador:start": "webpack --mode production -w --debug --context e2e/ambassador --config e2e/ambassador/webpack.config.js --devtool inline-source-map", - "ambassador:build": "webpack --mode production --context e2e/ambassador --config e2e/ambassador/webpack.config.js" + "test:e2e": "mocha --timeout 5000 e2e" }, "repository": { "type": "git", From c91634b093c07ec53a12e08fc8ef427703155687 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 22:21:32 +0900 Subject: [PATCH 12/13] Update lanthan --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 3dd0ae1..5ef99eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9049,7 +9049,7 @@ } }, "lanthan": { - "version": "git+https://github.com/ueokande/lanthan.git#47935d5481f3e7c369e5b8d33433abf4a664a21f", + "version": "git+https://github.com/ueokande/lanthan.git#4ae32c1443b7f3f48dd214db0f275144aa3ad23d", "from": "git+https://github.com/ueokande/lanthan.git#master", "dev": true, "requires": { From b604a942a84d7c5d54029b48ae698d15ffe4f5ac Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 6 Apr 2019 22:33:08 +0900 Subject: [PATCH 13/13] Use native assert instead of power-assert --- e2e/eventually.js | 2 - e2e/mark.test.js | 2 +- e2e/navigate.test.js | 2 +- e2e/scroll.test.js | 2 +- e2e/tab.test.js | 2 +- e2e/zoom.test.js | 2 +- package-lock.json | 411 ------------------------------------------- package.json | 2 - 8 files changed, 5 insertions(+), 420 deletions(-) diff --git a/e2e/eventually.js b/e2e/eventually.js index c04c277..ab0ae25 100644 --- a/e2e/eventually.js +++ b/e2e/eventually.js @@ -1,5 +1,3 @@ -const assert = require('assert'); - let defaultInterval = 100; let defaultTimeout = 2000; diff --git a/e2e/mark.test.js b/e2e/mark.test.js index abcef03..8f350b7 100644 --- a/e2e/mark.test.js +++ b/e2e/mark.test.js @@ -1,7 +1,7 @@ const express = require('express'); const lanthan = require('lanthan'); const path = require('path'); -const assert = require('power-assert'); +const assert = require('assert'); const eventually = require('./eventually'); const Key = lanthan.Key; diff --git a/e2e/navigate.test.js b/e2e/navigate.test.js index 5b3a794..089fa56 100644 --- a/e2e/navigate.test.js +++ b/e2e/navigate.test.js @@ -1,7 +1,7 @@ const express = require('express'); const lanthan = require('lanthan'); const path = require('path'); -const assert = require('power-assert'); +const assert = require('assert'); const eventually = require('./eventually'); const Key = lanthan.Key; diff --git a/e2e/scroll.test.js b/e2e/scroll.test.js index 7b13a72..32b0012 100644 --- a/e2e/scroll.test.js +++ b/e2e/scroll.test.js @@ -1,7 +1,7 @@ const express = require('express'); const lanthan = require('lanthan'); const path = require('path'); -const assert = require('power-assert'); +const assert = require('assert'); const Key = lanthan.Key; diff --git a/e2e/tab.test.js b/e2e/tab.test.js index 93b0fc6..39338aa 100644 --- a/e2e/tab.test.js +++ b/e2e/tab.test.js @@ -1,7 +1,7 @@ const express = require('express'); const lanthan = require('lanthan'); const path = require('path'); -const assert = require('power-assert'); +const assert = require('assert'); const eventually = require('./eventually'); const Key = lanthan.Key; diff --git a/e2e/zoom.test.js b/e2e/zoom.test.js index 1f59e3d..bc89628 100644 --- a/e2e/zoom.test.js +++ b/e2e/zoom.test.js @@ -1,7 +1,7 @@ const express = require('express'); const lanthan = require('lanthan'); const path = require('path'); -const assert = require('power-assert'); +const assert = require('assert'); const eventually = require('./eventually'); const Key = lanthan.Key; diff --git a/package-lock.json b/package-lock.json index 5ef99eb..c747cfe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -492,12 +492,6 @@ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true }, - "acorn-es7-plugin": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz", - "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=", - "dev": true - }, "acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", @@ -1174,12 +1168,6 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "dev": true - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -2376,24 +2364,6 @@ } } }, - "call-matcher": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.1.0.tgz", - "integrity": "sha512-IoQLeNwwf9KTNbtSA7aEBb1yfDbdnzwjCetjkC8io5oGeOmK2CBNdg0xr+tadRYKO0p7uQyZzvon0kXlZbvGrw==", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "deep-equal": "^1.0.0", - "espurify": "^1.6.0", - "estraverse": "^4.0.0" - } - }, - "call-signature": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz", - "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=", - "dev": true - }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -3472,12 +3442,6 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "diff-match-patch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", - "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==", - "dev": true - }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -3889,12 +3853,6 @@ "stream-shift": "^1.0.0" } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -3947,35 +3905,6 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, - "empower": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/empower/-/empower-1.3.1.tgz", - "integrity": "sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA==", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "empower-core": "^1.2.0" - } - }, - "empower-assert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/empower-assert/-/empower-assert-1.1.0.tgz", - "integrity": "sha512-Ylck0Q6p8y/LpNzYeBccaxAPm2ZyuqBgErgZpO9KT0HuQWF0sJckBKCLmgS1/DEXEiyBi9XtYh3clZm5cAdARw==", - "dev": true, - "requires": { - "estraverse": "^4.2.0" - } - }, - "empower-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-1.2.0.tgz", - "integrity": "sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ==", - "dev": true, - "requires": { - "call-signature": "0.0.2", - "core-js": "^2.0.0" - } - }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -4233,24 +4162,6 @@ "es6-symbol": "^3.1.1" } }, - "escallmatch": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/escallmatch/-/escallmatch-1.5.0.tgz", - "integrity": "sha1-UAmdhugJGwkt+N37w/mm+wWgJNA=", - "dev": true, - "requires": { - "call-matcher": "^1.0.0", - "esprima": "^2.0.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - } - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4263,34 +4174,6 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, "escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", @@ -4878,75 +4761,6 @@ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", "dev": true }, - "espower": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/espower/-/espower-2.1.2.tgz", - "integrity": "sha512-2qa3aEFtcgPB782jTKDPu82hOdw8+zJsWdOn12Tey8XlexHTqsYUIdLC2B7cUECENXly0vZblH1CEZcqttPNjw==", - "dev": true, - "requires": { - "array-find": "^1.0.0", - "escallmatch": "^1.5.0", - "escodegen": "^1.7.0", - "escope": "^3.3.0", - "espower-location-detector": "^1.0.0", - "espurify": "^1.3.0", - "estraverse": "^4.1.0", - "source-map": "^0.5.0", - "type-name": "^2.0.0" - } - }, - "espower-loader": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/espower-loader/-/espower-loader-1.2.2.tgz", - "integrity": "sha1-7bRsPFmga6yOpzppXIblxaC8gto=", - "dev": true, - "requires": { - "convert-source-map": "^1.1.0", - "espower-source": "^2.0.0", - "minimatch": "^3.0.0", - "source-map-support": "^0.4.0", - "xtend": "^4.0.0" - } - }, - "espower-location-detector": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz", - "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=", - "dev": true, - "requires": { - "is-url": "^1.2.1", - "path-is-absolute": "^1.0.0", - "source-map": "^0.5.0", - "xtend": "^4.0.0" - } - }, - "espower-source": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/espower-source/-/espower-source-2.3.0.tgz", - "integrity": "sha512-Wc4kC4zUAEV7Qt31JRPoBUc5jjowHRylml2L2VaDQ1XEbnqQofGWx+gPR03TZAPokAMl5dqyL36h3ITyMXy3iA==", - "dev": true, - "requires": { - "acorn": "^5.0.0", - "acorn-es7-plugin": "^1.0.10", - "convert-source-map": "^1.1.1", - "empower-assert": "^1.0.0", - "escodegen": "^1.10.0", - "espower": "^2.1.1", - "estraverse": "^4.0.0", - "merge-estraverse-visitors": "^1.0.0", - "multi-stage-sourcemap": "^0.2.1", - "path-is-absolute": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - } - } - }, "espree": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", @@ -4964,15 +4778,6 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "espurify": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.8.1.tgz", - "integrity": "sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==", - "dev": true, - "requires": { - "core-js": "^2.0.0" - } - }, "esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", @@ -7351,15 +7156,6 @@ } } }, - "intelli-espower-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/intelli-espower-loader/-/intelli-espower-loader-1.0.1.tgz", - "integrity": "sha1-LHsDFGvB1GvyENCgOXxckatMorA=", - "dev": true, - "requires": { - "espower-loader": "^1.0.0" - } - }, "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", @@ -7690,12 +7486,6 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -9613,15 +9403,6 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "merge-estraverse-visitors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/merge-estraverse-visitors/-/merge-estraverse-visitors-1.0.0.tgz", - "integrity": "sha1-65aDOLXe1c7tgs7AMH3sui2OqZQ=", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -9995,26 +9776,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "multi-stage-sourcemap": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz", - "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=", - "dev": true, - "requires": { - "source-map": "^0.1.34" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "multimatch": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", @@ -11542,134 +11303,6 @@ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, - "power-assert": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.6.1.tgz", - "integrity": "sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "empower": "^1.3.1", - "power-assert-formatter": "^1.4.1", - "universal-deep-strict-equal": "^1.2.1", - "xtend": "^4.0.0" - } - }, - "power-assert-context-formatter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz", - "integrity": "sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg==", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "power-assert-context-traversal": "^1.2.0" - } - }, - "power-assert-context-reducer-ast": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz", - "integrity": "sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw==", - "dev": true, - "requires": { - "acorn": "^5.0.0", - "acorn-es7-plugin": "^1.0.12", - "core-js": "^2.0.0", - "espurify": "^1.6.0", - "estraverse": "^4.2.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - } - } - }, - "power-assert-context-traversal": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz", - "integrity": "sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ==", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "estraverse": "^4.1.0" - } - }, - "power-assert-formatter": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz", - "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "power-assert-context-formatter": "^1.0.7", - "power-assert-context-reducer-ast": "^1.0.7", - "power-assert-renderer-assertion": "^1.0.7", - "power-assert-renderer-comparison": "^1.0.7", - "power-assert-renderer-diagram": "^1.0.7", - "power-assert-renderer-file": "^1.0.7" - } - }, - "power-assert-renderer-assertion": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz", - "integrity": "sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg==", - "dev": true, - "requires": { - "power-assert-renderer-base": "^1.1.1", - "power-assert-util-string-width": "^1.2.0" - } - }, - "power-assert-renderer-base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz", - "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=", - "dev": true - }, - "power-assert-renderer-comparison": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz", - "integrity": "sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g==", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "diff-match-patch": "^1.0.0", - "power-assert-renderer-base": "^1.1.1", - "stringifier": "^1.3.0", - "type-name": "^2.0.1" - } - }, - "power-assert-renderer-diagram": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz", - "integrity": "sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg==", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "power-assert-renderer-base": "^1.1.1", - "power-assert-util-string-width": "^1.2.0", - "stringifier": "^1.3.0" - } - }, - "power-assert-renderer-file": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz", - "integrity": "sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg==", - "dev": true, - "requires": { - "power-assert-renderer-base": "^1.1.1" - } - }, - "power-assert-util-string-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz", - "integrity": "sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0" - } - }, "preact": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/preact/-/preact-8.4.2.tgz", @@ -13445,25 +13078,6 @@ "safe-buffer": "~5.1.0" } }, - "stringifier": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stringifier/-/stringifier-1.4.0.tgz", - "integrity": "sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw==", - "dev": true, - "requires": { - "core-js": "^2.0.0", - "traverse": "^0.6.6", - "type-name": "^2.0.1" - }, - "dependencies": { - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - } - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -14219,12 +13833,6 @@ "mime-types": "~2.1.18" } }, - "type-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", - "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=", - "dev": true - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -14320,25 +13928,6 @@ "crypto-random-string": "^1.0.0" } }, - "universal-deep-strict-equal": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz", - "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=", - "dev": true, - "requires": { - "array-filter": "^1.0.0", - "indexof": "0.0.1", - "object-keys": "^1.0.0" - }, - "dependencies": { - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - } - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 08d3782..861cb9a 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "eslint": "^5.15.1", "eslint-plugin-react": "^7.12.4", "html-webpack-plugin": "^3.2.0", - "intelli-espower-loader": "^1.0.1", "karma": "^4.0.1", "karma-firefox-launcher": "^1.1.0", "karma-html2js-preprocessor": "^1.1.0", @@ -42,7 +41,6 @@ "lanthan": "git+https://github.com/ueokande/lanthan.git#master", "mocha": "^6.0.2", "node-sass": "^4.11.0", - "power-assert": "^1.6.1", "preact": "^8.4.2", "preact-redux": "^2.0.3", "redux": "^4.0.1",