feat: add lint for webapp client (#545)
* add eslint setting on webapp client * fix lint * add eslint and fix lint * fix webbrowserinput sample * fix lint on windows * execute lint for webapp client on ci * use ecmaversion latest
This commit is contained in:
Родитель
0ee7ae8e5e
Коммит
5f175bc9b1
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"root": true,
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:jest/recommended"
|
||||
],
|
||||
"plugins": [
|
||||
"jest"
|
||||
],
|
||||
"parserOptions": {
|
||||
"sourceType": "module",
|
||||
"ecmaVersion": "latest"
|
||||
},
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true ,
|
||||
"jest": true
|
||||
},
|
||||
"rules": {
|
||||
"semi": "error",
|
||||
"no-extra-semi": "error"
|
||||
}
|
||||
}
|
|
@ -448,6 +448,57 @@
|
|||
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
|
||||
"dev": true
|
||||
},
|
||||
"@eslint/eslintrc": {
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
|
||||
"integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.12.4",
|
||||
"debug": "^4.1.1",
|
||||
"espree": "^7.3.0",
|
||||
"globals": "^13.9.0",
|
||||
"ignore": "^4.0.6",
|
||||
"import-fresh": "^3.2.1",
|
||||
"js-yaml": "^3.13.1",
|
||||
"minimatch": "^3.0.4",
|
||||
"strip-json-comments": "^3.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"globals": {
|
||||
"version": "13.11.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
|
||||
"integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-fest": "^0.20.2"
|
||||
}
|
||||
},
|
||||
"type-fest": {
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
|
||||
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@humanwhocodes/config-array": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
|
||||
"integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@humanwhocodes/object-schema": "^1.2.0",
|
||||
"debug": "^4.1.1",
|
||||
"minimatch": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"@humanwhocodes/object-schema": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
|
||||
"integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
|
||||
"dev": true
|
||||
},
|
||||
"@istanbuljs/load-nyc-config": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||
|
@ -657,6 +708,32 @@
|
|||
"chalk": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@nodelib/fs.stat": "2.0.5",
|
||||
"run-parallel": "^1.1.9"
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.stat": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
|
||||
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
|
||||
"dev": true
|
||||
},
|
||||
"@nodelib/fs.walk": {
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
|
||||
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@nodelib/fs.scandir": "2.1.5",
|
||||
"fastq": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"@sinonjs/commons": {
|
||||
"version": "1.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
|
||||
|
@ -755,6 +832,12 @@
|
|||
"@types/istanbul-lib-report": "*"
|
||||
}
|
||||
},
|
||||
"@types/json-schema": {
|
||||
"version": "7.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
|
||||
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "16.10.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
|
||||
|
@ -788,6 +871,83 @@
|
|||
"integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
|
||||
"dev": true
|
||||
},
|
||||
"@typescript-eslint/experimental-utils": {
|
||||
"version": "4.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
|
||||
"integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/json-schema": "^7.0.7",
|
||||
"@typescript-eslint/scope-manager": "4.33.0",
|
||||
"@typescript-eslint/types": "4.33.0",
|
||||
"@typescript-eslint/typescript-estree": "4.33.0",
|
||||
"eslint-scope": "^5.1.1",
|
||||
"eslint-utils": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"eslint-utils": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
|
||||
"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-visitor-keys": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@typescript-eslint/scope-manager": {
|
||||
"version": "4.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
|
||||
"integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@typescript-eslint/types": "4.33.0",
|
||||
"@typescript-eslint/visitor-keys": "4.33.0"
|
||||
}
|
||||
},
|
||||
"@typescript-eslint/types": {
|
||||
"version": "4.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
|
||||
"integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@typescript-eslint/typescript-estree": {
|
||||
"version": "4.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
|
||||
"integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@typescript-eslint/types": "4.33.0",
|
||||
"@typescript-eslint/visitor-keys": "4.33.0",
|
||||
"debug": "^4.3.1",
|
||||
"globby": "^11.0.3",
|
||||
"is-glob": "^4.0.1",
|
||||
"semver": "^7.3.5",
|
||||
"tsutils": "^3.21.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "7.3.5",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
|
||||
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lru-cache": "^6.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@typescript-eslint/visitor-keys": {
|
||||
"version": "4.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
|
||||
"integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@typescript-eslint/types": "4.33.0",
|
||||
"eslint-visitor-keys": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"abab": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
|
||||
|
@ -818,6 +978,12 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
|
||||
|
@ -833,6 +999,24 @@
|
|||
"debug": "4"
|
||||
}
|
||||
},
|
||||
"ajv": {
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
"json-schema-traverse": "^0.4.1",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
|
||||
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-escapes": {
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
|
||||
|
@ -876,6 +1060,18 @@
|
|||
"sprintf-js": "~1.0.2"
|
||||
}
|
||||
},
|
||||
"array-union": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
|
||||
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
|
||||
"dev": true
|
||||
},
|
||||
"astral-regex": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
|
||||
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
|
||||
"dev": true
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
|
@ -1120,15 +1316,6 @@
|
|||
"safe-buffer": "~5.1.1"
|
||||
}
|
||||
},
|
||||
"cross-env": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
|
||||
"integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cross-spawn": "^7.0.1"
|
||||
}
|
||||
},
|
||||
"cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
|
@ -1225,6 +1412,24 @@
|
|||
"integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
|
||||
"dev": true
|
||||
},
|
||||
"dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"path-type": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"doctrine": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
|
||||
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esutils": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"domexception": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
|
||||
|
@ -1260,6 +1465,15 @@
|
|||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||
"dev": true
|
||||
},
|
||||
"enquirer": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
|
||||
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-colors": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"escalade": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
|
||||
|
@ -1285,12 +1499,233 @@
|
|||
"source-map": "~0.6.1"
|
||||
}
|
||||
},
|
||||
"eslint": {
|
||||
"version": "7.32.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
|
||||
"integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "7.12.11",
|
||||
"@eslint/eslintrc": "^0.4.3",
|
||||
"@humanwhocodes/config-array": "^0.5.0",
|
||||
"ajv": "^6.10.0",
|
||||
"chalk": "^4.0.0",
|
||||
"cross-spawn": "^7.0.2",
|
||||
"debug": "^4.0.1",
|
||||
"doctrine": "^3.0.0",
|
||||
"enquirer": "^2.3.5",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"eslint-scope": "^5.1.1",
|
||||
"eslint-utils": "^2.1.0",
|
||||
"eslint-visitor-keys": "^2.0.0",
|
||||
"espree": "^7.3.1",
|
||||
"esquery": "^1.4.0",
|
||||
"esutils": "^2.0.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"file-entry-cache": "^6.0.1",
|
||||
"functional-red-black-tree": "^1.0.1",
|
||||
"glob-parent": "^5.1.2",
|
||||
"globals": "^13.6.0",
|
||||
"ignore": "^4.0.6",
|
||||
"import-fresh": "^3.0.0",
|
||||
"imurmurhash": "^0.1.4",
|
||||
"is-glob": "^4.0.0",
|
||||
"js-yaml": "^3.13.1",
|
||||
"json-stable-stringify-without-jsonify": "^1.0.1",
|
||||
"levn": "^0.4.1",
|
||||
"lodash.merge": "^4.6.2",
|
||||
"minimatch": "^3.0.4",
|
||||
"natural-compare": "^1.4.0",
|
||||
"optionator": "^0.9.1",
|
||||
"progress": "^2.0.0",
|
||||
"regexpp": "^3.1.0",
|
||||
"semver": "^7.2.1",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"strip-json-comments": "^3.1.0",
|
||||
"table": "^6.0.9",
|
||||
"text-table": "^0.2.0",
|
||||
"v8-compile-cache": "^2.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/code-frame": {
|
||||
"version": "7.12.11",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
|
||||
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/highlight": "^7.10.4"
|
||||
}
|
||||
},
|
||||
"escape-string-regexp": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
||||
"dev": true
|
||||
},
|
||||
"globals": {
|
||||
"version": "13.11.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
|
||||
"integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-fest": "^0.20.2"
|
||||
}
|
||||
},
|
||||
"levn": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
|
||||
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "~0.4.0"
|
||||
}
|
||||
},
|
||||
"optionator": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"deep-is": "^0.1.3",
|
||||
"fast-levenshtein": "^2.0.6",
|
||||
"levn": "^0.4.1",
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "^0.4.0",
|
||||
"word-wrap": "^1.2.3"
|
||||
}
|
||||
},
|
||||
"prelude-ls": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
|
||||
"dev": true
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.3.5",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
|
||||
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lru-cache": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"type-check": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"type-fest": {
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
|
||||
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-plugin-jest": {
|
||||
"version": "24.5.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.5.2.tgz",
|
||||
"integrity": "sha512-lrI3sGAyZi513RRmP08sIW241Ti/zMnn/6wbE4ZBhb3M2pJ9ztaZMnSKSKKBUfotVdwqU8W1KtD8ao2/FR8DIg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@typescript-eslint/experimental-utils": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"eslint-scope": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esrecurse": "^4.3.0",
|
||||
"estraverse": "^4.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"estraverse": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
|
||||
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-utils": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
|
||||
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-visitor-keys": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
|
||||
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-visitor-keys": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
|
||||
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
|
||||
"dev": true
|
||||
},
|
||||
"espree": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
|
||||
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"acorn": "^7.4.0",
|
||||
"acorn-jsx": "^5.3.1",
|
||||
"eslint-visitor-keys": "^1.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||
"dev": true
|
||||
},
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
|
||||
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"esprima": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
||||
"dev": true
|
||||
},
|
||||
"esquery": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
|
||||
"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"estraverse": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"esrecurse": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"estraverse": "^5.2.0"
|
||||
}
|
||||
},
|
||||
"estraverse": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
|
||||
|
@ -1348,6 +1783,25 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"dev": true
|
||||
},
|
||||
"fast-glob": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
|
||||
"integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@nodelib/fs.stat": "^2.0.2",
|
||||
"@nodelib/fs.walk": "^1.2.3",
|
||||
"glob-parent": "^5.1.2",
|
||||
"merge2": "^1.3.0",
|
||||
"micromatch": "^4.0.4"
|
||||
}
|
||||
},
|
||||
"fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
|
@ -1360,6 +1814,15 @@
|
|||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
||||
"dev": true
|
||||
},
|
||||
"fastq": {
|
||||
"version": "1.13.0",
|
||||
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
|
||||
"integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"fb-watchman": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
|
||||
|
@ -1369,6 +1832,15 @@
|
|||
"bser": "2.1.1"
|
||||
}
|
||||
},
|
||||
"file-entry-cache": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"flat-cache": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
|
@ -1388,6 +1860,22 @@
|
|||
"path-exists": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"flat-cache": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
|
||||
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"flatted": "^3.1.0",
|
||||
"rimraf": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"flatted": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
|
||||
"integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
|
||||
"dev": true
|
||||
},
|
||||
"form-data": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
|
||||
|
@ -1418,6 +1906,12 @@
|
|||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
|
||||
"dev": true
|
||||
},
|
||||
"functional-red-black-tree": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
|
||||
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
|
||||
"dev": true
|
||||
},
|
||||
"gensync": {
|
||||
"version": "1.0.0-beta.2",
|
||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||
|
@ -1456,12 +1950,43 @@
|
|||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"globals": {
|
||||
"version": "11.12.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
|
||||
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
|
||||
"dev": true
|
||||
},
|
||||
"globby": {
|
||||
"version": "11.0.4",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
|
||||
"integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"array-union": "^2.1.0",
|
||||
"dir-glob": "^3.0.1",
|
||||
"fast-glob": "^3.1.1",
|
||||
"ignore": "^5.1.4",
|
||||
"merge2": "^1.3.0",
|
||||
"slash": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ignore": {
|
||||
"version": "5.1.8",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
|
||||
"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.8",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
|
||||
|
@ -1534,6 +2059,30 @@
|
|||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
},
|
||||
"ignore": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
|
||||
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
|
||||
"dev": true
|
||||
},
|
||||
"import-fresh": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
||||
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"parent-module": "^1.0.0",
|
||||
"resolve-from": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"resolve-from": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"import-local": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
|
||||
|
@ -1584,6 +2133,12 @@
|
|||
"has": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"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
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
|
@ -1596,6 +2151,15 @@
|
|||
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
|
||||
"dev": true
|
||||
},
|
||||
"is-glob": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
||||
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-extglob": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
|
@ -2228,6 +2792,18 @@
|
|||
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
||||
"dev": true
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
},
|
||||
"json-stable-stringify-without-jsonify": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
|
||||
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
|
||||
"dev": true
|
||||
},
|
||||
"json5": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
|
||||
|
@ -2274,6 +2850,24 @@
|
|||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.clonedeep": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
|
||||
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.truncate": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
|
||||
"integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
|
||||
"dev": true
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||
|
@ -2307,6 +2901,12 @@
|
|||
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
||||
"dev": true
|
||||
},
|
||||
"merge2": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
||||
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
|
||||
"dev": true
|
||||
},
|
||||
"micromatch": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
|
||||
|
@ -2466,6 +3066,15 @@
|
|||
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
||||
"dev": true
|
||||
},
|
||||
"parent-module": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
||||
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"callsites": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"parse5": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
|
||||
|
@ -2496,6 +3105,12 @@
|
|||
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
||||
"dev": true
|
||||
},
|
||||
"path-type": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
||||
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
|
||||
"dev": true
|
||||
},
|
||||
"picomatch": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
|
||||
|
@ -2546,6 +3161,12 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"progress": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
|
||||
"dev": true
|
||||
},
|
||||
"prompts": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
|
||||
|
@ -2568,18 +3189,36 @@
|
|||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
|
||||
"dev": true
|
||||
},
|
||||
"queue-microtask": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
||||
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
|
||||
"dev": true
|
||||
},
|
||||
"react-is": {
|
||||
"version": "17.0.2",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
|
||||
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
|
||||
"dev": true
|
||||
},
|
||||
"regexpp": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
|
||||
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
|
||||
"dev": true
|
||||
},
|
||||
"require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
||||
"dev": true
|
||||
},
|
||||
"require-from-string": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
|
||||
"dev": true
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.20.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
|
||||
|
@ -2605,6 +3244,12 @@
|
|||
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
|
||||
"dev": true
|
||||
},
|
||||
"reusify": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
|
||||
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
|
||||
"dev": true
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
|
@ -2614,6 +3259,15 @@
|
|||
"glob": "^7.1.3"
|
||||
}
|
||||
},
|
||||
"run-parallel": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
||||
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"queue-microtask": "^1.2.2"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
|
@ -2674,6 +3328,17 @@
|
|||
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
|
||||
"dev": true
|
||||
},
|
||||
"slice-ansi": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
|
||||
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"astral-regex": "^2.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
|
@ -2747,6 +3412,12 @@
|
|||
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
|
||||
"dev": true
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
|
@ -2772,6 +3443,40 @@
|
|||
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
|
||||
"dev": true
|
||||
},
|
||||
"table": {
|
||||
"version": "6.7.2",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
|
||||
"integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^8.0.1",
|
||||
"lodash.clonedeep": "^4.5.0",
|
||||
"lodash.truncate": "^4.4.2",
|
||||
"slice-ansi": "^4.0.0",
|
||||
"string-width": "^4.2.3",
|
||||
"strip-ansi": "^6.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": {
|
||||
"version": "8.6.3",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
|
||||
"integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
"require-from-string": "^2.0.2",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"terminal-link": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
|
||||
|
@ -2793,6 +3498,12 @@
|
|||
"minimatch": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
|
||||
"dev": true
|
||||
},
|
||||
"throat": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
|
||||
|
@ -2840,6 +3551,21 @@
|
|||
"punycode": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"tslib": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
|
||||
"dev": true
|
||||
},
|
||||
"tsutils": {
|
||||
"version": "3.21.0",
|
||||
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
|
||||
"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tslib": "^1.8.1"
|
||||
}
|
||||
},
|
||||
"type-check": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||
|
@ -2876,6 +3602,21 @@
|
|||
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||
"dev": true
|
||||
},
|
||||
"uri-js": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
|
||||
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
|
||||
"dev": true
|
||||
},
|
||||
"v8-to-istanbul": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
|
||||
|
|
|
@ -3,9 +3,12 @@
|
|||
"version": "3.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
|
||||
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
||||
"lint": "eslint public/**/*.js test/**/*.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-plugin-jest": "^24.5.2",
|
||||
"jest": "^27.2.0"
|
||||
},
|
||||
"type": "module"
|
||||
|
|
|
@ -22,7 +22,7 @@ setupButton.addEventListener('click', setUp);
|
|||
let hangUpButton = document.getElementById('hangUpButton');
|
||||
hangUpButton.addEventListener('click', hangUp);
|
||||
|
||||
window.addEventListener('beforeunload', async (e) => {
|
||||
window.addEventListener('beforeunload', async () => {
|
||||
await sendVideo.stop();
|
||||
}, true);
|
||||
|
||||
|
@ -37,7 +37,7 @@ async function setupConfig() {
|
|||
function showWarningIfNeeded(startupMode) {
|
||||
const warningDiv = document.getElementById("warning");
|
||||
if (startupMode == "public") {
|
||||
warningDiv.innerHTML = "<h4>Warning</h4> This sample is not working on Public Mode."
|
||||
warningDiv.innerHTML = "<h4>Warning</h4> This sample is not working on Public Mode.";
|
||||
warningDiv.hidden = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,9 +14,7 @@ export default class Peer extends EventTarget {
|
|||
this.ignoreOffer = false;
|
||||
this.srdAnswerPending = false;
|
||||
this.log = str => void Logger.log(`[${_this.polite ? 'POLITE' : 'IMPOLITE'}] ${str}`);
|
||||
this.assert_equals = !window.assert_equals ?
|
||||
(a, b, msg) => a === b || void fail(new Error(`${msg} expected ${b} but got ${a}`)) :
|
||||
window.assert_equals;
|
||||
this.assert_equals = window.assert_equals ? window.assert_equals : (a, b, msg) => { if (a === b) { return; } throw new Error(`${msg} expected ${b} but got ${a}`); };
|
||||
this.interval = 5000;
|
||||
this.sleep = msec => new Promise(resolve => setTimeout(resolve, msec));
|
||||
|
||||
|
@ -66,9 +64,8 @@ export default class Peer extends EventTarget {
|
|||
}
|
||||
|
||||
async loopResendOffer() {
|
||||
|
||||
while (true) {
|
||||
if(this.pc != null && this.waitingAnswer) {
|
||||
while (this.connectionId) {
|
||||
if (this.pc != null && this.waitingAnswer) {
|
||||
this.dispatchEvent(new CustomEvent('sendoffer', { detail: { connectionId: this.connectionId, sdp: this.pc.localDescription.sdp } }));
|
||||
}
|
||||
await this.sleep(this.interval);
|
||||
|
|
|
@ -3,111 +3,101 @@ import * as Logger from "./logger.js";
|
|||
const _e = 0.09;
|
||||
const _gameloopInterval = 16.67; //in milliseconds, 60 times a second
|
||||
var gameloop = null;
|
||||
var gamepadsPreviousButtonsStates = {}
|
||||
var gamepadsPreviousAxesStates = {}
|
||||
var gamepadsConnectedTimeStamp = {}
|
||||
var gamepadsPreviousButtonsStates = {};
|
||||
var gamepadsPreviousAxesStates = {};
|
||||
var gamepadsConnectedTimeStamp = {};
|
||||
const _axisOffset = 100;
|
||||
const _axisMultiplier = 1;
|
||||
const _axisYInverted = -1;
|
||||
|
||||
class GamepadButtonEvent extends Event
|
||||
{
|
||||
constructor()
|
||||
{
|
||||
super(...arguments);
|
||||
this.index = arguments[1].index;
|
||||
this.id = arguments[1].id;
|
||||
this.value = arguments[1].value;
|
||||
}
|
||||
class GamepadButtonEvent extends Event {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.index = arguments[1].index;
|
||||
this.id = arguments[1].id;
|
||||
this.value = arguments[1].value;
|
||||
}
|
||||
}
|
||||
|
||||
class GamepadAxisEvent extends Event
|
||||
{
|
||||
constructor()
|
||||
{
|
||||
super(...arguments);
|
||||
this.index = arguments[1].index;
|
||||
this.x = arguments[1].x;
|
||||
this.y = arguments[1].y;
|
||||
this.id = arguments[1].id;
|
||||
}
|
||||
class GamepadAxisEvent extends Event {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.index = arguments[1].index;
|
||||
this.x = arguments[1].x;
|
||||
this.y = arguments[1].y;
|
||||
this.id = arguments[1].id;
|
||||
}
|
||||
}
|
||||
|
||||
function storePreviousState(gamepad)
|
||||
{
|
||||
function storePreviousState(gamepad) {
|
||||
gamepadsPreviousButtonsStates[gamepad.index] = {};
|
||||
gamepad.buttons.forEach(function(button, index) {
|
||||
gamepadsPreviousButtonsStates[gamepad.index] [index] = {value : button.value, pressed : button.pressed}
|
||||
})
|
||||
gamepad.buttons.forEach(function (button, index) {
|
||||
gamepadsPreviousButtonsStates[gamepad.index][index] = { value: button.value, pressed: button.pressed };
|
||||
});
|
||||
|
||||
gamepadsPreviousAxesStates[gamepad.index] = [gamepad.axes.length]
|
||||
for(var index = 0; index < gamepad.axes.length; index++)
|
||||
gamepadsPreviousAxesStates[gamepad.index][index] = gamepad.axes[index]
|
||||
gamepadsPreviousAxesStates[gamepad.index] = [gamepad.axes.length];
|
||||
for (var index = 0; index < gamepad.axes.length; index++)
|
||||
gamepadsPreviousAxesStates[gamepad.index][index] = gamepad.axes[index];
|
||||
}
|
||||
|
||||
function checkAxes(gamepad, previousGamePad)
|
||||
{
|
||||
for(var i=0; i < gamepad.axes.length; i+=2)
|
||||
{
|
||||
var absX = Math.abs(gamepad.axes[i]);
|
||||
var absY = Math.abs(gamepad.axes[i+1]);
|
||||
var event = null;
|
||||
if (( absX > _e) ||
|
||||
( absY > _e))
|
||||
{
|
||||
|
||||
event = new GamepadAxisEvent('gamepadAxis', {id: gamepadsConnectedTimeStamp[gamepad.index], index: i/2 + _axisOffset, x: gamepad.axes[i] * _axisMultiplier, y: gamepad.axes[i+1] * _axisMultiplier * _axisYInverted })
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
else{
|
||||
var previousAbsX = Math.abs(previousGamePad[i]);
|
||||
var previousAbsY = Math.abs(previousGamePad[i+1]);
|
||||
|
||||
//have to send if previously was moved
|
||||
if ((previousAbsX > _e) ||
|
||||
(previousAbsY > _e))
|
||||
{
|
||||
event = new GamepadAxisEvent('gamepadAxis', {id: gamepadsConnectedTimeStamp[gamepad.index], index: i/2 + _axisOffset, x: 0.0, y: 0.0})
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
}
|
||||
function checkAxes(gamepad, previousGamePad) {
|
||||
for (var i = 0; i < gamepad.axes.length; i += 2) {
|
||||
var absX = Math.abs(gamepad.axes[i]);
|
||||
var absY = Math.abs(gamepad.axes[i + 1]);
|
||||
var event = null;
|
||||
if ((absX > _e) ||
|
||||
(absY > _e)) {
|
||||
|
||||
event = new GamepadAxisEvent('gamepadAxis', { id: gamepadsConnectedTimeStamp[gamepad.index], index: i / 2 + _axisOffset, x: gamepad.axes[i] * _axisMultiplier, y: gamepad.axes[i + 1] * _axisMultiplier * _axisYInverted });
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
else {
|
||||
var previousAbsX = Math.abs(previousGamePad[i]);
|
||||
var previousAbsY = Math.abs(previousGamePad[i + 1]);
|
||||
|
||||
//have to send if previously was moved
|
||||
if ((previousAbsX > _e) ||
|
||||
(previousAbsY > _e)) {
|
||||
event = new GamepadAxisEvent('gamepadAxis', { id: gamepadsConnectedTimeStamp[gamepad.index], index: i / 2 + _axisOffset, x: 0.0, y: 0.0 });
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function gameLoop() {
|
||||
Object.keys(gamepadsPreviousAxesStates).forEach(function(gamepadIndex) {
|
||||
var gamepad = navigator.webkitGetGamepads ? navigator.webkitGetGamepads()[gamepadIndex] : navigator.getGamepads()[gamepadIndex];
|
||||
var previousButtons = gamepadsPreviousButtonsStates[gamepadIndex];
|
||||
gamepad.buttons.forEach(function(button, index)
|
||||
{
|
||||
var buttonStatus = navigator.webkitGetGamepads ? button == 1 : (button.value > 0 || button.pressed == true);
|
||||
var previousButtonStatus = navigator.webkitGetGamepads ? previousButtons[index].value == 1 : ( previousButtons[index].value > 0 || previousButtons[index].pressed == true)
|
||||
if( buttonStatus != previousButtonStatus)
|
||||
{
|
||||
var event;
|
||||
if(buttonStatus)
|
||||
event = new GamepadButtonEvent('gamepadButtonDown', {id: gamepadsConnectedTimeStamp[gamepad.index], index: index, value: button.value})
|
||||
else
|
||||
event = new GamepadButtonEvent('gamepadButtonUp', {id: gamepadsConnectedTimeStamp[gamepad.index], index: index, value: 0})
|
||||
function gameLoop() {
|
||||
Object.keys(gamepadsPreviousAxesStates).forEach(function (gamepadIndex) {
|
||||
var gamepad = navigator.webkitGetGamepads ? navigator.webkitGetGamepads()[gamepadIndex] : navigator.getGamepads()[gamepadIndex];
|
||||
var previousButtons = gamepadsPreviousButtonsStates[gamepadIndex];
|
||||
gamepad.buttons.forEach(function (button, index) {
|
||||
var buttonStatus = navigator.webkitGetGamepads ? button == 1 : (button.value > 0 || button.pressed == true);
|
||||
var previousButtonStatus = navigator.webkitGetGamepads ? previousButtons[index].value == 1 : (previousButtons[index].value > 0 || previousButtons[index].pressed == true);
|
||||
var event;
|
||||
if (buttonStatus != previousButtonStatus) {
|
||||
if (buttonStatus) {
|
||||
event = new GamepadButtonEvent('gamepadButtonDown', { id: gamepadsConnectedTimeStamp[gamepad.index], index: index, value: button.value });
|
||||
}
|
||||
else {
|
||||
event = new GamepadButtonEvent('gamepadButtonUp', { id: gamepadsConnectedTimeStamp[gamepad.index], index: index, value: 0 });
|
||||
}
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
else if (buttonStatus) {
|
||||
event = new GamepadButtonEvent('gamepadButtonPressed', { id: gamepadsConnectedTimeStamp[gamepad.index], index: index, value: button.value });
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
else if(buttonStatus)
|
||||
{
|
||||
var event = new GamepadButtonEvent('gamepadButtonPressed', {id: gamepadsConnectedTimeStamp[gamepad.index], index: index, value: button.value})
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
})
|
||||
checkAxes(gamepad, gamepadsPreviousAxesStates[gamepadIndex]);
|
||||
storePreviousState(gamepad);
|
||||
})
|
||||
};
|
||||
});
|
||||
checkAxes(gamepad, gamepadsPreviousAxesStates[gamepadIndex]);
|
||||
storePreviousState(gamepad);
|
||||
});
|
||||
}
|
||||
|
||||
function getCookie(cname) {
|
||||
var name = cname + "=";
|
||||
var decodedCookie = decodeURIComponent(document.cookie);
|
||||
var ca = decodedCookie.split(';');
|
||||
for(var i = 0; i < ca.length; i++) {
|
||||
for (var i = 0; i < ca.length; i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0) == ' ') {
|
||||
c = c.substring(1);
|
||||
|
@ -122,39 +112,35 @@ function getCookie(cname) {
|
|||
export function gamepadHandler(event, connecting) {
|
||||
var gamepad = event.gamepad;
|
||||
|
||||
var key = gamepad.id.replace(/\s/g,'');
|
||||
var cookieTimeStamp = getCookie(key);
|
||||
var key = gamepad.id.replace(/\s/g, '');
|
||||
var cookieTimeStamp = getCookie(key);
|
||||
|
||||
if (connecting) {
|
||||
storePreviousState(gamepad);
|
||||
if(Object.keys(gamepadsPreviousAxesStates).length == 1)
|
||||
{
|
||||
storePreviousState(gamepad);
|
||||
if (Object.keys(gamepadsPreviousAxesStates).length == 1) {
|
||||
gameloop = setInterval(gameLoop, _gameloopInterval);
|
||||
}
|
||||
|
||||
//try to find the timestamp
|
||||
//need to strip the : from the id
|
||||
|
||||
if(cookieTimeStamp == "")
|
||||
{
|
||||
document.cookie = key + "=" + gamepad.timestamp;
|
||||
gamepadsConnectedTimeStamp[gamepad.index] = gamepad.timestamp;
|
||||
if (cookieTimeStamp == "") {
|
||||
document.cookie = key + "=" + gamepad.timestamp;
|
||||
gamepadsConnectedTimeStamp[gamepad.index] = gamepad.timestamp;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
gamepadsConnectedTimeStamp[gamepad.index] = cookieTimeStamp;
|
||||
}
|
||||
|
||||
Logger.log("connected: " + gamepadsConnectedTimeStamp[gamepad.index])
|
||||
|
||||
Logger.log("connected: " + gamepadsConnectedTimeStamp[gamepad.index]);
|
||||
|
||||
} else {
|
||||
delete gamepadsPreviousAxesStates[gamepad.index];
|
||||
delete gamepadsPreviousButtonsStates[gamepad.index];
|
||||
if(Object.keys(gamepadsPreviousAxesStates).length == 0)
|
||||
{
|
||||
if (Object.keys(gamepadsPreviousAxesStates).length == 0) {
|
||||
clearInterval(gameloop);
|
||||
gameloop = null;
|
||||
}
|
||||
Logger.log("disconnected: " + gamepad.id)
|
||||
Logger.log("disconnected: " + gamepad.id);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,6 @@ const displayConfig = async () => {
|
|||
|
||||
const mode = res.startupMode.replace(/^./, res.startupMode[0].toUpperCase());
|
||||
startupDiv.innerHTML += `<li>Signaling Mode : <b>${mode}</b></li>`;
|
||||
}
|
||||
};
|
||||
|
||||
displayConfig();
|
||||
|
|
|
@ -13,14 +13,14 @@ const InputEvent = {
|
|||
const KeyboardEventType = {
|
||||
Up: 0,
|
||||
Down: 1
|
||||
}
|
||||
};
|
||||
|
||||
const GamepadEventType = {
|
||||
ButtonUp: 0,
|
||||
ButtonDown: 1,
|
||||
ButtonPressed: 2,
|
||||
Axis: 3
|
||||
}
|
||||
};
|
||||
|
||||
const PointerPhase = {
|
||||
None: 0,
|
||||
|
@ -29,7 +29,7 @@ const PointerPhase = {
|
|||
Ended: 3,
|
||||
Canceled: 4,
|
||||
Stationary: 5
|
||||
}
|
||||
};
|
||||
|
||||
const Keymap = {
|
||||
"Space": 1,
|
||||
|
@ -154,7 +154,7 @@ const Keymap = {
|
|||
|
||||
let sendGamepadButtonDown = undefined;
|
||||
let sendGamepadButtonUp = undefined;
|
||||
let sendGamepadButtonPressed
|
||||
let sendGamepadButtonPressed;
|
||||
let gamepadAxisChange = undefined;
|
||||
let gamepadConnected = undefined;
|
||||
let gamepadDisconnected = undefined;
|
||||
|
@ -163,8 +163,8 @@ export function registerGamepadEvents(videoPlayer) {
|
|||
|
||||
const _videoPlayer = videoPlayer;
|
||||
|
||||
sendGamepadButtonDown = (e) => {
|
||||
Logger.log("gamepad id: " + e.id + " button index: " + e.index + " value " + e.value + " down" );
|
||||
sendGamepadButtonDown = (e) => {
|
||||
Logger.log("gamepad id: " + e.id + " button index: " + e.index + " value " + e.value + " down");
|
||||
let data = new DataView(new ArrayBuffer(19));
|
||||
data.setUint8(0, InputEvent.Gamepad);
|
||||
data.setUint8(1, GamepadEventType.ButtonDown);
|
||||
|
@ -172,10 +172,10 @@ export function registerGamepadEvents(videoPlayer) {
|
|||
data.setFloat64(3, e.value, true);
|
||||
|
||||
_videoPlayer && _videoPlayer.sendMsg(data.buffer);
|
||||
}
|
||||
};
|
||||
|
||||
sendGamepadButtonUp = (e) => {
|
||||
Logger.log("gamepad id: " + e.id + " button index: " + e.index + " value " + e.value + " up" );
|
||||
Logger.log("gamepad id: " + e.id + " button index: " + e.index + " value " + e.value + " up");
|
||||
let data = new DataView(new ArrayBuffer(19));
|
||||
data.setUint8(0, InputEvent.Gamepad);
|
||||
data.setUint8(1, GamepadEventType.ButtonUp);
|
||||
|
@ -183,32 +183,32 @@ export function registerGamepadEvents(videoPlayer) {
|
|||
data.setFloat64(3, e.value, true);
|
||||
|
||||
_videoPlayer && _videoPlayer.sendMsg(data.buffer);
|
||||
}
|
||||
};
|
||||
|
||||
sendGamepadButtonPressed = (e) => {
|
||||
Logger.log("gamepad id: " + e.id + " button index: " + e.index + " value " + e.value + " pressed" );
|
||||
Logger.log("gamepad id: " + e.id + " button index: " + e.index + " value " + e.value + " pressed");
|
||||
let data = new DataView(new ArrayBuffer(19));
|
||||
data.setUint8(0, InputEvent.Gamepad);
|
||||
data.setUint8(1, GamepadEventType.ButtonPressed);
|
||||
data.setUint8(2, e.index);
|
||||
data.setFloat64(3, e.value, true);
|
||||
|
||||
_videoPlayer && _videoPlayer.sendMsg(data.buffer);
|
||||
}
|
||||
|
||||
gamepadAxisChange = (e) => {
|
||||
Logger.log("gamepad id: " + e.id + " axis: " + e.index + " value " + e.value + " x:" + e.x + " y:" + e.y );
|
||||
_videoPlayer && _videoPlayer.sendMsg(data.buffer);
|
||||
};
|
||||
|
||||
gamepadAxisChange = (e) => {
|
||||
Logger.log("gamepad id: " + e.id + " axis: " + e.index + " value " + e.value + " x:" + e.x + " y:" + e.y);
|
||||
let data = new DataView(new ArrayBuffer(27));
|
||||
data.setUint8(0, InputEvent.Gamepad);
|
||||
data.setUint8(1, GamepadEventType.Axis);
|
||||
data.setUint8(0, InputEvent.Gamepad);
|
||||
data.setUint8(1, GamepadEventType.Axis);
|
||||
data.setUint8(2, e.index);
|
||||
data.setFloat64(3, e.x, true);
|
||||
data.setFloat64(11, e.y, true);
|
||||
_videoPlayer && _videoPlayer.sendMsg(data.buffer);
|
||||
}
|
||||
};
|
||||
|
||||
gamepadConnected = (e) => { gamepadHandler(e, true); }
|
||||
gamepadDisconnected = (e) => { gamepadHandler(e, false); }
|
||||
gamepadConnected = (e) => { gamepadHandler(e, true); };
|
||||
gamepadDisconnected = (e) => { gamepadHandler(e, false); };
|
||||
|
||||
|
||||
document.addEventListener("gamepadButtonDown", sendGamepadButtonDown, false);
|
||||
|
@ -220,15 +220,15 @@ export function registerGamepadEvents(videoPlayer) {
|
|||
window.addEventListener("gamepaddisconnected", gamepadDisconnected, false);
|
||||
}
|
||||
|
||||
export function unregisterGamepadEvents(videoPlayer) {
|
||||
export function unregisterGamepadEvents() {
|
||||
|
||||
document.removeEventListener("gamepadButtonDown", sendGamepadButtonDown, false);
|
||||
document.removeEventListener("gamepadButtonUp", sendGamepadButtonUp, false);
|
||||
document.removeEventListener("gamepadButtonPressed", sendGamepadButtonPressed, false);
|
||||
document.removeEventListener("gamepadAxis", gamepadAxisChange, false);
|
||||
document.removeEventListener("gamepadButtonDown", sendGamepadButtonDown, false);
|
||||
document.removeEventListener("gamepadButtonUp", sendGamepadButtonUp, false);
|
||||
document.removeEventListener("gamepadButtonPressed", sendGamepadButtonPressed, false);
|
||||
document.removeEventListener("gamepadAxis", gamepadAxisChange, false);
|
||||
|
||||
window.removeEventListener("gamepadconnected", gamepadConnected, false);
|
||||
window.removeEventListener("gamepaddisconnected", gamepadDisconnected, false);
|
||||
window.removeEventListener("gamepadconnected", gamepadConnected, false);
|
||||
window.removeEventListener("gamepaddisconnected", gamepadDisconnected, false);
|
||||
|
||||
}
|
||||
|
||||
|
@ -251,22 +251,22 @@ export function registerKeyboardEvents(videoPlayer) {
|
|||
|
||||
sendKeyUp = (e) => {
|
||||
sendKey(e, KeyboardEventType.Up);
|
||||
}
|
||||
};
|
||||
|
||||
sendKeyDown = (e) => {
|
||||
sendKey(e, KeyboardEventType.Down);
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener('keyup', sendKeyUp, false);
|
||||
document.addEventListener('keydown', sendKeyDown, false);
|
||||
}
|
||||
|
||||
|
||||
export function unregisterKeyboardEvents(videoPlayer) {
|
||||
export function unregisterKeyboardEvents() {
|
||||
|
||||
//Stop listening to keyboard events
|
||||
document.removeEventListener('keyup', sendKeyUp, false);
|
||||
document.removeEventListener('keydown', sendKeyDown, false);
|
||||
//Stop listening to keyboard events
|
||||
document.removeEventListener('keyup', sendKeyUp, false);
|
||||
document.removeEventListener('keydown', sendKeyDown, false);
|
||||
}
|
||||
|
||||
|
||||
|
@ -289,7 +289,7 @@ export function registerMouseEvents(videoPlayer, playerElement) {
|
|||
|
||||
for (let i = 0; i < changedTouches.length; i++) {
|
||||
if (touches.find(function (t) {
|
||||
return t.identifier === changedTouches[i].identifier
|
||||
return t.identifier === changedTouches[i].identifier;
|
||||
}) === undefined) {
|
||||
touches.push(changedTouches[i]);
|
||||
}
|
||||
|
@ -299,7 +299,7 @@ export function registerMouseEvents(videoPlayer, playerElement) {
|
|||
touches[i].identifier;
|
||||
phrases[i] = changedTouches.find(
|
||||
function (e) {
|
||||
return e.identifier === touches[i].identifier
|
||||
return e.identifier === touches[i].identifier;
|
||||
}) === undefined ? PointerPhase.Stationary : phase;
|
||||
}
|
||||
|
||||
|
@ -337,22 +337,22 @@ export function registerMouseEvents(videoPlayer, playerElement) {
|
|||
sendTouchMove = (e) => {
|
||||
sendTouch(e, PointerPhase.Moved);
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
sendTouchStart = (e) => {
|
||||
sendTouch(e, PointerPhase.Began);
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
sendTouchEnd = (e) => {
|
||||
sendTouch(e, PointerPhase.Ended);
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
sendTouchCancel = (e) => {
|
||||
sendTouch(e, PointerPhase.Canceled);
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
sendMouse = (e) => {
|
||||
const scale = _videoPlayer.videoScale;
|
||||
|
@ -371,7 +371,7 @@ export function registerMouseEvents(videoPlayer, playerElement) {
|
|||
data.setInt16(3, y, true);
|
||||
data.setUint8(5, e.buttons);
|
||||
_videoPlayer && _videoPlayer.sendMsg(data.buffer);
|
||||
}
|
||||
};
|
||||
|
||||
function sendMouseWheel(e) {
|
||||
Logger.log("mouse wheel with delta " + e.wheelDelta);
|
||||
|
@ -382,46 +382,46 @@ export function registerMouseEvents(videoPlayer, playerElement) {
|
|||
_videoPlayer && _videoPlayer.sendMsg(data.buffer);
|
||||
}
|
||||
|
||||
// Listen to mouse events
|
||||
playerElement.addEventListener('click', sendMouse, false);
|
||||
playerElement.addEventListener('mousedown', sendMouse, false);
|
||||
playerElement.addEventListener('mouseup', sendMouse, false);
|
||||
playerElement.addEventListener('mousemove', sendMouse, false);
|
||||
playerElement.addEventListener('wheel', sendMouseWheel, false);
|
||||
// Listen to mouse events
|
||||
playerElement.addEventListener('click', sendMouse, false);
|
||||
playerElement.addEventListener('mousedown', sendMouse, false);
|
||||
playerElement.addEventListener('mouseup', sendMouse, false);
|
||||
playerElement.addEventListener('mousemove', sendMouse, false);
|
||||
playerElement.addEventListener('wheel', sendMouseWheel, false);
|
||||
|
||||
// Listen to touch events based on "Touch Events Level1" TR.
|
||||
//
|
||||
// Touch event Level1 https://www.w3.org/TR/touch-events/
|
||||
// Touch event Level2 https://w3c.github.io/touch-events/
|
||||
//
|
||||
playerElement.addEventListener('touchend', sendTouchEnd, false);
|
||||
playerElement.addEventListener('touchstart', sendTouchStart, false);
|
||||
playerElement.addEventListener('touchcancel', sendTouchCancel, false);
|
||||
playerElement.addEventListener('touchmove', sendTouchMove, false);
|
||||
// Listen to touch events based on "Touch Events Level1" TR.
|
||||
//
|
||||
// Touch event Level1 https://www.w3.org/TR/touch-events/
|
||||
// Touch event Level2 https://w3c.github.io/touch-events/
|
||||
//
|
||||
playerElement.addEventListener('touchend', sendTouchEnd, false);
|
||||
playerElement.addEventListener('touchstart', sendTouchStart, false);
|
||||
playerElement.addEventListener('touchcancel', sendTouchCancel, false);
|
||||
playerElement.addEventListener('touchmove', sendTouchMove, false);
|
||||
}
|
||||
|
||||
|
||||
export function unregisterMouseEvents(videoPlayer, playerElement) {
|
||||
export function unregisterMouseEvents(playerElement) {
|
||||
|
||||
// Stop listening to mouse events
|
||||
playerElement.removeEventListener('click', sendMouse, false);
|
||||
playerElement.removeEventListener('mousedown', sendMouse, false);
|
||||
playerElement.removeEventListener('mouseup', sendMouse, false);
|
||||
playerElement.removeEventListener('mousemove', sendMouse, false);
|
||||
playerElement.removeEventListener('wheel', sendMouseWheel, false);
|
||||
// Stop listening to mouse events
|
||||
playerElement.removeEventListener('click', sendMouse, false);
|
||||
playerElement.removeEventListener('mousedown', sendMouse, false);
|
||||
playerElement.removeEventListener('mouseup', sendMouse, false);
|
||||
playerElement.removeEventListener('mousemove', sendMouse, false);
|
||||
playerElement.removeEventListener('wheel', sendMouseWheel, false);
|
||||
|
||||
// Stop listening to touch events based on "Touch Events Level1" TR.
|
||||
playerElement.removeEventListener('touchend', sendTouchEnd, false);
|
||||
playerElement.removeEventListener('touchstart', sendTouchStart, false);
|
||||
playerElement.removeEventListener('touchcancel', sendTouchCancel, false);
|
||||
playerElement.removeEventListener('touchmove', sendTouchMove, false);
|
||||
// Stop listening to touch events based on "Touch Events Level1" TR.
|
||||
playerElement.removeEventListener('touchend', sendTouchEnd, false);
|
||||
playerElement.removeEventListener('touchstart', sendTouchStart, false);
|
||||
playerElement.removeEventListener('touchcancel', sendTouchCancel, false);
|
||||
playerElement.removeEventListener('touchmove', sendTouchMove, false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
export function sendClickEvent(videoPlayer, elementId) {
|
||||
let data = new DataView(new ArrayBuffer(3));
|
||||
data.setUint8(0, InputEvent.ButtonClick);
|
||||
data.setInt16(1, elementId, true);
|
||||
videoPlayer && videoPlayer.sendMsg(data.buffer);
|
||||
let data = new DataView(new ArrayBuffer(3));
|
||||
data.setUint8(0, InputEvent.ButtonClick);
|
||||
data.setInt16(1, elementId, true);
|
||||
videoPlayer && videoPlayer.sendMsg(data.buffer);
|
||||
}
|
||||
|
|
|
@ -16,11 +16,11 @@ export default class Signaling extends EventTarget {
|
|||
else {
|
||||
return { 'Content-Type': 'application/json' };
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
url(method) {
|
||||
return location.origin + '/signaling/' + method;
|
||||
};
|
||||
}
|
||||
|
||||
async start() {
|
||||
const createResponse = await fetch(this.url(''), { method: 'PUT', headers: this.headers() });
|
||||
|
@ -106,26 +106,27 @@ export default class Signaling extends EventTarget {
|
|||
const json = await res.json();
|
||||
this.dispatchEvent(new CustomEvent('connect', { detail: json }));
|
||||
return json;
|
||||
};
|
||||
}
|
||||
|
||||
async deleteConnection(connectionId) {
|
||||
const data = { 'connectionId': connectionId };
|
||||
const res = await fetch(this.url('connection'), { method: 'DELETE', headers: this.headers(), body: JSON.stringify(data) });
|
||||
const json = await res.json();
|
||||
this.dispatchEvent(new CustomEvent('disconnect', { detail: json }));
|
||||
return json;
|
||||
};
|
||||
}
|
||||
|
||||
async sendOffer(connectionId, sdp) {
|
||||
const data = { 'sdp': sdp, 'connectionId': connectionId };
|
||||
Logger.log('sendOffer:', data);
|
||||
await fetch(this.url('offer'), { method: 'POST', headers: this.headers(), body: JSON.stringify(data) });
|
||||
};
|
||||
}
|
||||
|
||||
async sendAnswer(connectionId, sdp) {
|
||||
const data = { 'sdp': sdp, 'connectionId': connectionId };
|
||||
Logger.log('sendAnswer:', data);
|
||||
await fetch(this.url('answer'), { method: 'POST', headers: this.headers(), body: JSON.stringify(data) });
|
||||
};
|
||||
}
|
||||
|
||||
async sendCandidate(connectionId, candidate, sdpMid, sdpMLineIndex) {
|
||||
const data = {
|
||||
|
@ -136,17 +137,19 @@ export default class Signaling extends EventTarget {
|
|||
};
|
||||
Logger.log('sendCandidate:', data);
|
||||
await fetch(this.url('candidate'), { method: 'POST', headers: this.headers(), body: JSON.stringify(data) });
|
||||
};
|
||||
}
|
||||
|
||||
async getOffer(fromTime = 0) {
|
||||
return await fetch(this.url(`offer?fromtime=${fromTime}`), { method: 'GET', headers: this.headers() });
|
||||
};
|
||||
}
|
||||
|
||||
async getAnswer(fromTime = 0) {
|
||||
return await fetch(this.url(`answer?fromtime=${fromTime}`), { method: 'GET', headers: this.headers() });
|
||||
};
|
||||
}
|
||||
|
||||
async getCandidate(fromTime = 0) {
|
||||
return await fetch(this.url(`candidate?fromtime=${fromTime}`), { method: 'GET', headers: this.headers() });
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class WebSocketSignaling extends EventTarget {
|
||||
|
@ -155,10 +158,11 @@ export class WebSocketSignaling extends EventTarget {
|
|||
super();
|
||||
this.sleep = msec => new Promise(resolve => setTimeout(resolve, msec));
|
||||
|
||||
let websocketUrl;
|
||||
if (location.protocol === "https:") {
|
||||
var websocketUrl = "wss://" + location.host;
|
||||
websocketUrl = "wss://" + location.host;
|
||||
} else {
|
||||
var websocketUrl = "ws://" + location.host;
|
||||
websocketUrl = "ws://" + location.host;
|
||||
}
|
||||
|
||||
this.websocket = new WebSocket(websocketUrl);
|
||||
|
@ -166,11 +170,11 @@ export class WebSocketSignaling extends EventTarget {
|
|||
|
||||
this.websocket.onopen = () => {
|
||||
this.isWsOpen = true;
|
||||
}
|
||||
};
|
||||
|
||||
this.websocket.onclose = () => {
|
||||
this.isWsOpen = false;
|
||||
}
|
||||
};
|
||||
|
||||
this.websocket.onmessage = (event) => {
|
||||
const msg = JSON.parse(event.data);
|
||||
|
@ -199,7 +203,7 @@ export class WebSocketSignaling extends EventTarget {
|
|||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
async start() {
|
||||
|
@ -219,13 +223,13 @@ export class WebSocketSignaling extends EventTarget {
|
|||
const sendJson = JSON.stringify({ type: "connect", connectionId: connectionId });
|
||||
Logger.log(sendJson);
|
||||
this.websocket.send(sendJson);
|
||||
};
|
||||
}
|
||||
|
||||
deleteConnection(connectionId) {
|
||||
const sendJson = JSON.stringify({ type: "disconnect", connectionId: connectionId });
|
||||
Logger.log(sendJson);
|
||||
this.websocket.send(sendJson);
|
||||
};
|
||||
}
|
||||
|
||||
sendOffer(connectionId, sdp) {
|
||||
const data = { 'sdp': sdp, 'connectionId': connectionId };
|
||||
|
|
|
@ -10,13 +10,13 @@ let useWebSocket;
|
|||
|
||||
window.document.oncontextmenu = function () {
|
||||
return false; // cancel default menu
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('resize', function () {
|
||||
videoPlayer.resizeVideo();
|
||||
}, true);
|
||||
|
||||
window.addEventListener('beforeunload', async (e) => {
|
||||
window.addEventListener('beforeunload', async () => {
|
||||
await videoPlayer.stop();
|
||||
}, true);
|
||||
|
||||
|
@ -30,7 +30,7 @@ async function setup() {
|
|||
function showWarningIfNeeded(startupMode) {
|
||||
const warningDiv = document.getElementById("warning");
|
||||
if (startupMode == "private") {
|
||||
warningDiv.innerHTML = "<h4>Warning</h4> This sample is not working on Private Mode."
|
||||
warningDiv.innerHTML = "<h4>Warning</h4> This sample is not working on Private Mode.";
|
||||
warningDiv.hidden = false;
|
||||
}
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ function onClickPlayButton() {
|
|||
document.addEventListener('webkitfullscreenchange', onFullscreenChange);
|
||||
document.addEventListener('fullscreenchange', onFullscreenChange);
|
||||
|
||||
function onFullscreenChange(e) {
|
||||
function onFullscreenChange() {
|
||||
if (document.webkitFullscreenElement || document.fullscreenElement) {
|
||||
playerDiv.style.position = "absolute";
|
||||
elementFullscreenButton.style.display = 'none';
|
||||
|
@ -142,7 +142,7 @@ async function setupVideoPlayer(elements) {
|
|||
}
|
||||
|
||||
function onDisconnect() {
|
||||
const playerDiv = document.getElementById('player')
|
||||
const playerDiv = document.getElementById('player');
|
||||
clearChildren(playerDiv);
|
||||
videoPlayer = null;
|
||||
showPlayButton();
|
||||
|
|
|
@ -12,7 +12,7 @@ function uuid4() {
|
|||
var temp_url = URL.createObjectURL(new Blob());
|
||||
var uuid = temp_url.toString();
|
||||
URL.revokeObjectURL(temp_url);
|
||||
return uuid.split(/[:\/]/g).pop().toLowerCase(); // remove prefixes
|
||||
return uuid.split(/[:/]/g).pop().toLowerCase(); // remove prefixes
|
||||
}
|
||||
|
||||
export class VideoPlayer {
|
||||
|
@ -152,7 +152,7 @@ export class VideoPlayer {
|
|||
const desc = new RTCSessionDescription({ sdp: offer.sdp, type: "offer" });
|
||||
await this.pc.setLocalDescription(desc);
|
||||
await this.signaling.sendOffer(this.connectionId, offer.sdp);
|
||||
};
|
||||
}
|
||||
|
||||
resizeVideo() {
|
||||
const clientRect = this.video.getBoundingClientRect();
|
||||
|
@ -218,7 +218,7 @@ export class VideoPlayer {
|
|||
this.pc.close();
|
||||
this.pc = null;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
sendMsg(msg) {
|
||||
if (this.channel == null) {
|
||||
|
@ -238,7 +238,7 @@ export class VideoPlayer {
|
|||
Logger.log('Attempt to sendMsg message while connection closed.');
|
||||
break;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
async stop() {
|
||||
await this.signaling.stop();
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
// test for client
|
||||
|
||||
import { default as Signaling, WebSocketSignaling } from "../public/js/signaling.js";
|
||||
|
||||
test('basic', () => {
|
||||
var http = new Signaling();
|
||||
var ws = new WebSocketSignaling();
|
||||
expect('hello').toBe('hello');
|
||||
expect(http).not.toBeNull();
|
||||
});
|
||||
|
||||
test('basic2', () => {
|
||||
expect(1 + 1).toBe(2);
|
||||
var ws = new WebSocketSignaling();
|
||||
expect(ws).not.toBeNull();
|
||||
});
|
||||
|
|
|
@ -726,10 +726,10 @@ MonoBehaviour:
|
|||
click:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 644105488}
|
||||
m_TargetAssemblyTypeName: UnityEngine.AudioSource, UnityEngine
|
||||
m_MethodName: Play
|
||||
m_Mode: 1
|
||||
- m_Target: {fileID: 705507993}
|
||||
m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
|
||||
m_MethodName: SetActive
|
||||
m_Mode: 6
|
||||
m_Arguments:
|
||||
m_ObjectArgument: {fileID: 0}
|
||||
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||
|
@ -2982,7 +2982,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 045786cf504bd7347842d6948241cbd0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
urlSignaling: ws://192.168.11.11
|
||||
urlSignaling: ws://localhost
|
||||
signalingType: Unity.RenderStreaming.Signaling.WebSocketSignaling
|
||||
iceServers:
|
||||
- credential:
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
cd WebApp\client
|
||||
call npm install
|
||||
call npm run lint
|
||||
call npm run test
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
cd WebApp/client
|
||||
npm install
|
||||
npm run lint
|
||||
npm run test
|
||||
|
|
Загрузка…
Ссылка в новой задаче