From 6f2ac0c4428c36a7cc0288825bb542428921f063 Mon Sep 17 00:00:00 2001 From: "maria.cano" Date: Thu, 21 Sep 2023 13:04:12 +0200 Subject: [PATCH 1/5] feat: remove e2e-runner package --- views/package-lock.json | 3136 +-------------------------------------- views/package.json | 7 +- 2 files changed, 47 insertions(+), 3096 deletions(-) diff --git a/views/package-lock.json b/views/package-lock.json index af6b45e9e6..55a39edc3f 100644 --- a/views/package-lock.json +++ b/views/package-lock.json @@ -13,1091 +13,6 @@ "regenerator-runtime": "^0.13.4" } }, - "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", - "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", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - } - }, - "@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@jimp/bmp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.10.3.tgz", - "integrity": "sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "bmp-js": "^0.1.0", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/core": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.10.3.tgz", - "integrity": "sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "core-js": "^3.4.1", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - } - } - }, - "@jimp/custom": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.10.3.tgz", - "integrity": "sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/gif": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.10.3.tgz", - "integrity": "sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1", - "omggif": "^1.0.9" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/jpeg": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.10.3.tgz", - "integrity": "sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1", - "jpeg-js": "^0.3.4" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-blit": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz", - "integrity": "sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-blur": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz", - "integrity": "sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-circle": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz", - "integrity": "sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-color": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.10.3.tgz", - "integrity": "sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1", - "tinycolor2": "^1.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-contain": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz", - "integrity": "sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-cover": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz", - "integrity": "sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-crop": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz", - "integrity": "sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-displace": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz", - "integrity": "sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-dither": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz", - "integrity": "sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-fisheye": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz", - "integrity": "sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-flip": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz", - "integrity": "sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-gaussian": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz", - "integrity": "sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-invert": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz", - "integrity": "sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-mask": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz", - "integrity": "sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-normalize": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz", - "integrity": "sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-print": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.10.3.tgz", - "integrity": "sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1", - "load-bmfont": "^1.4.0" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-resize": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz", - "integrity": "sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-rotate": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz", - "integrity": "sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-scale": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz", - "integrity": "sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-shadow": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz", - "integrity": "sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugin-threshold": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz", - "integrity": "sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/plugins": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.10.3.tgz", - "integrity": "sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.10.3", - "@jimp/plugin-blur": "^0.10.3", - "@jimp/plugin-circle": "^0.10.3", - "@jimp/plugin-color": "^0.10.3", - "@jimp/plugin-contain": "^0.10.3", - "@jimp/plugin-cover": "^0.10.3", - "@jimp/plugin-crop": "^0.10.3", - "@jimp/plugin-displace": "^0.10.3", - "@jimp/plugin-dither": "^0.10.3", - "@jimp/plugin-fisheye": "^0.10.3", - "@jimp/plugin-flip": "^0.10.3", - "@jimp/plugin-gaussian": "^0.10.3", - "@jimp/plugin-invert": "^0.10.3", - "@jimp/plugin-mask": "^0.10.3", - "@jimp/plugin-normalize": "^0.10.3", - "@jimp/plugin-print": "^0.10.3", - "@jimp/plugin-resize": "^0.10.3", - "@jimp/plugin-rotate": "^0.10.3", - "@jimp/plugin-scale": "^0.10.3", - "@jimp/plugin-shadow": "^0.10.3", - "@jimp/plugin-threshold": "^0.10.3", - "core-js": "^3.4.1", - "timm": "^1.6.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/png": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.10.3.tgz", - "integrity": "sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.10.3", - "core-js": "^3.4.1", - "pngjs": "^3.3.3" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/tiff": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.10.3.tgz", - "integrity": "sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "core-js": "^3.4.1", - "utif": "^2.0.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/types": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.10.3.tgz", - "integrity": "sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.10.3", - "@jimp/gif": "^0.10.3", - "@jimp/jpeg": "^0.10.3", - "@jimp/png": "^0.10.3", - "@jimp/tiff": "^0.10.3", - "core-js": "^3.4.1", - "timm": "^1.6.1" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@jimp/utils": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.10.3.tgz", - "integrity": "sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "core-js": "^3.4.1", - "regenerator-runtime": "^0.13.3" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "@oat-sa/e2e-runner": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@oat-sa/e2e-runner/-/e2e-runner-1.5.2.tgz", - "integrity": "sha512-//BtOEDACtgU0XLo/gRlSUf+WwAxN5/xQfn5/CmF4b2MLV6mVTBRzjMsj8MzYuJPjxaxYfnw4Fx+MIGmT4o9ng==", - "dev": true, - "requires": { - "cypress": "^9.0.0", - "cypress-file-upload": "^5.0.8", - "cypress-plugin-snapshots": "^1.4.4", - "fs-extra": "^11.1.1", - "oauth-sign": "^0.9.0" - }, - "dependencies": { - "@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cypress": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.7.0.tgz", - "integrity": "sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q==", - "dev": true, - "requires": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^5.1.0", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "eventemitter2": "^6.4.3", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.6", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "@oat-sa/tao-core-libs": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@oat-sa/tao-core-libs/-/tao-core-libs-0.5.3.tgz", @@ -1123,1369 +38,82 @@ "resolved": "https://registry.npmjs.org/@oat-sa/tao-core-ui/-/tao-core-ui-2.2.0.tgz", "integrity": "sha512-guRQZTv0OsT+mL5LxGMAlaQTsEW4yqfGnH2IY0zbLU7V2JhA+3mnzlc/MF0h/QaDdjUBl8NlQCCINV+TNt8Dww==" }, - "@types/node": { - "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - } - } - }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "optional": true }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", - "dev": true - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "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 - }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", "optional": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, "codemirror": { "version": "5.65.12", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.12.tgz", "integrity": "sha512-z2jlHBocElRnPYysN2HAuhXbO3DNB0bcSKmNz3hcWR2Js2Dkhc1bEOxG93Z3DeUrnm+qx56XOY5wQmbP5KY0sw==" }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "dev": true, - "requires": { - "node-fetch": "^2.6.11" - } - }, - "cypress-downloadfile": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cypress-downloadfile/-/cypress-downloadfile-1.2.3.tgz", - "integrity": "sha512-XvjMi081VJPs8gdmITHLpdbcscW8HHlTpIuKBqqFTRnIqPqcsjaZfJ22tqqDSr5w4X9T5FPFfr4SiklPsfoXiw==", - "dev": true, - "requires": { - "cross-fetch": "^3.1.5", - "fs-extra": "10.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "cypress-file-upload": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", - "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==", - "dev": true - }, - "cypress-plugin-snapshots": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/cypress-plugin-snapshots/-/cypress-plugin-snapshots-1.4.4.tgz", - "integrity": "sha512-rijq3RTEZNtxQA4KCUwjXinmE1Ww+z6cQW0B14iodFM/HlX5LN16XT/2QS3X1nUXRKt0QdTrAC5MQfMUrjBkSQ==", - "dev": true, - "requires": { - "diff2html": "^2.7.0", - "fs-extra": "^7.0.1", - "image-size": "^0.7.2", - "jimp": "^0.10.3", - "js-base64": "^2.5.1", - "lodash": "^4.17.13", - "pixelmatch": "^4.0.2", - "pngjs": "^3.3.3", - "prettier": "^1.16.4", - "rimraf": "^2.6.3", - "sanitize-filename": "^1.6.1", - "socket.io": "^2.2.0", - "socket.io-client": "^2.2.0", - "source-map-support": "^0.5.10", - "unidiff": "1.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dayjs": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff2html": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-2.12.2.tgz", - "integrity": "sha512-G/Zn1KyG/OeC+67N/P26WHsQpjrjUiRyWGvg29ypy3MxSsBmF0bzsU/Irq70i2UAg+f/MzmLx4v/Nkt01TOU3g==", - "dev": true, - "requires": { - "diff": "^4.0.1", - "hogan.js": "^3.0.2", - "merge": "^1.2.1", - "whatwg-fetch": "^3.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "dompurify": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", - "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.1.tgz", - "integrity": "sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "engine.io-client": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.3.tgz", - "integrity": "sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "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" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eve-raphael": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz", - "integrity": "sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug==" - }, - "eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "dev": true - }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - } - }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==", - "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 - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fastestsmallesttextencoderdecoder": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.14.tgz", - "integrity": "sha512-ov+uDh4DMZHpZvcGwlCb9tfntaHwRI7SK+/6XkdXhksZLJcMoTJ20FZx3GvujnsGjMvJVQ71LkduEUEPwX1BvQ==" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", - "dev": true - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gamp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/gamp/-/gamp-0.2.1.tgz", - "integrity": "sha512-dZy17z9sc1k8mU/esu5Rb3/0ZMEJldkRnikb+c8KtNLslGzJqBX7TJfaAlUaoCT9cw6h+SCUTO3tvuRBVCgbkg==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "requires": { - "async": "^3.2.0" - }, - "dependencies": { - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - } - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "handlebars": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", - "integrity": "sha512-l7sLUTqXCkc1Ypoy8mSOWZFEZJK3VYQYnLfIVTRJeSHdgzt6hXkQ0uPGugydPa99KyyBdsi0J3WvYfm/HX5naQ==", - "requires": { - "optimist": "~0.3", - "uglify-js": "~2.3" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "hogan.js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", - "integrity": "sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==", - "dev": true, - "requires": { - "mkdirp": "0.3.0", - "nopt": "1.0.10" - } - }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "idb-wrapper": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", - "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==" - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "image-size": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", - "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interactjs": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/interactjs/-/interactjs-1.3.4.tgz", - "integrity": "sha512-AQ2CdPEyHqiEEQ1FFgMBj79UEsU1+rUwSXuhOkflvB65p4iECft28SN/PvhD/Y9OtNge8aH1qTibjAi+RXQMqQ==" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "jimp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.10.3.tgz", - "integrity": "sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.10.3", - "@jimp/plugins": "^0.10.3", - "@jimp/types": "^0.10.3", - "core-js": "^3.4.1", - "regenerator-runtime": "^0.13.3" - }, - "dependencies": { - "core-js": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", - "dev": true - } - } - }, - "jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==", - "dev": true - }, - "jquery": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-1.9.1.tgz", - "integrity": "sha512-gK7jP5cOEUzjyL0dy7MEMfeSFlmt1yNSdZK98CL8W6o0DiNVW5O9hLcD2bdl48mL8q7bEJgd7d9AhhDaN+iDSQ==" - }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true - }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "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" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "lodash": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", - "integrity": "sha512-qa6QqjA9jJB4AYw+NpD2GI4dzHL6Mv0hL+By6iIul4Ce0C1refrjZJmcGvWdnLUwl4LIPtvzje3UQfGH+nCEsQ==" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "dompurify": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz", + "integrity": "sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA==" }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true + "eve-raphael": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eve-raphael/-/eve-raphael-0.5.0.tgz", + "integrity": "sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug==" }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "fastestsmallesttextencoderdecoder": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.14.tgz", + "integrity": "sha512-ov+uDh4DMZHpZvcGwlCb9tfntaHwRI7SK+/6XkdXhksZLJcMoTJ20FZx3GvujnsGjMvJVQ71LkduEUEPwX1BvQ==" }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", "dev": true }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "gamp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/gamp/-/gamp-0.2.1.tgz", + "integrity": "sha512-dZy17z9sc1k8mU/esu5Rb3/0ZMEJldkRnikb+c8KtNLslGzJqBX7TJfaAlUaoCT9cw6h+SCUTO3tvuRBVCgbkg==" }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "handlebars": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", + "integrity": "sha512-l7sLUTqXCkc1Ypoy8mSOWZFEZJK3VYQYnLfIVTRJeSHdgzt6hXkQ0uPGugydPa99KyyBdsi0J3WvYfm/HX5naQ==", "requires": { - "mime-db": "1.52.0" + "optimist": "~0.3", + "uglify-js": "~2.3" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } + "idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==" }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "interactjs": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/interactjs/-/interactjs-1.3.4.tgz", + "integrity": "sha512-AQ2CdPEyHqiEEQ1FFgMBj79UEsU1+rUwSXuhOkflvB65p4iECft28SN/PvhD/Y9OtNge8aH1qTibjAi+RXQMqQ==" }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true + "jquery": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-1.9.1.tgz", + "integrity": "sha512-gK7jP5cOEUzjyL0dy7MEMfeSFlmt1yNSdZK98CL8W6o0DiNVW5O9hLcD2bdl48mL8q7bEJgd7d9AhhDaN+iDSQ==" }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==", - "dev": true + "lodash": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", + "integrity": "sha512-qa6QqjA9jJB4AYw+NpD2GI4dzHL6Mv0hL+By6iIul4Ce0C1refrjZJmcGvWdnLUwl4LIPtvzje3UQfGH+nCEsQ==" }, "moment": { "version": "2.29.4", @@ -2500,63 +128,6 @@ "moment": "^2.29.4" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "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 - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, "optimist": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", @@ -2565,163 +136,11 @@ "wordwrap": "~0.0.2" } }, - "ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", - "dev": true - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", - "dev": true - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dev": true, - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", - "dev": true, - "requires": { - "pngjs": "^3.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - }, "popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, "raphael": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/raphael/-/raphael-2.3.0.tgz", @@ -2735,185 +154,11 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dev": true, - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "select2": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/select2/-/select2-3.5.1.tgz", "integrity": "sha512-IFX3UFPpPyK1I1Kuw1R1x+upMyNAZbMlkFhiTnRCRR7ii0KU1brmJMLa3GZcrMWCHiQlm0eKqb6i4XO4pqOrGQ==" }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "socket.io": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.5.0.tgz", - "integrity": "sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==", - "dev": true, - "requires": { - "debug": "~4.1.0", - "engine.io": "~3.6.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.5.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, - "socket.io-client": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.5.0.tgz", - "integrity": "sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "socket.io-parser": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.3.tgz", - "integrity": "sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - } - } - }, - "socket.io-parser": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.3.tgz", - "integrity": "sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", @@ -2923,86 +168,6 @@ "amdefine": ">=0.0.4" } }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "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 - } - } - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", - "dev": true - }, - "tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==", - "dev": true - }, "tooltip.js": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tooltip.js/-/tooltip.js-1.3.3.tgz", @@ -3011,52 +176,6 @@ "popper.js": "^1.0.2" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dev": true, - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, "uglify-js": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz", @@ -3068,183 +187,20 @@ "source-map": "~0.1.7" } }, - "unidiff": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unidiff/-/unidiff-1.0.2.tgz", - "integrity": "sha512-2sbEzki5fBmjgAqoafwxRenfMcumMlmVAoJDwYJa3CI4ZVugkdR6qjTw5sVsl29/4JfBBXhWEAd5ars8nRdqXg==", - "dev": true, - "requires": { - "diff": "^2.2.2" - }, - "dependencies": { - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha512-9wfm3RLzMp/PyTFWuw9liEzdlxsdGixCW0ZTU1XDmtlAkvpVXTPGF8KnfSs0hm3BPbg19OrUPPsRkHXoREpP1g==", - "dev": true - } - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, "url-polyfill": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.12.tgz", "integrity": "sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==" }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", - "dev": true - }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", - "dev": true, - "requires": { - "pako": "^1.0.5" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "webcrypto-shim": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==" }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", - "dev": true - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", - "dev": true } } } diff --git a/views/package.json b/views/package.json index 231cff97cd..0e78bebd93 100644 --- a/views/package.json +++ b/views/package.json @@ -7,10 +7,7 @@ "type": "git", "url": "git+https://github.com/oat-sa/tao-core.git" }, - "scripts": { - "cy:open": "cypress open", - "cy:run": "cypress run" - }, + "scripts": {}, "dependencies": { "@babel/polyfill": "^7.4.4", "@oat-sa/tao-core-libs": "^0.5.3", @@ -33,8 +30,6 @@ "url-polyfill": "1.1.12" }, "devDependencies": { - "@oat-sa/e2e-runner": "^1.5.2", - "cypress-downloadfile": "^1.2.3", "fs": "0.0.1-security" } } From 96742343c7d2793dd6261e42d80d81b1e5bf76f7 Mon Sep 17 00:00:00 2001 From: "maria.cano" Date: Thu, 21 Sep 2023 13:06:52 +0200 Subject: [PATCH 2/5] feat: remove links to Cypress folder --- views/cypress/README.md | 77 --- views/cypress/envs/env.sample | 5 - views/cypress/fixtures/example.json | 5 - .../fixtures/math_grade_1_1642670091.rdf | 337 ------------- views/cypress/plugins/downloads.js | 105 ---- views/cypress/plugins/index.js | 32 -- views/cypress/support/CKEditor.js | 30 -- views/cypress/support/commands.js | 143 ------ views/cypress/support/drag-and-drop.js | 107 ---- views/cypress/support/file-upload.js | 37 -- .../cypress/support/genericUIInteractions.js | 18 - views/cypress/support/index.js | 43 -- views/cypress/support/manageList.js | 86 ---- views/cypress/support/manageSchema.js | 174 ------- views/cypress/support/resourceProperties.js | 201 -------- views/cypress/support/resourceTree.js | 462 ------------------ views/cypress/support/search.js | 46 -- views/cypress/support/selection.js | 39 -- views/cypress/support/userManagement.js | 84 ---- views/cypress/tests/item-author-role.spec.js | 92 ---- views/cypress/tests/login.spec.js | 40 -- views/cypress/tests/test-author-role.spec.js | 112 ----- views/cypress/tests/test-taker-role.spec.js | 61 --- views/cypress/tests/user-management.spec.js | 74 --- views/cypress/utils/cleanup.js | 51 -- views/cypress/utils/helpers.js | 48 -- views/cypress/utils/selectors.js | 25 - views/cypress/utils/selectors/list.js | 26 - views/cypress/utils/urls.js | 21 - views/cypress/utils/userRoles.js | 7 - views/cypress/utils/users.js | 26 - 31 files changed, 2614 deletions(-) delete mode 100644 views/cypress/README.md delete mode 100644 views/cypress/envs/env.sample delete mode 100644 views/cypress/fixtures/example.json delete mode 100644 views/cypress/fixtures/math_grade_1_1642670091.rdf delete mode 100644 views/cypress/plugins/downloads.js delete mode 100644 views/cypress/plugins/index.js delete mode 100644 views/cypress/support/CKEditor.js delete mode 100644 views/cypress/support/commands.js delete mode 100644 views/cypress/support/drag-and-drop.js delete mode 100644 views/cypress/support/file-upload.js delete mode 100644 views/cypress/support/genericUIInteractions.js delete mode 100644 views/cypress/support/index.js delete mode 100644 views/cypress/support/manageList.js delete mode 100644 views/cypress/support/manageSchema.js delete mode 100644 views/cypress/support/resourceProperties.js delete mode 100644 views/cypress/support/resourceTree.js delete mode 100644 views/cypress/support/search.js delete mode 100644 views/cypress/support/selection.js delete mode 100644 views/cypress/support/userManagement.js delete mode 100644 views/cypress/tests/item-author-role.spec.js delete mode 100644 views/cypress/tests/login.spec.js delete mode 100644 views/cypress/tests/test-author-role.spec.js delete mode 100644 views/cypress/tests/test-taker-role.spec.js delete mode 100644 views/cypress/tests/user-management.spec.js delete mode 100644 views/cypress/utils/cleanup.js delete mode 100644 views/cypress/utils/helpers.js delete mode 100644 views/cypress/utils/selectors.js delete mode 100644 views/cypress/utils/selectors/list.js delete mode 100644 views/cypress/utils/urls.js delete mode 100644 views/cypress/utils/userRoles.js delete mode 100644 views/cypress/utils/users.js diff --git a/views/cypress/README.md b/views/cypress/README.md deleted file mode 100644 index 13e2c82141..0000000000 --- a/views/cypress/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# E2E testing - -Development of end-to-end tests in this project is based on the principle of storing the test specs, fixtures and environment configs here, while some shared parts are imported. The imported parts are the Cypress binary, plugins and shared support code, which are all provided by the dependency `@oat-sa/e2e-runner`. - -The local structure is a reduced form of the classic Cypress project structure: - -
-|-- cypress.json        # project config
-|-- cypress/            #
-  |-- envs/             # environment configs
-  |-- fixtures/         # static data used in tests
-  |-- tests/            # root folder of the tests
-  |-- plugins/          # folder for the plugins
-  |-- support/          # support commands, imports, global setup
-
- -## Configuration - -Because tests may be run against various envs (local, demo, staging, etc), we need to have multiple env files. They are stored in `cypress/envs/`, and loaded into the main config according to the key `env.configFile` defined in the `cypress.json`. - -Create `envs/env*.json` file and set it in the `cypress.json`: - -```json -{ - "env": { - "configFile": "cypress/envs/env-local.json" - } -} -``` - -## Commands - -[Commands](https://docs.cypress.io/api/cypress-api/custom-commands.html) are a key part of Cypress. For now commands can be registered to `Cypress.Commands` in `cypress/support/commands` file. -There's no ability to register them within the extensions yet. - -> When registering a local or global command, take care to avoid name collisions with any command you might have imported. - -## Plugins - -Plugins can be created in `cypress/plugins` directory. -Some plugins also register commands. You can import these files (for their side effects) in the `cypress/support/index.js`. - -Example: - -```js -// cypress/support/index.js -import '@cypress/skip-test/support'; -``` -There's no ability to add plugins in the extensions yet. - -## Fixtures - -Any data needed in local tests (and not hard-coded) should be placed in `cypress/fixtures/`. Can be JSON, JavaScript, zip files, whatever is needed. -There's no ability to add fixtures in the extensions yet. - - -## How to run the tests - -To run the tests there's a single entry point in tao core. - -In your tao installation folder: -* `cd tao/views` -* `npm install` -* `npm run cy:open` - to open cypress UI and browser - - or - - `npm run cy:run` - to run the tests headless - -## How to create your tests - -Add .spec files to the `views/cypress/tests` folder of an appropriate extension. -> Remember to place the tests to corresponding extension. - -> Feel free to use common commands from the tao core (located in `tao/views/cypress/support`) - -> The tests should not rely on the interface text because different environments may have different language settings. \ No newline at end of file diff --git a/views/cypress/envs/env.sample b/views/cypress/envs/env.sample deleted file mode 100644 index 00ec8bbf85..0000000000 --- a/views/cypress/envs/env.sample +++ /dev/null @@ -1,5 +0,0 @@ -{ - "baseUrl": "https://tao.docker.localhost", - "adminUser": "admin", - "adminPass": "pass" -} diff --git a/views/cypress/fixtures/example.json b/views/cypress/fixtures/example.json deleted file mode 100644 index 02e4254378..0000000000 --- a/views/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/views/cypress/fixtures/math_grade_1_1642670091.rdf b/views/cypress/fixtures/math_grade_1_1642670091.rdf deleted file mode 100644 index 06352825a3..0000000000 --- a/views/cypress/fixtures/math_grade_1_1642670091.rdf +++ /dev/null @@ -1,337 +0,0 @@ - - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 1629974908.9884 - MATH Grade 1 - http://www.tao.lu/Ontologies/TAO.rdf#Tree - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9ccf1c-d7cc-11e8-824f-0242ac160002 - 1629974909.002 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - Grade 1 - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9b1433-d7cc-11e8-824f-0242ac160002 - 1629974909.0043 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - Operations & Algebraic Thinking - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9b3728-d7cc-11e8-824f-0242ac160002 - 1629974909.0061 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.A Represent and solve problems involving addition and subtraction. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9bdee1-d7cc-11e8-824f-0242ac160002 - 1629974909.0084 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.A.1 Use addition and subtraction within 20 to solve word problems involving situations of adding to, taking from, putting together, taking apart, and comparing, with unknowns in all positions, e.g., by using objects, drawings, and equations with a symbol for the unknown number to represent the problem. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9d25bb-d7cc-11e8-824f-0242ac160002 - 1629974909.0104 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.A.2 Solve word problems that call for addition of three whole numbers whose sum is less than or equal to 20, e.g., by using objects, drawings, and equations with a symbol for the unknown number to represent the problem. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9cea7f-d7cc-11e8-824f-0242ac160002 - 1629974909.0126 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.B Understand and apply properties of operations and the relationship between addition and subtraction. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9e0fbe-d7cc-11e8-824f-0242ac160002 - 1629974909.0147 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.B.3 Apply properties of operations as strategies to add and subtract. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9ebb03-d7cc-11e8-824f-0242ac160002 - 1605694948.7512 - 1629974908.9806 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.B.4 Understand subtraction as an unknown-addend problem. For example, subtract 10 - 8 by finding the number that makes 10 when added to 8. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9df10d-d7cc-11e8-824f-0242ac160002 - 1629974909.0978 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.C Add and subtract within 20. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9f527f-d7cc-11e8-824f-0242ac160002 - 1629974909.0995 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.C.5 Relate counting to addition and subtraction (e.g., by counting on 2 to add 2). - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9fd4e5-d7cc-11e8-824f-0242ac160002 - 1629974909.1012 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.C.6 Add and subtract within 20, demonstrating fluency for addition and subtraction within 10. Use strategies such as counting on; making ten (e.g., 8 + 6 = 8 + 2 + 4 = 10 + 4 = 14); decomposing a number leading to a ten (e.g., 13 - 4 = 13 - 3 - 1 = 10 - 1 = 9); using the relationship between addition and subtraction (e.g., knowing that 8 + 4 = 12, one knows 12 - 8 = 4); and creating equivalent but easier or known sums (e.g., adding 6 + 7 by creating the known equivalent 6 + 6 + 1 = 12 + 1 = 13). - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9eb1a4-d7cc-11e8-824f-0242ac160002 - 1629974909.1033 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.D Work with addition and subtraction equations. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6ba03a8f-d7cc-11e8-824f-0242ac160002 - 1629974909.1052 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.D.7 Understand the meaning of the equal sign, and determine if equations involving addition and subtraction are true or false. For example, which of the following equations are true and which are false? 6 = 6, 7 = 8 - 1, 5 + 2 = 2 + 5, 4 + 1 = 5 + 2. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6ba09818-d7cc-11e8-824f-0242ac160002 - 1629974909.1071 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.OA.D.8 Determine the unknown whole number in an addition or subtraction equation relating three whole numbers. For example, determine the unknown number that makes the equation true in each of the equations 8 + ? = 11, 5 = _ - 3, 6 + 6 = _. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9cd178-d7cc-11e8-824f-0242ac160002 - 1629974909.1092 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - Number & Operations in Base Ten - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9b3160-d7cc-11e8-824f-0242ac160002 - 1629974909.1111 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.A Extend the counting sequence. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9bdbaf-d7cc-11e8-824f-0242ac160002 - 1605694948.9972 - 1629974909.0903 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.A.1 Count to 120, starting at any number less than 120. In this range, read and write numerals and represent a number of objects with a written numeral. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9ce809-d7cc-11e8-824f-0242ac160002 - 1629974909.1885 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.B Understand place value. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9d22e5-d7cc-11e8-824f-0242ac160002 - 1629974909.1901 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.B.2 Understand that the two digits of a two-digit number represent amounts of tens and ones. Understand the following as special cases: - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6ba1012f-d7cc-11e8-824f-0242ac160002 - 1629974909.1916 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.B.2.a 10 can be thought of as a bundle of ten ones — called a "ten." - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6ba1795a-d7cc-11e8-824f-0242ac160002 - 1629974909.1932 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.B.2.b The numbers from 11 to 19 are composed of a ten and one, two, three, four, five, six, seven, eight, or nine ones. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6ba1ff7c-d7cc-11e8-824f-0242ac160002 - 1629974909.1947 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.B.2.c The numbers 10, 20, 30, 40, 50, 60, 70, 80, 90 refer to one, two, three, four, five, six, seven, eight, or nine tens (and 0 ones). - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9e0d8d-d7cc-11e8-824f-0242ac160002 - 1629974909.1965 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.B.3 Compare two two-digit numbers based on meanings of the tens and ones digits, recording the results of comparisons with the symbols >, =, and - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9b3443-d7cc-11e8-824f-0242ac160002 - 1629974909.1982 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.C Use place value understanding and properties of operations to add and subtract. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9eb89a-d7cc-11e8-824f-0242ac160002 - 1629974909.1999 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.C.4 Add within 100, including adding a two-digit number and a one-digit number, and adding a two-digit number and a multiple of 10, using concrete models or drawings and strategies based on place value, properties of operations, and/or the relationship between addition and subtraction; relate the strategy to a written method and explain the reasoning used. Understand that in adding two-digit numbers, one adds tens and tens, ones and ones; and sometimes it is necessary to compose a ten. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9f4fd0-d7cc-11e8-824f-0242ac160002 - 1605694949.2457 - 1629974909.1822 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.C.5 Given a two-digit number, mentally find 10 more or 10 less than the number, without having to count; explain the reasoning used. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9fd080-d7cc-11e8-824f-0242ac160002 - 1629974909.2669 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.NBT.C.6 Subtract multiples of 10 in the range 10-90 from multiples of 10 in the range 10-90 (positive or zero differences), using concrete models or drawings and strategies based on place value, properties of operations, and/or the relationship between addition and subtraction; relate the strategy to a written method and explain the reasoning used. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9dde61-d7cc-11e8-824f-0242ac160002 - 1629974909.2685 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - Measurement & Data - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9b2e79-d7cc-11e8-824f-0242ac160002 - 1629974909.27 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.MD.A Measure lengths indirectly and by iterating length units. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9bd85b-d7cc-11e8-824f-0242ac160002 - 1629974909.2717 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.MD.A.1 Order three objects by length; compare the lengths of two objects indirectly by using a third object. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9d205c-d7cc-11e8-824f-0242ac160002 - 1629974909.2733 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.MD.A.2 Express the length of an object as a whole number of length units, by laying multiple copies of a shorter object (the length unit) end to end; understand that the length measurement of an object is the number of same-size length units that span it with no gaps or overlaps. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9ce596-d7cc-11e8-824f-0242ac160002 - 1629974909.2751 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.MD.B Tell and write time. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9e0b6c-d7cc-11e8-824f-0242ac160002 - 1629974909.2767 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.MD.B.3 Tell and write time in hours and half-hours using analog and digital clocks. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9deefa-d7cc-11e8-824f-0242ac160002 - 1629974909.2783 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.MD.C Represent and interpret data. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9eb642-d7cc-11e8-824f-0242ac160002 - 1605694949.5042 - 1629974909.2599 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.MD.C.4 Organize, represent, and interpret data with up to three categories; ask and answer questions about the total number of data points, how many in each category, and how many more or less are in one category than in another. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9e9f5d-d7cc-11e8-824f-0242ac160002 - 1629982949.5382 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - Geometry - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9b2b94-d7cc-11e8-824f-0242ac160002 - 1629982949.5432 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.G.A Reason with shapes and their attributes. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9bd535-d7cc-11e8-824f-0242ac160002 - 1629982949.5464 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.G.A.1 Distinguish between defining attributes (e.g., triangles are closed and three-sided) versus non-defining attributes (e.g., color, orientation, overall size); build and draw shapes to possess defining attributes. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9d1dd5-d7cc-11e8-824f-0242ac160002 - 1629982949.5554 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.G.A.2 Compose two-dimensional shapes (rectangles, squares, trapezoids, triangles, half-circles, and quarter-circles) or three-dimensional shapes (cubes, right rectangular prisms, right circular cones, and right circular cylinders) to create a composite shape, and compose new shapes from the composite shape. - - - - oat\taoNewMeridian\scripts\install\SetupItemBank - 6b9e0945-d7cc-11e8-824f-0242ac160002 - 1629982949.5583 - http://aadvanced-search-integration.playground.kitchen.it.taocloud.org/tao.rdf#i6127717cd690f185642792cf7650115c - 1.G.A.3 Partition circles and rectangles into two and four equal shares, describe the shares using the words halves, fourths, and quarters, and use the phrases half of, fourth of, and quarter of. Describe the whole as two of, or four of the shares. Understand for these examples that decomposing into more equal shares creates smaller shares. - - - diff --git a/views/cypress/plugins/downloads.js b/views/cypress/plugins/downloads.js deleted file mode 100644 index 9ebe05dd51..0000000000 --- a/views/cypress/plugins/downloads.js +++ /dev/null @@ -1,105 +0,0 @@ -const fs = require('fs'); - -/** - * Check download status of files array - * @param {Array} files - files array - * @return {boolean} true if any of files is still downloading - */ -const isDownloadInProggress = (files) => { - return files.some((file) => { - return file.includes('.crdownload'); - }) -}; - -/** - * Reads directory content - * @param {String} path - target directory path - * @return {Promise>} file names - */ -function readDir(path) { - return new Promise((resolve, reject) => { - fs.readdir(path, (err, files) => { - if (err) { - reject(err); - } else { - resolve(files); - } - }); - }); -} - -/** - * Removes file from the specified directory - * @param {String} path - target file path - * @return {Promise} - */ -function removeFile(path) { - return new Promise((resolve, reject) => { - fs.unlink(path, (err) => { - if (err) { - reject(err); - } else { - resolve(null); - } - }); - }); -} - -/** - * Reads file content - * @param {String} path - target file path - * @param {String} encoding - * @return {Promise} - */ -function readFile(path, encoding) { - return new Promise((resolve, reject) => { - fs.readFile(path, encoding,(err, data) => { - if (err) { - reject(err); - } else { - resolve(data); - } - }); - }); -} - -/** - * Tries to find files in the directory, returning only after at least one file is present - * @param {String} path - target directory - * @return {Promise>} found file names - */ -function getFiles(path) { - const timeout = 5000; - const delay = 100; - - const getFiles = resolve => { - if (fs.existsSync(path)) { - readDir(path).then( - files => { - if (files.length && !isDownloadInProggress(files)) { - resolve(files); - } else { - setTimeout(() => getFiles(resolve), delay); - } - } - ); - } else { - setTimeout(() => getFiles(resolve), delay); - } - }; - - return new Promise(resolve => { - setTimeout( - () => resolve(false), - timeout - ); - return getFiles(resolve); - }); -} - -module.exports = { - getFiles, - removeFile, - readFile, - readDir -} diff --git a/views/cypress/plugins/index.js b/views/cypress/plugins/index.js deleted file mode 100644 index 44c93139e8..0000000000 --- a/views/cypress/plugins/index.js +++ /dev/null @@ -1,32 +0,0 @@ -const extendConfig = require('@oat-sa/e2e-runner/plugins/extendConfig'); -const { downloadFile } = require('cypress-downloadfile/lib/addPlugin'); -const { getFiles, removeFile, readFile } = require('./downloads'); - -module.exports = (on, config) => { - on('task', { - downloadFile, - removeDownload(file) { - return removeFile(`${config.downloadsFolder}/${file}`); - }, - readDownload(file) { - return readFile(`${config.downloadsFolder}/${file}`, 'binary'); - }, - getDownloads() { - return getFiles(config.downloadsFolder); - } - }); - - // sets path for downloads - on('before:browser:launch', (browser = {}, launchOptions) => { - const downloadDirectory = config.downloadsFolder; - - if (browser.family === 'chromium' && browser.name !== 'electron') { - launchOptions.preferences.default['download'] = { - default_directory: downloadDirectory - }; - } - return launchOptions; - }); - - return extendConfig(config); -} diff --git a/views/cypress/support/CKEditor.js b/views/cypress/support/CKEditor.js deleted file mode 100644 index 07f506cb78..0000000000 --- a/views/cypress/support/CKEditor.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -/** - * Command for programatically typing in a CKEditor - * @param {propertyName} string - The name of the property to type in - * @param {content} string - The content to type - */ -Cypress.Commands.add("typeInCKEditor", (propertyName, content) => { - cy.window() - .then(win => { - const propertyUri = Cypress.$('[data-testid="' + propertyName + '"]').attr('id'); - win.CKEDITOR.instances[propertyUri].setData(content); - }); -}); diff --git a/views/cypress/support/commands.js b/views/cypress/support/commands.js deleted file mode 100644 index 23db8294b4..0000000000 --- a/views/cypress/support/commands.js +++ /dev/null @@ -1,143 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -require('cypress-downloadfile/lib/downloadFileCommand'); -import '@oat-sa/e2e-runner/support/fileupload'; -import '@oat-sa/e2e-runner/support/auth'; -import '@oat-sa/e2e-runner/support/lti.js'; -import './resourceTree'; -import './userManagement'; -import './manageSchema'; -import './resourceProperties'; -import './CKEditor'; -import urls from '../utils/urls'; - -/** - * Sends login request using the format of the TAO login form - * @param {String} username - * @param {String} password - */ -Cypress.Commands.add('loginAsUser', (username, password) => { - cy.login({ url: urls.login, username, password }); -}); - -/** - * Sends login request with the credentials defined via cypress variables 'adminUser' and 'adminPass' - */ -Cypress.Commands.add('loginAsAdmin', () => { - const username = Cypress.env('adminUser'); - const password = Cypress.env('adminPass'); - - cy.loginAsUser(username, password); -}); - -/** - * Logs out using the UI - */ -Cypress.Commands.add('logoutAttempt', () => { - cy.get('#logout').click(); -}); - -/** - * Creates a UI login attempt with provided data - * @param {String} username - * @param {String} password - */ -Cypress.Commands.add('loginAttempt', (username, password) => { - cy.intercept('POST', '**/login*').as('login'); - cy.get('#login', { timeout: 10000 }).type(username); - cy.get('#password').type(password); - cy.get('#connect').click(); - cy.wait('@login'); -}); - -/** - * Recursively gets an element, returning only after it's determined to be attached to the DOM for good - * @param {String} selector - css selector of the element - * @param {Object} opts - * @param {String} opts.retries - * @param {String} opts.delay - * @return {JQuery} - */ -Cypress.Commands.add('getSettled', (selector, opts = {}) => { - const retries = opts.retries || 3; - const delay = opts.delay || 500; - - const isAttached = (resolve, count = 0) => { - const el = Cypress.$(selector); - - // is element attached to the DOM? - count = Cypress.dom.isAttached(el) ? count + 1 : 0; - - // hit our base case, return the element - if (count >= retries) { - return resolve(el); - } - - // retry after a bit of a delay - setTimeout(() => isAttached(resolve, count), delay); - }; - - // wrap, so we can chain cypress commands off the result - return cy.wrap(null).then(() => { - return new Cypress.Promise((resolve) => { - return isAttached(resolve, 0); - }).then((el) => { - return cy.wrap(el); - }); - }); -}); - -/** - * Tries to find an element, returning only after it's present on the page or after timeout - * @param {String} selector - css selector of the element - * @param {Object} opts - * @param {String} opts.timeout - * @param {String} opts.delay - * @return {Boolean} - */ -Cypress.Commands.add('isElementPresent', (selector, opts = {}) => { - const timeout = opts.timeout || 10000; - const delay = opts.delay || 500; - - const isPresent = (resolve) => { - const $el = Cypress.$(selector); - if ($el.length) { - resolve(true); - } else { - setTimeout(() => isPresent(resolve), delay); - } - }; - - return new Cypress.Promise(resolve => { - setTimeout( - () => resolve(false), - timeout - ); - return isPresent(resolve); - }); -}); - -/** - * Preserve session cookies to stay logged in to TAO during tests - */ -Cypress.Cookies.defaults({ - preserve: (cookie) => { - return cookie.name.startsWith('tao_'); - } -}); diff --git a/views/cypress/support/drag-and-drop.js b/views/cypress/support/drag-and-drop.js deleted file mode 100644 index 39fa4b5e56..0000000000 --- a/views/cypress/support/drag-and-drop.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -/** - * Drag one element and drop it onto another, with mouse - * Implementation is specific to 'jquery ui drag drop' library. - * @param {String} dragSelector - element to drag selector - * @param {String} dropSelector - element to drop to selector - * @param {Array} targetsSelector - array of selectors for tagrets inside drop elements - */ -Cypress.Commands.add('dragAndDrop', (dragSelector, dropSelector, targetsSelector) => { - cy.get(dragSelector) - .should('exist') - .get(dropSelector) - .should('exist'); - - function getElementCenterCoords($el) { - const rect = $el[0].getBoundingClientRect(); - const x = Math.round(rect.left + rect.width / 2); - const y = Math.round(rect.top + rect.height / 2); - return { x, y }; - } - function getElementTopCenterCoords($el) { - const rect = $el[0].getBoundingClientRect(); - const x = Math.round(rect.left + rect.width / 2); - const y = rect.top + Math.min(rect.height / 2, 20); - return { x, y }; - } - cy.get(dragSelector).then($draggable => { - // Pick up this - cy.get(dropSelector).then($droppable => { - const { x: startX, y: startY } = getElementCenterCoords($draggable); - const { x: x1, y: y1 } = getElementTopCenterCoords($droppable); - - cy.wrap($draggable) - .trigger('mouseover', { force: true }) - .trigger('mousedown', { - which: 1, - pageX: startX, - pageY: startY - }) - .trigger('mousemove', { - which: 1, - pageX: x1, - pageY: y1, - force: true - }); - - cy.wrap($droppable) - .trigger('mouseover', { force: true }) - .trigger('mousemove', { - which: 1, - pageX: x1, - pageY: y1, - force: true - }); - - if (targetsSelector) { - targetsSelector.forEach(targetSelector => { - cy.get(targetSelector).then($target => { - const { x: x2,y: y2 } = getElementCenterCoords($target.first()); - let target = $target.first()[0]; - cy.wrap($draggable).trigger('mousemove', { - which: 1, - pageX: x2, - pageY: y2, - force: true, - target - }); - cy.wrap($droppable).trigger('mousemove', { - which: 1, - pageX: x2, - pageY: y2, - force: true, - target - }); - cy.wrap($target.first()).trigger('mousemove', { - which: 1, - pageX: x2, - pageY: y2, - force: true, - target - }); - }); - }); - } - - cy.wrap($draggable).trigger('mouseup', { force: true }); - cy.document().trigger('mouseup', { force: true }); - }); // Drop over this - }); -}); diff --git a/views/cypress/support/file-upload.js b/views/cypress/support/file-upload.js deleted file mode 100644 index 629b86372f..0000000000 --- a/views/cypress/support/file-upload.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -import '@oat-sa/e2e-runner/support/fileupload'; - -/** - * Upload file to input - * @param {String} importSelector - selector for input type="file" - * @param {String} importFilePath - parh to file - */ -Cypress.Commands.add('fileUpload', (importSelector, importFilePath) => { - cy.log('COMMAND: fileUpload', importSelector, importFilePath); - - cy.readFile(importFilePath, 'binary').then(fileContent => { - cy.get(importSelector).attachFile({ - fileContent, - filePath: importFilePath, - encoding: 'binary', - lastModified: new Date().getTime() - }); - }); -}); diff --git a/views/cypress/support/genericUIInteractions.js b/views/cypress/support/genericUIInteractions.js deleted file mode 100644 index b7f07e9aba..0000000000 --- a/views/cypress/support/genericUIInteractions.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Get popup instance, find a button with property of dataControl attribute and click on it - * @param {String('ok'|'cancel'|'close')} dataControl - button to click, see data-control attributes in modal dialog - */ -const interactWithModal = (dataControl) => { - cy.getSettled('[data-control="navigable-modal-body"]') - .find(`button[data-control="${dataControl}"]`) - .should('be.visible') - .click(); -} - -/** - * Close modal window with confirm - */ -Cypress.Commands.add('modalConfirm', () => { - cy.log('COMMAND: modalConfirm'); - interactWithModal('ok'); -}); diff --git a/views/cypress/support/index.js b/views/cypress/support/index.js deleted file mode 100644 index 1e22dc0f05..0000000000 --- a/views/cypress/support/index.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Local project commands -import './commands'; -import './resourceTree'; -import './file-upload'; -import './userManagement'; -import './drag-and-drop'; -import './genericUIInteractions'; -import './search'; -import './selection'; -import './manageList'; diff --git a/views/cypress/support/manageList.js b/views/cypress/support/manageList.js deleted file mode 100644 index 6248949c58..0000000000 --- a/views/cypress/support/manageList.js +++ /dev/null @@ -1,86 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2022 (original work) Open Assessment Technologies SA ; - */ - -import selectorsList from '../utils/selectors/list'; -import urls from '../utils/urls'; - -/** - * Save list by URI or Last - * using a pattern for list name for easy cleanup - * @param {String} [null] uri - uri number of the list to Save otherwise will be saved the last - * @returns {Function} cy.wait - response for add request - */ -Cypress.Commands.add('createList', ( -) => { - cy.log('COMMAND: createList'); - cy.intercept('POST', urls.list.index).as('createList'); - cy.getSettled(selectorsList.createListButton) - .should('have.text', ' Create list') - .should('be.visible') - .click(); - - return cy.wait('@createList'); -}); - -/** - * Save list by URI or Last - * using a pattern for list name for easy cleanup - * @param {String} [null] uri - uri number of the list to Save otherwise will be saved the last - * @returns {Function} cy.wait - response for save request - */ -Cypress.Commands.add('saveList', ( - fileName = 'E2E Default list', - uri = null -) => { - let targetSelector = uri ? (`[id$="${uri}"]`) : selectorsList.listLast; - - cy.getSettled(targetSelector) - .find(selectorsList.listNameInput) - .clear() - .type(fileName); - - cy.intercept('POST', urls.list.save).as('saveList'); - cy.getSettled(targetSelector) - .find(selectorsList.saveElementButton) - .should('be.visible') - .click(); - - return cy.wait('@saveList'); -}); - -/** - * Delete list by URI or Last - * @param {String} [null] uri - uri number of the list to Delete otherwise will be deleted the last - * @returns {Function} cy.wait - response for delete list request - */ -Cypress.Commands.add('deleteList', ( - uri = null -) => { - let targetSelector = uri ? (`[id$="${uri}"]`) : selectorsList.listLast; - - cy.log(`Deleting list: ${targetSelector}`); - - cy.getSettled(targetSelector) - .find(selectorsList.listDeleteButton) - .scrollIntoView() - .should('be.visible') - .click(); - cy.intercept('POST', '**/taoBackOffice/Lists/removeList').as('removeList'); - cy.modalConfirm(); - cy.wait('@removeList'); -}); \ No newline at end of file diff --git a/views/cypress/support/manageSchema.js b/views/cypress/support/manageSchema.js deleted file mode 100644 index 3384ad0320..0000000000 --- a/views/cypress/support/manageSchema.js +++ /dev/null @@ -1,174 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2022 (original work) Open Assessment Technologies SA ; - */ - -const propertiesWithListValues = [ - 'list', - 'multiplenodetree', - 'longlist', - 'multilist', - 'multisearchlist', - 'singlesearchlist' -]; - -/** - * Adds new property to class (list with single selection of boolean values) - * @param {Object} options - Configuration object containing all target variables - * @param {String} options.className - * @param {String} options.manageSchemaSelector - css selector for the edit class button - * @param {String} options.classOptions - css selector for the class options form - * @param {String} options.propertyName - * @param {String} options.propertyAlias - * @param {String} options.propertyEditSelector - css selector for the property edition form - * @param {String} options.editUrl - url for the editing class POST request - * @returns {Function} cy.wait - response for edit request - */ -Cypress.Commands.add('addPropertyToClass', (options) => { - options.propertyType = options.propertyType || 'list'; - options.propertyListValue = options.propertyListValue || 'Boolean'; - - cy.log('COMMAND: addPropertyToClass', options.propertyName); - cy.intercept('POST', '**/addClassProperty').as('addProperty'); - - cy.getSettled(`li [title ="${options.className}"]`) - .last() - .click(); - cy.getSettled(options.manageSchemaSelector).click(); - cy.getSettled(options.classOptions) - .find('a[class="btn-info property-adder small"]') - .click(); - cy.wait('@addProperty'); - - cy.getSettled('span[class="icon-edit"]') - .last() - .click(); - cy.get(options.propertyEditSelector) - .find('input[data-testid="Label"]') - .clear() - .type(options.propertyName); - - if (options.propertyAlias) { - cy.get(options.propertyEditSelector) - .find('input[data-testid="Alias"]') - .clear() - .type(options.propertyAlias); - } - - cy.get(options.propertyEditSelector) - .find('select[class="property-type property"]') - .select(options.propertyType); - - if (propertiesWithListValues.includes(options.propertyType)) { - cy.get(options.propertyEditSelector) - .find('select[class="property-listvalues property"]') - .select(options.propertyListValue); - } - - cy.intercept('POST', `**/${options.editUrl}`).as('editClass'); - cy.get('button[type="submit"]').click(); - - return cy.wait('@editClass'); -}); - -/** - * Validates a property in a class - * @param {Object} options - Configuration object containing all target variables - * @param {String} options.className - name of the class - * @param {String} options.classOptions - css selector for the class options form - * @param {Object} property - property to validate - * @param {String} property.name - name of the property - * @param {String} property.type - type of the property - * @param {String} property.listValue - list value of the property - * @param {String} property.label - label of the property - */ -Cypress.Commands.add('validateClassProperty', (options, property) => { - cy.log('COMMAND: validateClassProperty', property.name); - - cy.getSettled(options.classOptions) - .contains('.property-heading-label', property.name) - .siblings('.property-heading-toolbar') - .contains(options.className) - .within(() => { - cy.get('.icon-edit').click(); - }); - cy.getSettled('.property-edit-container-open [data-testid="Label"]').should( - 'have.value', - property.name - ); - cy.getSettled('.property-edit-container-open [data-testid="Type"]').should( - 'have.value', - property.type - ); - - if (property.listValue) { - cy.getSettled( - '.property-edit-container-open [data-testid="List values"]' - ).should('have.value', property.listValue); - } - - if (property.label) { - cy.getSettled('.property-edit-container-open [data-testid="List values"]') - .contains(property.label) - .should('have.length', 1); - } - - cy.getSettled('.property-edit-container-open .icon-edit').click(); -}); - -/* - * Find an input in manage schema - * @param {Object} options - configuration object containing all target variables - * @param {String} options.input - input selector - * @param {String} options.position - position of the tinput in the form - * @param {String} options.type - type of the input - * @param {String} options.editClassSelector - url for wait on submit - * @param {String} options.propertyEdit - selector of property - * @param {String} options.newValue - new value to asign to that input - */ -Cypress.Commands.add('findInputInManageSchema', (options) => { - cy.log('COMMAND: findInputInManageSchema', options.input); - - cy.getSettled('span[class="icon-edit"]') - .last() - .click(); - - switch (options.type) { - case 'checkbox': - cy.get(options.propertyEdit) - .find(options.input) - .first() - .check({ force: true }); - break; - case 'radio': - cy.get(options.propertyEdit) - .find(options.input) - .eq(options.position) - .check({ force: true }); - break; - case 'text': - cy.get(options.propertyEdit) - .find(options.input) - .eq(options.position) - .clear({ force: true }) - .type(options.newValue); - break; - } - - cy.intercept('POST', `**/${options.editClassSelector}`).as('editClass'); - cy.get('button[type="submit"]').click(); - cy.wait('@editClass'); -}); diff --git a/views/cypress/support/resourceProperties.js b/views/cypress/support/resourceProperties.js deleted file mode 100644 index 1620285f8c..0000000000 --- a/views/cypress/support/resourceProperties.js +++ /dev/null @@ -1,201 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - - import selectors from '../utils/selectors'; - -/** - * Renames class to the given name (class should already be selected before running this command) - * @param {String} formSelector - css selector for the class edition form - * @param {String} newName - */ - Cypress.Commands.add('renameSelectedClass', (formSelector, newName) => { - cy.log('COMMAND: renameSelectedClass', newName) - .intercept('POST', '**/editClassLabel*').as('editClassLabel') - .intercept('POST', '**/getOntologyData*').as('treeRender') - .getSettled(`${formSelector} ${selectors.labelSelector}`) - .clear() - .type(newName) - .click() - .getSettled('button[id="Save"]') - .click() - .wait('@editClassLabel') - .get('#feedback-1, #feedback-2').should('not.exist') - .get(formSelector).should('exist') - .get(`${formSelector} ${selectors.labelSelector}`).should('have.value', newName) - .wait('@treeRender') - .wait('@editClassLabel') - .getSettled(`li[title="${newName}"]`); -}); - -/** - * Renames node to the given name (node should already be selected before running this command) - * @param {String} formSelector - css selector for the class edition form - * @param {String} editUrl - url for the editing node POST request - * @param {String} newName - */ -Cypress.Commands.add('renameSelectedNode', (formSelector, editUrl, newName) => { - cy.log('COMMAND: renameSelectedNode', newName) - .intercept('POST', `**${editUrl}`).as('edit') - .intercept('GET', `**/getOntologyData**`).as('treeRender') - .get(`${formSelector} ${selectors.labelSelector}`) - .clear() - .type(newName) - .get('button[id="Save"]') - .click() - .wait('@edit') - .get('#feedback-1, #feedback-2').should('not.exist') - .get(formSelector).should('exist') - .wait('@treeRender') - .wait('@edit') - .get(`${formSelector} ${selectors.labelSelector}`).should('have.value', newName) - .getSettled(`li[title="${newName}"]`); -}); - -/** - * Assigns value to the item property (works for the list with single selection of boolean values) - * @param {String} nodeName - * @param {String} nodePropertiesForm - css selector for the node properties edition form - * @param {String} selectOption - css selector for the option to select - * @param {String} treeRenderUrl - url for resource tree data GET request - */ - Cypress.Commands.add('assignValueToProperty', ( - nodeName, - nodePropertiesForm, - selectOption, - treeRenderUrl, - editUrl) => { - - cy.log('COMMAND: assignValueToProperty', nodeName, nodePropertiesForm); - cy.intercept('POST', `**${editUrl}`).as('edit') - cy.getSettled(`li [title ="${nodeName}"] a`).last().click(); - cy.wait('@edit'); - cy.getSettled(nodePropertiesForm).find(selectOption).check(); - cy.intercept('GET', `**/${treeRenderUrl}/getOntologyData**`).as('treeRender') - cy.getSettled('button[type="submit"]').click(); - cy.wait('@treeRender'); -}); - -/** - * Assigns value to the CKEditor property - * @param {Object} property - property to assign value to - * @param {String} property.name - name of the property - * @param {String} value - value to assign - */ -Cypress.Commands.add('assignValueToCKEditor', (property, value) => { - cy.log('COMMAND: assignValueToCKEditor', property.name); - cy.get(`[data-testid="${property.name}"]`); - cy.typeInCKEditor(property.name, value); -}); - -/** - * Assigns value to the Select2 property - * It differentiates between single and multiple select based on if the value parameter is an array or not - * @param {Object} property - property to assign value to - * @param {String} property.name - name of the property - * @param {String} value - value to assign - */ -Cypress.Commands.add('assignValueToSelect2Property', (property, value) => { - cy.log('COMMAND: assignValueToSelect2Property', property.name); - cy.get(`[data-testid="${property.name}"]`); - - // Multiple choice search input - if (Array.isArray(value)) { - value.forEach((val) => { - cy.get(`[data-testid="${property.name}"]`).click(); - cy.get(`[data-testid="${property.name}"] input.select2-input`).type(' ', {force: true}); - cy.contains('.select2-results .select2-result', val).click(); - }); - } - // Single choice search input - else { - cy.get(`[data-testid="${property.name}"]`).click(); - cy.get('.select2-search input').type(value); - cy.contains('.select2-results .select2-match', value).click(); - } -}); - -/** - * Assigns value to the text property - * @param {Object} property - property to assign value to - * @param {String} property.name - name of the property - * @param {String} value - value to assign -*/ -Cypress.Commands.add('assignValueToTextProperty', (property, value) => { - cy.log('COMMAND: assignValueToTextProperty', property.name); - cy.get(`[data-testid="${property.name}"]`).clear().type(value); -}); - -/** - * Assigns value to the calendar property - * @param {Object} property - property to assign value to - * @param {String} property.name - name of the property - * @param {String} value - value to assign -*/ -Cypress.Commands.add('assignValueToCalendarProperty', (property, value) => { - cy.log('COMMAND: assignValueToCalendarProperty', property.name); - cy.get(`[id^="${property.name}_calendar_"]`).clear().type(value); -}); - -/** - * Assigns value to the checkbox/radio property - * @param {Object} property - property to assign value to - * @param {String} property.name - name of the property - * @param {String} value - value to assign -*/ -Cypress.Commands.add('assignValueToCheckProperty', (property, value) => { - cy.log('COMMAND: assignValueToCheckProperty', property.name); - cy.get(`[data-testid*="${property.name}"]`).check(value); -}); - -/** - * Assigns value to the select property - * @param {Object} property - property to assign value to - * @param {String} property.name - name of the property - * @param {String} value - value to assign -*/ -Cypress.Commands.add('assignValueToSelectProperty', (property, value) => { - cy.log('COMMAND: assignValueToSelectProperty', property.name); - cy.get(`[data-testid="${property.name}"]`).select(value); -}); - -/** - * Removes a property from a class - * @param {Object} options - Contains set of options for executing command - * @param {String} options.nodeName - Node where target class exists - * @param {String} options.className - Target class to remove property from - * @param {String} options.propertyName - Property to remove - * @param {String} options.nodePropertiesForm - css selector for the node properties edition form - * @param {String} options.manageSchemaSelector - css selector for the manage schema button - * @param {String} options.classOptions - css selector for the class options form - * @param {String} options.editUrl - endpoint related to the load of the edit form - */ -Cypress.Commands.add('removePropertyFromClass', (options) => { - cy.log('COMMAND: removePropertyFromClass', options.nodeName, options.propertyName); - cy.intercept('POST', `**/${ options.editUrl }`).as('edit'); - cy.intercept('POST', '**/removeClassProperty').as('removeClassProperty'); - cy.selectNode(options.nodeName, options.nodePropertiesForm, options.className); - cy.getSettled(options.manageSchemaSelector).click(); - cy.wait('@edit'); - cy.getSettled(options.classOptions) - .contains('.property-block', options.propertyName) - .within(() => { - cy.get('.property-deleter').click(); - }); - cy.on('window:confirm', () => true); - cy.wait('@removeClassProperty').its('response.body').its('success').should('eq', true); -}); diff --git a/views/cypress/support/resourceTree.js b/views/cypress/support/resourceTree.js deleted file mode 100644 index dcfc12c2e8..0000000000 --- a/views/cypress/support/resourceTree.js +++ /dev/null @@ -1,462 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -/** - * Run the setup of the platform - * @param {String} treeRenderUrl - url for resource tree data GET request - * @param {String} editClassLabelUrl - url for resource edit class data POST request - * @param {String} urlsItems - url to visit related to the part of TAO we want to move - * @param {String} rootSelector - root selector of the part of TAO we are - */ -Cypress.Commands.add('setup', ( - treeRenderUrl, - editClassLabelUrl, - urlVisit, - rootSelector -) => { - cy.log('COMMAND: setup') - .loginAsAdmin() - .intercept('GET', `**/${ treeRenderUrl }/getOntologyData**`).as('treeRender') - .intercept('POST', `**/${ editClassLabelUrl }`).as('editClassLabel') - .visit(urlVisit) - .wait('@treeRender') - .getSettled(`${ rootSelector } a`) - .first() - .click() - .wait('@editClassLabel'); -}); - -/** - * Run the setup in page files of the platform - * @param {String} urlVisit - url to visit related to the part of TAO we want to move - */ -Cypress.Commands.add('setupPage', ( - urlVisit -) => { - cy.log('COMMAND: setupPage') - .loginAsAdmin() - .intercept('POST', '**/edit*').as('edit') - .visit(urlVisit) - .wait('@edit'); -}); - -/** - * Creates new resource subclass - * @param {String} formSelector - css selector for the class edition form - * @param {String} treeRenderUrl - url for resource tree data GET request - * @param {String} addSubClassUrl - url for adding subclass POST request - */ -Cypress.Commands.add('addClass', ( - formSelector, - treeRenderUrl, - addSubClassUrl -) => { - cy.log('COMMAND: addClass') - .intercept('GET', `**/${treeRenderUrl}/getOntologyData**`).as('treeRender') - .intercept('POST', `**/${addSubClassUrl}`).as('addSubClass') - .get('[data-context=resource][data-action=subClass]') - .click() - .wait('@addSubClass') - .wait('@treeRender') - .wait('@editClassLabel') - .get(formSelector).should('exist'); -}); - -/** - * Creates new resource class in the tree root - * @param {String} formSelector - css selector for the class edition form - * @param {String} rootSelector - css selector for the tree root element - * @param {String} name - new class name - * @param {String} editClassLabelUrl - url for editing subclass POST request - * @param {String} treeRenderUrl - url for the resource tree data GET request - * @param {String} addSubClassUrl - url for the adding subclass POST request - */ -Cypress.Commands.add('addClassToRoot', ( - rootSelector, - formSelector, - name, - editClassLabelUrl, - treeRenderUrl, - addSubClassUrl -) => { - cy.log('COMMAND: addClassToRoot', name) - .getSettled(`${rootSelector} a:nth(0)`) - .scrollIntoView() - .click() - .intercept('POST', `**/${editClassLabelUrl}`).as('editClassLabel') - .addClass(formSelector, treeRenderUrl, addSubClassUrl) - .renameSelectedClass(formSelector, name); -}); - -/** - * Moves class to another place - * @param {String} moveSelector - css selector for the move button - * @param {String} moveConfirmSelector - css selector for the element to confirm action - * @param {String} name - name of the class which will be moved - * @param {String} nameWhereMove - name of the class to move to - * @param {String} resourceGetAllUrl - url for the rest resource GET request - */ -Cypress.Commands.add('moveClass', ( - moveSelector, - moveConfirmSelector, - name, - nameWhereMove, - resourceGetAllUrl, - moveClassUrl = 'moveClass' -) => { - cy.log('COMMAND: moveClass', name) - .getSettled(`li[title="${name}"] a:nth(0)`) - .click() - .wait('@editClassLabel') - .intercept('GET', `**/${resourceGetAllUrl}**`).as('classToMove') - .get('#feedback-2, #feedback-1').should('not.exist') - .getSettled(moveSelector) - .click() - .wait('@classToMove') - .getSettled(`.destination-selector a[title="${nameWhereMove}"]`).last() - .click({force: true}) - .intercept('POST', `**/${moveClassUrl}*`).as('moveClass') - .intercept('GET', '**/getOntologyData*').as('treeRenderAfterMove') - .get('.actions button') - .click() - .get(moveConfirmSelector) - .click() - .wait('@moveClass').its('response.body').its('success').should('eq', true) - .wait('@treeRenderAfterMove') - .getSettled(`.section-trees li[title="${name}"]`); -}); - -/** - * Moves class to the tree root - * @param {String} rootSelector - css selector for the tree root element - * @param {String} moveSelector - css selector for the move button - * @param {String} moveConfirmSelector - css selector for the element to confirm action - * @param {String} name - name of the class which will be moved - * @param {String} nameWhereMove - name of the class to move to - * @param {String} resourceGetAllUrl - url for the rest resource GET request - */ -Cypress.Commands.add('moveClassFromRoot', ( - rootSelector, - moveSelector, - moveConfirmSelector, - name, - nameWhereMove, - resourceGetAllUrl, - moveClassUrl = 'moveClass' -) => { - cy.log('COMMAND: moveClassFromRoot', name) - .get('#feedback-1, #feedback-2').should('not.exist') - .getSettled(`${rootSelector} a:nth(0)`) - .click() - .get(`${rootSelector} li[title="${name}"] a`) - .moveClass(moveSelector, moveConfirmSelector, name, nameWhereMove, resourceGetAllUrl, moveClassUrl) -}); - -/** - * Deletes class - * @param {String} rootSelector - css selector for the tree root element - * @param {String} formSelector - css selector for the class edition form - * @param {String} deleteSelector - css selector for the delete button - * @param {String} confirmSelector - css selector for the element to confirm action - * @param {String} deleteClassUrl - url for the deleting class POST request - * @param {String} name - name of the class which will be deleted - * @param {Boolean} isConfirmCheckbox = false - if true also checks confirmation checkbox - * @param {Boolean} isAsset = false - if true handles confirmation checkbox differently (works different for asset) - */ -Cypress.Commands.add('deleteClass', ( - rootSelector, - formSelector, - deleteSelector, - confirmSelector, - deleteClassUrl, - name, - isConfirmCheckbox = false, - isAsset = false -) => { - cy.log('COMMAND: deleteClass', name) - .getSettled(`li[title="${name}"] > a`).last().click() - .getSettled(`${formSelector} input[value="${name}"]`) - .should('exist') - cy.get(deleteSelector).click(); - - if (isConfirmCheckbox) { - if(isAsset){ - cy.get('button[data-control="ok"]') - .click(); - } else { - cy.get('.modal-body label[for=confirm]') - .click(); - } - } - cy.intercept('POST', `**/${deleteClassUrl}`).as('deleteClass') - cy.intercept('POST', '**/edit*').as('edit') - if (!isAsset) { - cy.get(confirmSelector) - .click(); - cy.wait('@deleteClass'); - } - cy.wait('@edit'); -}); - -/** - * Deletes class from the tree root - * @param {String} rootSelector - css selector for the tree root element - * @param {String} formSelector - css selector for the class edition form - * @param {String} deleteSelector - css selector for the delete button - * @param {String} confirmSelector - css selector for the element to confirm action - * @param {String} deleteClassUrl - url for the deleting class POST request - * @param {String} name - name of the class which will be deleted - * @param {Boolean} isConfirmCheckbox = false - if true also checks confirmation checkbox - * @param {Boolean} isAsset = false - if true handles confirmation checkbox differently (works different for asset) - */ -Cypress.Commands.add('deleteClassFromRoot', ( - rootSelector, - formSelector, - deleteSelector, - confirmSelector, - name, - deleteClassUrl, - isConfirmCheckbox, - isAsset -) => { - - cy.log('COMMAND: deleteClassFromRoot', name) - .intercept('POST', '**/edit*').as('edit') - .getSettled(`${rootSelector} > a`) - .scrollIntoView() - .click() - .get(`li[title="${name}"] > a`) - .wait('@edit') - .deleteClass(rootSelector, formSelector, deleteSelector, confirmSelector, deleteClassUrl, name, isConfirmCheckbox, isAsset) -}); - -/** - * Creates new resource node - * @param {String} formSelector - css selector for the class edition form - * @param {String} addSelector - css selector for the adding class button - */ -Cypress.Commands.add('addNode', (formSelector, addSelector) => { - cy.log('COMMAND: addNode'); - cy.intercept('GET', `**/getOntologyData**`).as('treeRender'); - cy.intercept('POST', '**/edit*').as('edit'); - cy.getSettled(addSelector).scrollIntoView().click(); - cy.get(formSelector).should('exist'); - cy.wait('@treeRender'); - cy.wait('@edit'); -}); - -/** - * Selects resource node with the given name (opens subtree associated with this node) - * @param {String} rootSelector - css selector for the tree root element - * @param {String} formSelector - css selector for the class edition form - * @param {String} name - name of the node which will be selected - */ -Cypress.Commands.add('selectNode', (rootSelector, formSelector, name) => { - cy.log('COMMAND: selectNode', name); - cy.getSettled(`${rootSelector} a:nth(0)`).click(); - cy.get(`li[title="${name}"] a:nth(0)`).scrollIntoView().click(); - cy.get(formSelector).should('exist'); -}); - -/** - * Deletes resource node with the given name - * @param {String} rootSelector - css selector for the tree root element - * @param {String} deleteSelector - css selector for the delete button - * @param {String} editUrl - url for the editing node POST request - * @param {String} name - name of the node which will be deleted - */ -Cypress.Commands.add('deleteNode', ( - rootSelector, - deleteSelector, - editUrl, - name, -) => { - cy.log('COMMAND: deleteNode', name) - .intercept('POST', `**/${editUrl}`).as('editUrl') - .getSettled(`${rootSelector} a`) - .contains('a', name).click() - .wait('@editUrl') - .getSettled(deleteSelector).click() - .getSettled('[data-control="ok"]').click() - .getSettled(`${rootSelector} a`) - .contains('a', name).should('not.exist'); -}); - -/** - * Deletes downloaded files if any - */ -Cypress.Commands.add('clearDownloads', () => { - cy.log('COMMAND: clearDownloads') - - return cy.task('getDownloads') - .then(files => { - // Skip if nothing to delete - if(!files) { - cy.log('Nothing to delete in downloads'); - return null; - } - - return Promise.all(files.map((file) => { - cy.log('Deleting', file); - cy.task('removeDownload', file); - })); - }); -}); - -/** - * Imports resource in class (class should already be selected before running this command) - * @param {String} importSelector - css selector for the import button - * @param {String} importFilePath - path to the file to import - * @param {String} importUrl - url for the resource import POST request - * @param {String} className - * @param {String} [format] - select format to import, if diffident than selected by default - */ -Cypress.Commands.add('importToSelectedClass', ( - importSelector, - importFilePath, - importUrl, - className, - format = null) => { - - cy.log('COMMAND: import', importUrl); - cy.get(importSelector).click(); - - if (format) { - cy.intercept('POST', `**/${importUrl}**`).as('itemImport'); - cy.get('#import .form_radlst label') - .contains(format) - .should('be.visible') - .click(); - cy.wait('@itemImport'); - } - - cy.readFile(importFilePath, 'binary') - .then(fileContent => { - cy.getSettled('input[type="file"][name="content"]') - .attachFile({ - fileContent, - filePath: importFilePath, - encoding: 'binary', - lastModified: new Date().getTime() - } - ); - - cy.getSettled('.progressbar.success').should('exist'); - - cy.intercept('POST', `**/${importUrl}**`).as('import').getSettled('.form-toolbar button') - .click() - .wait('@import'); - - return cy.isElementPresent('.task-report-container') - .then(isTaskStatus => { - if (isTaskStatus) { - cy.get('.feedback-success.hierarchical') - .should('exist') - .find('button[data-trigger="continue"]') - .click(); - } else { - // task was moved to the task queue (background) - cy.get('.badge-component').click(); - cy.get('.task-element.completed').first().contains(className); - // close the task manager - cy.get('.badge-component').click(); - } - }) - }); -}); - -/** - * Exports resource in class (class should already be selected before running this command) - * @param {String} exportSelector - css selector for the export button - * @param {String} exportUrl - url for the resource export POST request - * @param {String} className - * @param {String} [format] - select format to export, if diffident than selected by default - */ -Cypress.Commands.add('exportFromSelectedClass', ( - exportSelector, - exportUrl, - className, - format = null) => { - - cy.log('COMMAND: export', exportUrl); - - cy.get(exportSelector).click(); - cy.get('#exportChooser .form-toolbar button').click(); - - if (format) { - cy.intercept('POST', `**/${exportUrl}**`).as('exportImport'); - cy.get('#exportChooser .form_radlst label').contains(format).click(); - cy.wait('@exportImport'); - } - - cy.task('getDownloads') - .then(files => { - expect(files.length).to.be.gt(0); - cy.task('readDownload', files[0]) - .then(fileContent => { - expect(files[0]).to.contain(className.replaceAll(' ', '_').toLowerCase()); - cy.wrap(fileContent.length).should('be.gt', 0); - - // remove file as cypress doesn't remove downloads in the open mode - cy.task('removeDownload', files[0]); - }); - } - ); -}); - - -/** - * Import tree to tree root - * @param {String} filePath - path to RDF tree file - */ - Cypress.Commands.add('importToRootTree', (filePath) => { - cy.intercept('POST', `**/tao/Import/index*`).as('loadImport'); - cy.getSettled('#tree-import a').click(); - cy.wait('@loadImport'); - - cy.readFile(filePath, 'binary') - .then(fileContent => { - cy.get('input[type="file"][name="content"]') - .attachFile({ - fileContent, - filePath, - encoding: 'binary', - lastModified: new Date().getTime() - } - ); - - cy.get('.progressbar.success').should('exist'); - - cy.intercept('POST', `**/tao/Import/index`).as('import').get('.form-toolbar button') - .click() - .wait('@import') - - return cy.isElementPresent('.task-report-container') - .then(isTaskStatus => { - if (isTaskStatus) { - cy.get('.feedback-success.hierarchical').should('exist'); - } else { - // task was moved to the task queue (background) - cy.get('.badge-component').should('be.visible').click(); - cy.get('.task-element.completed').first().contains(className); - // close the task manager - cy.get('.badge-component').click(); - } - }) - }); -}); diff --git a/views/cypress/support/search.js b/views/cypress/support/search.js deleted file mode 100644 index 0b3f3b77cd..0000000000 --- a/views/cypress/support/search.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2022 (original work) Open Assessment Technologies SA ; - */ - -/** - * Enter searchString in to search input click search and wait for response - * @param {Object} settings - * @param {String} settings.search - string to search for - * @param {String} settings.method - method for search result request - * @param {String} settings.path - path to search result request - * @returns {Function} cy.wait - response for search request - */ -Cypress.Commands.add('searchFor', (settings) => { - const defaultSettings = { - search: ' ', - method: 'GET', - path: '**/tao/Search/search*' - }; - settings = Object.assign(defaultSettings, settings); - - cy.log('COMMAND: searchFor', settings.search); - cy.intercept(settings.method, settings.path).as('searchFor'); - cy.getSettled('input[name=query]') - .should('be.visible') - .clear() - .type(settings.search); - cy.getSettled('button.icon-find') - .should('be.visible') - .click(); - - return cy.wait('@searchFor'); -}); diff --git a/views/cypress/support/selection.js b/views/cypress/support/selection.js deleted file mode 100644 index a8b4d94718..0000000000 --- a/views/cypress/support/selection.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -/** - * Select text within text element - * @param {String} selector for text element - */ -Cypress.Commands.add('selectTextWithin', (selector) => { - cy.document().then(doc => { - cy.window().then(win => { - cy.get(selector).then(textElement => { - if (win.getSelection) { - const selection = win.getSelection(); - const range = doc.createRange(); - range.selectNodeContents(textElement.get(0)); - selection.removeAllRanges(); - selection.addRange(range); - } else { - throw new Error("Can't select text."); - } - }); - }); - }); -}); diff --git a/views/cypress/support/userManagement.js b/views/cypress/support/userManagement.js deleted file mode 100644 index a6fa24611f..0000000000 --- a/views/cypress/support/userManagement.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -import selectors from '../utils/selectors'; -import userRoles from '../utils/userRoles'; - -/** - * Fills user properties in form while checking that login field does not already exist - * @param {String} targetForm - contains selector targeting the Form to fill - * @param {Object} userData - contains user details to fill form - * @param {Array} roles - contains each role that needs to be applied to user - */ -Cypress.Commands.add('addUser', (targetForm, userData, roles) => { - cy.log('COMMAND: addUser'); - - cy.get(targetForm) - .within(() => { - cy.get('input[name*=label]') - .clear() - .type(userData.label); - cy.get('select[name*=userUILg]') - .select(userData.language); - cy.get('input[name*=login]') - .clear() - .type(userData.login); - if (roles) { - cy.get('input[type=checkbox][name*="userRoles"]') - .check(roles || userRoles.itemAuthor, { force: true }); - } - cy.get('input[name*=password1]') - .clear() - .type(userData.password); - cy.get('input[name*=password2]') - .clear() - .type(userData.password); - cy.get('.login-info.ui-state-error').should('not.exist') - cy.get('button[type=submit]').click(); - }); -}); - -/** - * Search for user in table using search input[name=filter] - * Triggers delete action by clicking remove button - * Confirms action in modal - * @param {Object} userData - contains user details - */ -Cypress.Commands.add('deleteUser', (userData) => { - cy.log('COMMAND: deleteUser'); - - cy.intercept('GET', `**/Users/**/*filterquery=${userData.login}`).as('usersData') - cy.get(`${selectors.manageUserTable} .filter input[name=filter]`) - .type(`${userData.login}{enter}`); - cy.wait('@usersData'); - - cy.get(`${selectors.manageUserTable} table`) - .contains('td', userData.login) - .siblings('.actions') - .find('.remove') - .should('not.have.class', 'disabled') - .click() - - cy.get('.modal-body').then((body) => { - if (body.find('label[for=confirm]').length) { - cy.get('label[for=confirm]').click(); - } - - cy.get(selectors.deleteConfirm).click(); - }); -}); diff --git a/views/cypress/tests/item-author-role.spec.js b/views/cypress/tests/item-author-role.spec.js deleted file mode 100644 index 336bf00fdc..0000000000 --- a/views/cypress/tests/item-author-role.spec.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ -import urls from '../utils/urls'; -import users from '../utils/users'; -import userRoles from '../utils/userRoles'; -import selectors from '../utils/selectors'; -import { tryToDeleteUser } from '../utils/cleanup'; - -describe('Item Author Role', () => { - const userLogin = users.user_item_author.login; - const userPassword = users.user_item_author.password; - - before(() => { - cy.loginAsAdmin(); - tryToDeleteUser(users.user_item_author); - cy.intercept('GET', '**/add*').as('add'); - cy.visit(urls.addUser); - cy.wait('@add'); - cy.addUser(selectors.addUserForm, users.user_item_author, userRoles.itemAuthor); - cy.intercept('GET', '**/logout*').as('logout'); - cy.logoutAttempt(); - cy.wait('@logout'); - }); - - describe('Login', () => { - it('Logged in successfully', function() { - cy.loginAttempt(userLogin, userPassword); - cy.get('#user_settings .username').should('have.text', users.user_item_author.login); - cy.get('#logout'); - }); - - it('Pass splash-screen', function() { - cy.get('#splash-screen'); - cy.get(':nth-child(1) > :nth-child(1) > .block').click(); - cy.get('#splash-close-btn').click(); - }); - }); - - describe('Check Item tab', () => { - it('Has access to items tab', function() { - cy.get('.lft.main-menu > :nth-child(1) > a .icon-item'); - }); - - it('Has access to resource tree', function() { - cy.intercept('GET', '**/taoItems/Items/*').as('treeItems'); - cy.wait('@treeItems'); - cy.get('#tree-manage_items').should('be.visible'); - cy.get('#tree-manage_items > ul > li') - }); - - it('Has access to resource actions', function() { - cy.get('.tree-action-bar-box > .plain') - .should('be.visible') - .children().its('length').should('be.gt', 0); - }); - }); - - describe('Check Assets tab', () => { - it('Has access to Assets tab', function() { - cy.get('.lft.main-menu > li > a .icon-media'); - cy.intercept('GET', '**/taoMediaManager/MediaManager/*').as('mediaData'); - cy.visit(urls.mediaManager); - cy.wait('@mediaData'); - }); - - it('Has access to resource tree', function() { - cy.get('#tree-media_manager').should('be.visible'); - cy.get('#tree-media_manager > ul > li'); - }); - - it('Has access to resource actions', function() { - cy.get('.tree-action-bar-box > .plain') - .should('be.visible') - .children().its('length').should('be.gt', 0); - }); - }); -}); diff --git a/views/cypress/tests/login.spec.js b/views/cypress/tests/login.spec.js deleted file mode 100644 index aa0f1b9cb6..0000000000 --- a/views/cypress/tests/login.spec.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -import urls from '../utils/urls'; - - -describe('Login', () => { - it('cannot login with invalid user', function () { - cy.visit(urls.login); - cy.loginAttempt('invalid', '123'); - - cy.get('.feedback[role=alert]').should('exist'); - cy.location('pathname').should('eq', urls.login); - }); - - it('can login with admin user', function () { - const username = Cypress.env('adminUser'); - const password = Cypress.env('adminPass'); - - cy.visit(urls.login); - cy.loginAttempt(username, password); - - cy.location('pathname').should('eq', urls.index); - }); -}); diff --git a/views/cypress/tests/test-author-role.spec.js b/views/cypress/tests/test-author-role.spec.js deleted file mode 100644 index 2d561d93d6..0000000000 --- a/views/cypress/tests/test-author-role.spec.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ -import urls from '../utils/urls'; -import users from '../utils/users'; -import userRoles from '../utils/userRoles'; -import selectors from '../utils/selectors'; -import { tryToDeleteUser } from '../utils/cleanup'; - - describe('Item Author Role', () => { - const userLogin = users.user_test_author.login; - const userPassword = users.user_test_author.password; - - before(() => { - cy.loginAsAdmin(); - tryToDeleteUser(users.user_test_author); - cy.intercept('GET', '**/add*').as('add'); - cy.visit(urls.addUser); - cy.wait('@add'); - cy.addUser(selectors.addUserForm, users.user_test_author, [userRoles.itemAuthor, userRoles.testAuthor]); - cy.intercept('GET', '**/logout*').as('logout'); - cy.logoutAttempt(); - cy.wait('@logout'); - }); - - describe('Login', () => { - it('Logged in successfully', function() { - cy.loginAttempt(userLogin, userPassword); - cy.get('#user_settings .username').should('have.text', users.user_test_author.login); - cy.get('#logout'); - }); - - it('Pass splash-screen', function() { - cy.get('#splash-screen'); - cy.get(':nth-child(1) > :nth-child(1) > .block').click(); - cy.get('#splash-close-btn').click(); - }); - }); - - describe('Check Item tab', () => { - it('Has access to items tab', function() { - cy.get('.lft.main-menu > :nth-child(1) > a .icon-item'); - }); - - it('Has access to resource tree', function() { - cy.intercept('GET', '**/taoItems/Items/*').as('treeItems'); - cy.wait('@treeItems'); - cy.get('#tree-manage_items').should('be.visible'); - cy.get('#tree-manage_items > ul > li'); - }); - - it('Has access to resource actions', function() { - cy.get('.tree-action-bar-box > .plain') - .should('be.visible') - .children().its('length').should('be.gt', 0); - }); - }); - - describe('Check Assets tab', () => { - it('Has access to Assets tab', function() { - cy.get('.lft.main-menu > li > a .icon-media'); - cy.intercept('GET', '**/taoMediaManager/MediaManager/*').as('mediaData'); - cy.visit(urls.mediaManager); - cy.wait('@mediaData'); - }); - - it('Has access to resource tree', function() { - cy.get('#tree-media_manager').should('be.visible'); - cy.get('#tree-media_manager > ul > li'); - }); - - it('Has access to resource actions', function() { - cy.get('.tree-action-bar-box > .plain') - .should('be.visible') - .children().its('length').should('be.gt', 0); - }); - }); - - describe('Check Tests tab', () => { - it('Has access to Tests tab', function() { - cy.get('.lft > :nth-child(2) > a .icon-test'); - cy.intercept('GET', '**/taoTests/Tests/*').as('testsData'); - cy.visit(urls.testsManager); - cy.wait('@testsData'); - }); - - it('Has access to resource tree', function() { - cy.get('#tree-manage_tests').should('be.visible'); - cy.get('#tree-manage_tests > ul > li'); - }); - - it('Has access to resource actions', function() { - cy.get('.tree-action-bar-box > .plain') - .should('be.visible') - .children().its('length').should('be.gt', 0); - }); - }); -}); diff --git a/views/cypress/tests/test-taker-role.spec.js b/views/cypress/tests/test-taker-role.spec.js deleted file mode 100644 index 591eade027..0000000000 --- a/views/cypress/tests/test-taker-role.spec.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ -import urls from '../utils/urls'; -import users from '../utils/users'; -import userRoles from '../utils/userRoles'; -import selectors from '../utils/selectors'; -import { tryToDeleteUser } from '../utils/cleanup'; - -describe('Test Taker Role', () => { - const userLogin = users.user_test_taker.login; - const userPassword = users.user_test_taker.password; - - before(() => { - cy.loginAsAdmin(); - tryToDeleteUser(users.user_test_taker); - cy.intercept('GET', '**/add*').as('add'); - cy.visit(urls.addUser); - cy.wait('@add'); - cy.addUser(selectors.addUserForm, users.user_test_taker, userRoles.testTaker); - cy.intercept('GET', '**/logout*').as('logout'); - cy.logoutAttempt(); - cy.wait('@logout'); - }); - - describe('Login', () => { - it('Logged in successfully', function() { - cy.loginAttempt(userLogin, userPassword); - cy.contains('.settings-menu li', users.user_test_taker.login); - cy.get('#logout'); - }); - }); - - describe('Only has access to deliveries', () => { - it('Is in delivery scope', function() { - cy.get('body').should('have.class', 'delivery-scope') - }); - - it('Doesn\'t have access to tabs', function() { - cy.get('.lft.main-menu').should('not.exist'); - }); - - it('Can see listing of deliveries', () => { - cy.get('.test-listing'); - }); - }); -}); diff --git a/views/cypress/tests/user-management.spec.js b/views/cypress/tests/user-management.spec.js deleted file mode 100644 index 373eb5b3c3..0000000000 --- a/views/cypress/tests/user-management.spec.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 (original work) Open Assessment Technologies SA ; - */ - -import selectors from '../utils/selectors'; -import urls from '../utils/urls'; -import users from '../utils/users'; -import userRoles from '../utils/userRoles'; - -describe('User Management', () => { - describe('Add User', () => { - before(() => { - cy.loginAsAdmin(); - cy.intercept('GET', '**/add*').as('add'); - cy.visit(urls.addUser); - - cy.wait('@add'); - }); - - describe('Visit add users page', () => { - it('should be Users settings menu button', function () { - cy.get('.setting-menu-container .settings-menu .active.li-users').should('have.length', 1); - }); - - it('should be form with properties', function () { - cy.get('section.content-container').find('form').should('have.length', 1); - }); - }); - - describe('Can create user', () => { - it('fill user form', function () { - cy.addUser(selectors.addUserForm, users.user_cypress, userRoles.itemAuthor) - }); - }) - }); - - describe('Delete User', () => { - before(() => { - cy.loginAsAdmin(); - cy.intercept('GET', '**/Users/data*').as('usersData') - cy.wait('@usersData'); - }); - - describe('Visit manage users page', () => { - it('should be Users settings menu button', function () { - cy.get('.setting-menu-container .settings-menu .active.li-users').should('have.length', 1); - }); - - it('should be table with actions', function () { - cy.get(`${selectors.manageUserTable} table td.actions`) - }); - }); - - describe('Can delete user', () => { - it('Find and delete user', function() { - cy.deleteUser(users.user_cypress) - }) - }) - }); -}); diff --git a/views/cypress/utils/cleanup.js b/views/cypress/utils/cleanup.js deleted file mode 100644 index fc3a1fe4e6..0000000000 --- a/views/cypress/utils/cleanup.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 Open Assessment Technologies SA ; - */ - -import selectors from './selectors'; -import urls from './urls'; - -/** Tries to delete user with given credentials as cleanup process - * @param {Object} user - contains user details - */ - -export function tryToDeleteUser(user) { - cy.visit(urls.manageUsers); - cy.intercept('GET', `**/Users/**/*filterquery=${user.login}`).as('usersData'); - cy.get(`${selectors.manageUserTable} .filter input[name=filter]`) - .type(`${user.login}{enter}`); - cy.wait('@usersData').then((interception) => { - if (interception.response.body.data) { - cy.get(`${selectors.manageUserTable} table`) - .contains('td', user.login) - .siblings('.actions') - .find('.remove') - .should('not.have.class', 'disabled') - .click(); - - cy.get('.modal-body').then((body) => { - if (body.find('label[for=confirm]').length) { - cy.get('label[for=confirm]').click(); - } - - cy.get(selectors.deleteConfirm).click(); - }); - } else { - return true; - } - }); -}; diff --git a/views/cypress/utils/helpers.js b/views/cypress/utils/helpers.js deleted file mode 100644 index 6de633df10..0000000000 --- a/views/cypress/utils/helpers.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2021 Open Assessment Technologies SA ; - */ - -/** - * Checks a HTTP(S) url - * @type {RegExp} - */ -const fullUrlRe = /^https?:\/\/\w+/; - -/** - * Makes sure an url is complete. - * Adds the baseUrl if no root has been set. - * @param {String} url - The URL to complete if needed - * @param {String} trailing - An optional trailing substring to add - * @returns {String} - */ -export function getFullUrl(url, trailing = '') { - if (!fullUrlRe.test(url)) { - url = `${new URL(url, Cypress.config().baseUrl)}`; - } - if (trailing && !url.endsWith(trailing)) { - url = `${url}${trailing}`; - } - return url; -} - -/** - * Get random number - * @returns {Number} - */ - export function getRandomNumber() { - return Math.floor(Math.random() * 1000); -} diff --git a/views/cypress/utils/selectors.js b/views/cypress/utils/selectors.js deleted file mode 100644 index 648192d968..0000000000 --- a/views/cypress/utils/selectors.js +++ /dev/null @@ -1,25 +0,0 @@ -export default { - addUserForm: 'form[action="/tao/Users/add"]', - - deleteConfirm: '[data-control="ok"]', - - labelSelector: '[data-testid=Label]', - - manageUserTable: '#user-list', - - // Search - search: { - textInput: 'input[name="query"]', - openResultsButton: 'button[title="Open results"]', - - modal: { - // TODO: add data-attributes to remove .class selectors - dialog: '.search-modal', - textInput: '.search-modal input[placeholder="Search Item"]', - entries: '.search-modal [data-item-identifier]', - filterButton: '.search-modal .class-filter', - closeButton: '#modal-close-btn', - paginationButton: '.search-modal .pagination button', - } - } -}; diff --git a/views/cypress/utils/selectors/list.js b/views/cypress/utils/selectors/list.js deleted file mode 100644 index 7a5d879209..0000000000 --- a/views/cypress/utils/selectors/list.js +++ /dev/null @@ -1,26 +0,0 @@ -export default { - lists: '[id^="list-data"]', - listLast: '[id^="list-data"]:last-child', - - maxItems: '[data-testid="maxItems"]', - - // List - listName: '[data-testid="listName"]', - createListButton: '#createList button',//- - - listEditButton: '[data-testid="listEditButton"]', - listDeleteButton: '[data-testid="listDeleteButton"]', - - listNameInput: '[data-testid="listNameInput"]', - uriElementsInput: ['id^="uri_list-element'], - editUriCheckbox: '[data-testid="editUriCheckbox"]', - - // Element - elementsList: '[data-testid="elements"]', - elementNameInput: '[data-testid="elementNameInput"]', - elementUriInput: '[data-testid="elementUriInput"]', - - addElementButton: '[data-testid="addElementButton"]', - saveElementButton: '[data-testid="saveElementButton"]', - deleteElementButton: '[data-testid="deleteElementButton"]', -}; diff --git a/views/cypress/utils/urls.js b/views/cypress/utils/urls.js deleted file mode 100644 index b5074a4750..0000000000 --- a/views/cypress/utils/urls.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - index: '/tao/Main/index', - login: '/tao/Main/login', - addUser: '/tao/Main/index?structure=users&ext=tao§ion=add_user', - itemsManager: '/tao/Main/index?structure=items&ext=taoItems§ion=manage_items', - manageUsers: '/tao/Main/index?structure=users&ext=tao§ion=list_users', - mediaManager: '/tao/Main/index?structure=taoMediaManager&ext=taoMediaManager§ion=media_manager', - testsManager: '/tao/Main/index?structure=tests&ext=taoTests§ion=manage_tests', - testTakersManager: '/tao/Main/index?structure=TestTaker&ext=taoTestTaker§ion=manage_test_takers', - settings: { - index: '/tao/Main/index?structure=settings', - list: '/tao/Main/index?structure=settings&ext=tao§ion=taoBo_list', - tree: '/tao/Main/index?structure=settings&ext=tao§ion=taoBo_tree' - }, - list: { - index: '**/taoBackOffice/Lists/index', - save: '**/taoBackOffice/Lists/saveLists', - remove: '**/taoBackOffice/Lists/removeList' - }, - edit: '**/edit*', -}; diff --git a/views/cypress/utils/userRoles.js b/views/cypress/utils/userRoles.js deleted file mode 100644 index 3a69cc176c..0000000000 --- a/views/cypress/utils/userRoles.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - dataAccessAdministrator: 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAO_0_rdf_3_DacAdministrator', - globalManager: 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAO_0_rdf_3_GlobalManagerRole', - itemAuthor: 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAOItem_0_rdf_3_ItemAuthor', - testAuthor: 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAOItem_0_rdf_3_TestAuthor', - testTaker: 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAO_0_rdf_3_DeliveryRole' -}; diff --git a/views/cypress/utils/users.js b/views/cypress/utils/users.js deleted file mode 100644 index a7397b11d0..0000000000 --- a/views/cypress/utils/users.js +++ /dev/null @@ -1,26 +0,0 @@ -export default { - user_cypress: { - 'login': 'user_cypress', - 'label': 'User cypress', - 'language': 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAO_0_rdf_3_Langen-US', - 'password': 'User.12345' - }, - user_item_author: { - 'login': 'user_item_author', - 'label': 'User item author', - 'language': 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAO_0_rdf_3_Langen-US', - 'password': 'User.12345' - }, - user_test_author: { - 'login': 'user_test_author', - 'label': 'User test author', - 'language': 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAO_0_rdf_3_Langen-US', - 'password': 'User.12345' - }, - user_test_taker: { - 'login': 'user_test_taker', - 'label': 'User test taker', - 'language': 'http_2_www_0_tao_0_lu_1_Ontologies_1_TAO_0_rdf_3_Langen-US', - 'password': 'User.12345' - } -}; From 0b1ecb85843c9fdea80386aedadc819afa1f035e Mon Sep 17 00:00:00 2001 From: "maria.cano" Date: Thu, 21 Sep 2023 13:08:06 +0200 Subject: [PATCH 3/5] feat: remove e2e resources folder --- views/js/e2e/resourceSelector/README.md | 19 -- .../e2e/resourceSelector/class/class.spec.js | 122 ------------ .../e2e/resourceSelector/class/classData.js | 21 --- .../resourceSelector/class/subClassData.js | 21 --- .../js/e2e/resourceSelector/item/item.spec.js | 118 ------------ .../js/e2e/resourceSelector/item/itemData.js | 21 --- views/js/e2e/resourceSelector/resourceTree.js | 178 ------------------ .../js/e2e/resourceSelector/tree/tree.spec.js | 136 ------------- 8 files changed, 636 deletions(-) delete mode 100644 views/js/e2e/resourceSelector/README.md delete mode 100644 views/js/e2e/resourceSelector/class/class.spec.js delete mode 100644 views/js/e2e/resourceSelector/class/classData.js delete mode 100644 views/js/e2e/resourceSelector/class/subClassData.js delete mode 100644 views/js/e2e/resourceSelector/item/item.spec.js delete mode 100644 views/js/e2e/resourceSelector/item/itemData.js delete mode 100644 views/js/e2e/resourceSelector/resourceTree.js delete mode 100644 views/js/e2e/resourceSelector/tree/tree.spec.js diff --git a/views/js/e2e/resourceSelector/README.md b/views/js/e2e/resourceSelector/README.md deleted file mode 100644 index 4341a95e22..0000000000 --- a/views/js/e2e/resourceSelector/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# About these tests - -The tests in this folder are for the **resourceSelector** component in TAO CE. - -Please note that the resourceSelector looks and behaves differently from the **jsTree** component which is loaded by default in (e.g.) TAO 3.3.0-sprint101. - -To install the resourceSelector, run the following command from your instance root: - -``` -php index.php "\\oat\\tao\\scripts\\install\\SetResourceSelector" -``` - -If using a Docker container to run TAO: - -``` -docker exec -it {taocontainername} php index.php "\\oat\\tao\\scripts\\install\\SetResourceSelector" -``` - -You should find the configuration in `/config/tao/client_lib_config_registry.conf.php` has been updated with a new value of `treeProvider`. diff --git a/views/js/e2e/resourceSelector/class/class.spec.js b/views/js/e2e/resourceSelector/class/class.spec.js deleted file mode 100644 index cee19927d5..0000000000 --- a/views/js/e2e/resourceSelector/class/class.spec.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; - */ - -import classData from './classData'; -import subClassData from './subClassData'; -import { selectors } from '../resourceTree'; - -describe('Classes', () => { - const newClassName = classData.name; - const newSubClassName = subClassData.name; - - /** - * - Set up the server & routes - * - Log in - * - Visit the page - */ - beforeEach(() => { - cy.setupServer(); - cy.addTreeRoutes(); - - cy.login('admin'); - - cy.loadItemsPage(); - }); - - /** - * Destroy everything we created, leaving the environment clean for next time. - */ - afterEach(() => { - if (Cypress.$(`[title="${newClassName}"]`).length > 0) { - cy.deleteClass(`[title="${newClassName}"]`); - } - }); - - /** - * Class tests - */ - describe('Class creation, editing and deletion', () => { - - it('items page loads', function() { - cy.get(selectors.resourceTree); - }); - - it('can create and rename a new class from the root class', function() { - cy.addClass(selectors.itemsRootClass); - - cy.renameSelectedClass(newClassName); - - cy.get(selectors.resourceTree) - .contains(newClassName) - .should('exist') - .and('be.visible'); - }); - - it('can delete previously created class', function() { - cy.addClass(selectors.itemsRootClass); - - cy.renameSelectedClass(newClassName); - - cy.get(selectors.actions.deleteClass).click('center'); - cy.get('.modal-body [data-control="ok"]').click(); - - cy.wait('@deleteClass'); - - cy.get(selectors.resourceTree) - .contains(newClassName) - .should('not.exist'); - }); - - // Following test skipped pending fix of BRS behaviour - it.skip('can create a new subclass from created class', function() { - cy.addClass(selectors.itemsRootClass); - - cy.renameSelectedClass(newClassName); - - cy.addClass(`[title="${newClassName}"]`); - - cy.renameSelectedClass(newSubClassName); // rename causes tree to close (BRS bug) - - cy.get(selectors.resourceTree).within(() => { - cy.contains(newSubClassName) - .should('exist'); - }); - }); - - it('has correct action buttons when class is selected', function() { - cy.selectTreeNode(selectors.itemsRootClass); - - // check the visible action buttons - cy.get(selectors.actionsContainer).within(() => { - [ - 'newClass', - 'deleteClass', - 'import', - 'export', - 'moveTo', - 'newItem' - ].forEach((action) => { - cy.get(selectors.actions[action]) - .should('exist') - .and('be.visible'); - }); - }); - }); - - }); -}); diff --git a/views/js/e2e/resourceSelector/class/classData.js b/views/js/e2e/resourceSelector/class/classData.js deleted file mode 100644 index 138131c5bf..0000000000 --- a/views/js/e2e/resourceSelector/class/classData.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; - */ - -export default { - name: '_Temporary class from E2E test tool' -}; diff --git a/views/js/e2e/resourceSelector/class/subClassData.js b/views/js/e2e/resourceSelector/class/subClassData.js deleted file mode 100644 index 1809973a42..0000000000 --- a/views/js/e2e/resourceSelector/class/subClassData.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; - */ - -export default { - name: '_Temporary subclass from E2E test tool' -}; diff --git a/views/js/e2e/resourceSelector/item/item.spec.js b/views/js/e2e/resourceSelector/item/item.spec.js deleted file mode 100644 index d34af4b760..0000000000 --- a/views/js/e2e/resourceSelector/item/item.spec.js +++ /dev/null @@ -1,118 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; - */ - -import itemData from './itemData'; -import { selectors } from '../resourceTree'; - -describe('Items', () => { - const newItemName = itemData.name; - - /** - * - Set up the server & routes - * - Log in - * - Visit the page - */ - beforeEach(() => { - cy.setupServer(); - cy.addTreeRoutes(); - - cy.login('admin'); - - cy.loadItemsPage(); - }); - - /** - * Destroy everything we created, leaving the environment clean for next time. - */ - afterEach(() => { - if (Cypress.$(`[title="${newItemName}"]`).length > 0) { - cy.deleteItem(`[title="${newItemName}"]`); - } - }); - - /** - * Item tests - */ - describe('Item creation, edit and delete', () => { - - it('items page loads', function() { - cy.get(selectors.resourceTree); - }); - - it('can create and rename a new item', function() { - cy.addItem(selectors.itemsRootClass); - - cy.renameSelectedItem(newItemName); - - cy.get(selectors.resourceTree) - .contains(newItemName) - .should('exist'); - }); - - it('can delete previously created item', function() { - cy.addItem(selectors.itemsRootClass); - - cy.renameSelectedItem(newItemName); - - cy.get(selectors.actions.deleteItem).click(); - cy.get('.modal-body [data-control="ok"]').click(); - - cy.wait('@deleteItem'); - }); - - it('has correct action buttons when item is selected', function() { - cy.addItem(selectors.itemsRootClass); - - cy.renameSelectedItem(newItemName); - - cy.get(`[title="${newItemName}"]`) - .closest(selectors.treeNode) - .should('not.have.class', 'closed'); - - cy.get(selectors.actionsContainer).within(() => { - [ - 'newClass', - 'deleteItem', - 'import', - 'export', - 'moveTo', - 'copyTo', - 'duplicate', - 'newItem' - ].forEach((action) => { - cy.get(selectors.actions[action]) - .should('exist') - .and('be.visible'); - }); - }); - }); - - it('has correct action buttons when nothing is selected', function() { - // deselect selected list item - cy.get(selectors.resourceTree) - .find('.selected').first() - .click({ force: true }); - - cy.get(selectors.actionsContainer).within(() => { - cy.get(selectors.actionBtn) - .should('not.be.visible'); - }); - }); - - }); -}); diff --git a/views/js/e2e/resourceSelector/item/itemData.js b/views/js/e2e/resourceSelector/item/itemData.js deleted file mode 100644 index 45f5bf8e56..0000000000 --- a/views/js/e2e/resourceSelector/item/itemData.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; - */ - -export default { - name: '_Temporary item from E2E test tool' -}; diff --git a/views/js/e2e/resourceSelector/resourceTree.js b/views/js/e2e/resourceSelector/resourceTree.js deleted file mode 100644 index 7446586f9d..0000000000 --- a/views/js/e2e/resourceSelector/resourceTree.js +++ /dev/null @@ -1,178 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; - */ - -/** - * CSS Selectors - */ -const selectors = { - resourceTree: '.resource-tree', - actionsContainer: '.tree-action-bar', - contentContainer: '.content-container', - itemsRootClass: '.class[data-uri="http://www.tao.lu/Ontologies/TAOItem.rdf#Item"]', - toggler: '.class-toggler', - treeNode: '.instance, .class', - labelInput: 'input[name$="label"]', - saveBtn: '#Save', - actionBtn: '.action', - actions: { - newItem: '.action[data-action="instanciate"]', - newClass: '.action[data-action="subClass"]', - deleteItem: '.action[data-action="removeNode"][data-context="instance"]', - deleteClass: '.action[data-action="removeNode"][data-context="class"]', - import: '.action[data-action="loadClass"]', - export: '.action[data-action="load"]', - moveTo: '.action[data-action="moveTo"]', - copyTo: '.action[data-action="copyTo"]', - duplicate: '.action[data-action="duplicateNode"]' - } -}; - -export default { - selectors: selectors -}; - -/** - * Commands - */ -Cypress.Commands.add('addTreeRoutes', () => { - cy.route('POST', '**/editItem').as('editItem'); - cy.route('POST', '**/editClassLabel').as('editClass'); - cy.route('POST', '**/deleteItem').as('deleteItem'); - cy.route('POST', '**/deleteClass').as('deleteClass'); -}); - -Cypress.Commands.add('loadItemsPage', () => { - const fixtures = []; - - Cypress.Promise.all([ - cy.fixture('urls').then(fx => fixtures.push(fx)), - cy.fixture('urlParams').then(fx => fixtures.push(fx)), - ]) - .then(() => { - const [urls, urlParams] = fixtures; - - // Provide the full URL parameters including 'uri' - // to guarantee a predictable tree with the 'Item' root class selected - cy.visit(`${urls.index}?${urlParams.taoItemsRoot}&${urlParams.nosplash}`); - // Important to register this first response, or it will mess up future "wait"s: - // Extended timeout because some envs can be slow to load all resources - cy.wait('@editClass', { timeout: 10000 }); - }); -}); - -Cypress.Commands.add('selectTreeNode', (cssSelector) => { - cy.log('COMMAND: selectTreeNode', cssSelector); - - cy.get(selectors.resourceTree).within(() => { - cy.get(cssSelector) - .first() - .then(($el) => { - const $treeNode = $el.closest(selectors.treeNode); - - // click the node only if it isn't selected: - if (!$treeNode.hasClass('selected')) { - // it can be offscreen due to scrollable panel (so let's force click) - cy.wrap($treeNode) - .should('not.have.class', 'selected') - .click('top', {force: true}); - - // 1 of 2 possible events indicates the clicked node's form loaded: - if ($treeNode.hasClass('class')) { - cy.wait('@editClass'); - } - else { - cy.wait('@editItem'); - } - } - }); - }); -}); - -Cypress.Commands.add('renameSelectedClass', (newName) => { - cy.log('COMMAND: renameSelectedClass', newName); - - // assumes that editing form has already been rendered - cy.get(selectors.contentContainer).within(() => { - cy.get(selectors.labelInput) - .clear() - .type(newName); - - cy.get(selectors.saveBtn).click(); - }); - // this event needs to fire twice before proceeding - cy.wait('@editClass').wait('@editClass'); -}); - -Cypress.Commands.add('renameSelectedItem', (newName) => { - cy.log('COMMAND: renameSelectedItem', newName); - - // assumes that editing form has already been rendered - cy.get(selectors.contentContainer).within(() => { - cy.get(selectors.labelInput) - .clear() - .type(newName); - - cy.get(selectors.saveBtn).click(); - }); - // this event needs to fire twice before proceeding - cy.wait('@editItem').wait('@editItem'); -}); - -Cypress.Commands.add('addClass', (cssSelector) => { - cy.log('COMMAND: addClass', cssSelector); - - cy.selectTreeNode(cssSelector); - - cy.get(selectors.actions.newClass).click(); - - // this event needs to fire twice before proceeding - cy.wait('@editClass').wait('@editClass'); -}); - -Cypress.Commands.add('addItem', (cssSelector) => { - cy.log('COMMAND: addItem', cssSelector); - - cy.selectTreeNode(cssSelector); - - cy.get(selectors.actions.newItem).click(); - - // 2 different events must fire before proceeding - cy.wait('@editClass').wait('@editItem'); -}); - -Cypress.Commands.add('deleteClass', (cssSelector) => { - cy.log('COMMAND: deleteClass', cssSelector); - - cy.selectTreeNode(cssSelector); - - cy.get(selectors.actions.deleteClass).click({force: true}); - cy.get('.modal-body [data-control="ok"]').click(); - - cy.wait('@deleteClass'); -}); - -Cypress.Commands.add('deleteItem', (cssSelector) => { - cy.log('COMMAND: deleteItem', cssSelector); - - cy.selectTreeNode(cssSelector); - - cy.get(selectors.actions.deleteItem).click({force: true}); - cy.get('.modal-body [data-control="ok"]').click(); - - cy.wait('@deleteItem'); -}); diff --git a/views/js/e2e/resourceSelector/tree/tree.spec.js b/views/js/e2e/resourceSelector/tree/tree.spec.js deleted file mode 100644 index 360e9e5a7d..0000000000 --- a/views/js/e2e/resourceSelector/tree/tree.spec.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; under version 2 - * of the License (non-upgradable). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Copyright (c) 2019 (original work) Open Assessment Technologies SA ; - */ - -import classData from '../class/classData'; -import { selectors } from '../resourceTree'; - -describe('ResourceSelector Tree', () => { - const newClassName = classData.name; - - /** - * - Set up the server & routes - * - Log in - * - Visit the page - */ - beforeEach(() => { - cy.setupServer(); - cy.addTreeRoutes(); - - cy.login('admin'); - - cy.loadItemsPage(); - - /** - * The Items tree should always have a root class, 'Item'. - * So without assuming anything about other nodes, let's aim to create - * and test a structure like the following: - * - * [root] Item class - * - [L1] Temporary class - * - [L2] Temporary subclass - */ - - // select the root Item class - cy.selectTreeNode(selectors.itemsRootClass); - - // create a class - cy.addClass(selectors.itemsRootClass); - // // rename it - cy.renameSelectedClass(newClassName); - - // create a subclass - cy.addClass(`[title="${newClassName}"]`); - }); - - /** - * Destroy everything we created, leaving the environment clean for next time. - */ - afterEach(() => { - if (Cypress.$(`[title="${newClassName}"]`).length > 0) { - cy.deleteClass(`[title="${newClassName}"]`); - } - }); - - /** - * Tree browsing tests - */ - describe('Tree node opening and closing', () => { - - it('can open and close the root node', function() { - // @action: close via toggler - cy.get(selectors.itemsRootClass) - .find(selectors.toggler).first() - .click({force: true}); - - // @test: is root closed? - cy.get(selectors.itemsRootClass) - .should('have.class', 'closed') - .find('.instance, .class') - .should('not.be.visible'); - - // @action: open via toggler - cy.get(selectors.itemsRootClass) - .find(selectors.toggler).first() - .click({force: true}); - - // @test: is root open? - cy.get(selectors.itemsRootClass) - .should('not.have.class', 'closed') - .find('.instance, .class') - .should('be.visible'); - }); - - it('can open and close a subnode of the root node', function() { - cy.get(selectors.resourceTree).within(() => { - // @action: close via toggler - cy.get(`[title="${newClassName}"]`) - .find(selectors.toggler).first() - .click({force: true}); - - // @test: is class closed? - cy.get(`[title="${newClassName}"]`) - .closest(selectors.treeNode) - .should('have.class', 'closed') - .find('.instance, .class') - .should('not.be.visible'); - - // @test: is root class still open? - cy.get(selectors.itemsRootClass) - .should('not.have.class', 'closed'); - - // @action: open via toggler - cy.get(`[title="${newClassName}"]`) - .find(selectors.toggler).first() - .click({force: true}); - - // @test: is class open? - cy.get(`[title="${newClassName}"]`) - .closest(selectors.treeNode) - .should('not.have.class', 'closed') - .find('.instance, .class') - .should('be.visible'); - }); - }); - - it('cannot open or close an empty class', function() { - cy.get(selectors.itemsRootClass) - .find('.class.empty:first() a') - .should('not.have.class', 'class-toggler'); - }); - }); -}); From e88437fad0be16fd7b832ff3453eca28d98f268f Mon Sep 17 00:00:00 2001 From: "maria.cano" Date: Thu, 21 Sep 2023 13:08:25 +0200 Subject: [PATCH 4/5] feat: remove links to Cypress folder --- scripts/tools/e2e/PrepareEnvironment.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scripts/tools/e2e/PrepareEnvironment.php b/scripts/tools/e2e/PrepareEnvironment.php index 24fb3cada7..f8e0a60fd3 100644 --- a/scripts/tools/e2e/PrepareEnvironment.php +++ b/scripts/tools/e2e/PrepareEnvironment.php @@ -32,11 +32,6 @@ class PrepareEnvironment extends ScriptAction { - public function getConfigPath(string $configEnv = ''): string - { - return sprintf('%s/tao/views/cypress/envs/env%s.json', ROOT_PATH, $configEnv); - } - protected function provideUsage(): array { return [ From 0aa97b0734e349432e1029e2e91f85a09fb850cf Mon Sep 17 00:00:00 2001 From: "maria.cano" Date: Thu, 21 Sep 2023 13:08:53 +0200 Subject: [PATCH 5/5] feat: remove Cypress docs and config --- .gitignore | 7 ------- views/cypress.json | 17 ----------------- 2 files changed, 24 deletions(-) delete mode 100644 views/cypress.json diff --git a/.gitignore b/.gitignore index 5fa2438a0b..7fae7c6013 100644 --- a/.gitignore +++ b/.gitignore @@ -76,10 +76,3 @@ node_modules vendor/ composer.lock - -# E2E testing files -views/cypress/videos -views/cypress/screenshots -views/cypress/examples -views/cypress/envs/*.json -views/cypress.env.json diff --git a/views/cypress.json b/views/cypress.json deleted file mode 100644 index ca0806ae3a..0000000000 --- a/views/cypress.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "integrationFolder": "../..", - "testFiles": "**/views/cypress/tests/**/*.spec.js", - "screenshotsFolder": "cypress/screenshots", - "supportFile": "cypress/support", - "pluginsFile": "cypress/plugins", - "video": false, - "videosFolder": "cypress/videos", - "defaultCommandTimeout": 35000, - "pageLoadTimeout": 30000, - "requestTimeout": 10000, - "env": { - "configFile": "cypress/envs/env.json" - }, - "viewportHeight": 720, - "viewportWidth": 1200 -}