diff --git a/package-lock.json b/package-lock.json index 2016c050..544844e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", @@ -27,7 +26,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -36,7 +34,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -62,11 +59,31 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/@babel/generator": { "version": "7.29.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", - "license": "MIT", "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", @@ -82,7 +99,6 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", @@ -98,7 +114,6 @@ "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -107,7 +122,6 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" @@ -120,7 +134,6 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", @@ -137,7 +150,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -146,7 +158,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -155,7 +166,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -164,7 +174,6 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", - "license": "MIT", "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" @@ -177,7 +186,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", - "license": "MIT", "dependencies": { "@babel/types": "^7.29.0" }, @@ -192,7 +200,6 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", @@ -206,7 +213,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -220,11 +226,31 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/@babel/types": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" @@ -245,7 +271,6 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -255,7 +280,6 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -264,7 +288,6 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" @@ -274,7 +297,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -284,7 +306,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -293,7 +314,6 @@ "version": "0.3.11", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -302,14 +322,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -320,7 +338,6 @@ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", "hasInstallScript": true, - "license": "MIT", "optional": true, "dependencies": { "detect-libc": "^2.0.3", @@ -358,7 +375,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "android" @@ -378,7 +394,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -398,7 +413,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -418,7 +432,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -438,7 +451,6 @@ "cpu": [ "arm" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -458,7 +470,6 @@ "cpu": [ "arm" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -478,7 +489,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -498,7 +508,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -518,7 +527,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -538,7 +546,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -558,7 +565,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -578,7 +584,6 @@ "cpu": [ "ia32" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -598,7 +603,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -615,7 +619,6 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -625,7 +628,6 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -634,8 +636,7 @@ "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" }, "node_modules/@types/glob": { "version": "7.2.0", @@ -650,8 +651,7 @@ "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/minimatch": { "version": "6.0.0", @@ -664,10 +664,9 @@ } }, "node_modules/@types/node": { - "version": "25.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz", - "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", - "license": "MIT", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", + "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dependencies": { "undici-types": "~7.18.0" } @@ -676,7 +675,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -685,26 +683,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT" + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT" + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT" + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -714,14 +708,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT" + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -733,7 +725,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -742,7 +733,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } @@ -750,14 +740,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT" + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -773,7 +761,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -786,7 +773,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -798,7 +784,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -812,7 +797,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -823,7 +807,6 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -837,7 +820,6 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -851,7 +833,6 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -868,21 +849,18 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/accepts": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha512-AOPopplFOUlmUugwiZUCDpOwmqvSgdCyE8iJVLWI4NcB7qfMKQN34dn5xYtlUU03XGG5egRWW4NW5gIxpa5hEA==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "~2.1.11", "negotiator": "0.6.1" @@ -895,7 +873,6 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -907,7 +884,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "license": "MIT", "engines": { "node": ">=10.13.0" }, @@ -919,14 +895,12 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/ajv": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -942,7 +916,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -959,7 +932,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -971,7 +943,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "license": "MIT", "dependencies": { "ansi-wrap": "^0.1.0" }, @@ -983,7 +954,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -995,7 +965,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1010,7 +979,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1020,7 +988,6 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, - "license": "ISC", "dependencies": { "micromatch": "^2.1.5", "normalize-path": "^2.0.0" @@ -1031,7 +998,6 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, - "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -1039,12 +1005,20 @@ "node": ">=0.10.0" } }, + "node_modules/append-prepend-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-prepend-loader/-/append-prepend-loader-1.0.0.tgz", + "integrity": "sha512-TpqFKoWUJZgo69yFD+EZ+NBhEVAVT6LK5vgMbBEyHd65a33v/ECNq7H8THzL4eobBZaaJ21bVg5ruJeYxTSsYw==", + "dev": true, + "peerDependencies": { + "webpack": "*" + } + }, "node_modules/arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1" }, @@ -1057,7 +1031,6 @@ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1066,7 +1039,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1076,7 +1048,6 @@ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1107,7 +1078,6 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1118,11 +1088,14 @@ "integrity": "sha512-6ZjfQaBSy6CuIH0+B0NrxMfDE5VIOCP/5gOqSpEIsaAZx9/giszzrXg6PZ7G51U/n88UmlAgYLNQ9wAnII7PJA==", "dev": true }, + "node_modules/assets": { + "resolved": "xblocks_contrib/discussion/assets", + "link": true + }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1137,15 +1110,13 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "license": "(MIT OR Apache-2.0)", "bin": { "atob": "bin/atob.js" }, @@ -1157,7 +1128,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -1172,7 +1142,6 @@ "version": "9.2.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" @@ -1186,19 +1155,27 @@ } }, "node_modules/backbone": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.0.tgz", - "integrity": "sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==", - "license": "MIT", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.1.tgz", + "integrity": "sha512-YQzWxOrIgL6BoFnZjThVN99smKYhyEXXFyJJ2lsF1wJLyo4t+QjmkLrH8/fN22FZ4ykF70Xq7PgTugJVR4zS9Q==", "dependencies": { "underscore": ">=1.8.3" } }, + "node_modules/backbone-associations": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/backbone-associations/-/backbone-associations-0.6.2.tgz", + "integrity": "sha512-mE9eNMy+fLbFa8Gf9WNdo3+uwjUIuNoXmGT5NNlZ7Dyu0KP3Y0FHq5OFVxJx+owlbd+olWzUFL3TdhfihcqlSA==", + "dev": true, + "dependencies": { + "backbone": ">=1.0.0", + "underscore": ">=1.4.4" + } + }, "node_modules/backbone.paginator": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/backbone.paginator/-/backbone.paginator-2.0.8.tgz", "integrity": "sha512-8XS2CTbjnwMbJ/3Traa1te2RPecOGbZ9tc52T89pzo6NXlVEJDFnC++dp7CQLBUZpgk3g0veX8mUbEF4wbD2NQ==", - "license": "MIT", "dependencies": { "backbone": "1.1.2 || 1.2.3 || ^1.3.2", "underscore": "^1.8.0" @@ -1208,22 +1185,19 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/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, - "license": "MIT" + "dev": true }, "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "license": "MIT", "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -1242,7 +1216,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -1264,7 +1237,6 @@ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", "integrity": "sha512-rz8L+d/xByiB/vLVftPkyY215fqNrmasrcJsYkVcm4TgJNz+YXKrFaFAWibSaHkiKoSgMDCb+lipOIRQNGYesw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -1273,7 +1245,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", - "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" }, @@ -1303,7 +1274,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", "engines": { "node": "*" } @@ -1313,7 +1283,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1323,7 +1292,6 @@ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" @@ -1339,15 +1307,13 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/body-parser": { "version": "1.20.4", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", @@ -1367,23 +1333,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/bootstrap": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", @@ -1410,7 +1359,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1446,7 +1394,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1466,7 +1413,6 @@ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, - "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -1476,28 +1422,24 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/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==", - "license": "MIT" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1507,7 +1449,6 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "license": "MIT", "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -1527,7 +1468,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -1545,7 +1485,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -1558,7 +1497,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -1580,9 +1518,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001775", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", - "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==", + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", "funding": [ { "type": "opencollective", @@ -1596,14 +1534,12 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1612,12 +1548,22 @@ "node": ">=8" } }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "^1.3.0", "async-each": "^1.0.0", @@ -1637,7 +1583,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^2.0.0" } @@ -1647,7 +1592,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1657,7 +1601,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -1669,7 +1612,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", "engines": { "node": ">=6.0" } @@ -1679,7 +1621,6 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -1695,7 +1636,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -1708,7 +1648,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -1736,7 +1675,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -1746,21 +1684,11 @@ "node": ">=6" } }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "dev": true, - "license": "MIT", "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -1773,7 +1701,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1784,14 +1711,12 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", "bin": { "color-support": "bin.js" } @@ -1800,15 +1725,13 @@ "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -1816,14 +1739,12 @@ "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" }, "node_modules/component-bind": { "version": "1.0.0", @@ -1835,8 +1756,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/component-inherit": { "version": "0.0.3", @@ -1848,15 +1768,13 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -1867,29 +1785,11 @@ "node": ">= 0.10.0" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1897,15 +1797,13 @@ "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1915,7 +1813,6 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1925,7 +1822,6 @@ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", "dev": true, - "license": "MIT", "dependencies": { "glob-parent": "^6.0.1", "normalize-path": "^3.0.0", @@ -1950,22 +1846,19 @@ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "dev": true, - "hasInstallScript": true, - "license": "MIT" + "hasInstallScript": true }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1975,44 +1868,19 @@ "node": ">= 8" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "ms": "2.0.0" } }, "node_modules/decode-uri-component": { @@ -2020,7 +1888,6 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } @@ -2029,7 +1896,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2047,7 +1913,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -2079,7 +1944,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2089,7 +1953,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -2099,7 +1962,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", "optional": true, "engines": { "node": ">=8" @@ -2109,15 +1971,13 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, - "license": "MIT", "dependencies": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -2138,7 +1998,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -2152,7 +2011,6 @@ "version": "1.8.7", "resolved": "https://registry.npmjs.org/edx-ui-toolkit/-/edx-ui-toolkit-1.8.7.tgz", "integrity": "sha512-2GF463dcfKu9u0wFY1u5fX6CUs5V3VQjcTQKt1tLzFzGoK1oGg/lRp0SYsbdcIAzCT8yQAFyrpvAQh1oGuTkiA==", - "license": "Apache-2.0", "dependencies": { "backbone": "1.6.0", "backbone.paginator": "2.0.8", @@ -2169,47 +2027,39 @@ "urijs": "1.19.11" } }, + "node_modules/edx-ui-toolkit/node_modules/backbone": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.6.0.tgz", + "integrity": "sha512-13PUjmsgw/49EowNcQvfG4gmczz1ximTMhUktj0Jfrjth0MVaTxehpU+qYYX4MxnuIuhmvBLC6/ayxuAGnOhbA==", + "dependencies": { + "underscore": ">=1.8.3" + } + }, "node_modules/edx-ui-toolkit/node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "license": "MIT" - }, - "node_modules/edx-ui-toolkit/node_modules/requirejs": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.1.22.tgz", - "integrity": "sha512-AhZqN7UrWV8R2d1LfGfznskMJNF0Vb6yStwrCn52UbktJg6y5V1I7RoGRyJtACe86d50PyQn0Iw0jYDKMvc4iA==", - "bin": { - "r.js": "bin/r.js" - }, - "engines": { - "node": ">=0.4.0" - } + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "node_modules/edx-ui-toolkit/node_modules/underscore": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", - "license": "MIT" + "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/electron-to-chromium": { "version": "1.5.302", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", - "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", - "license": "ISC" + "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", "engines": { "node": ">= 4" } @@ -2219,7 +2069,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2229,7 +2078,6 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz", "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "1.3.3", "base64id": "1.0.0", @@ -2244,7 +2092,6 @@ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.6.tgz", "integrity": "sha512-6+rInQu8xU7c0fIF6RC4SRKuHVWPt8Xq0bZYS4lMrTwmhRineOlEMsU3X0zS5mHIvCgJsmpOKEX7DhihGk7j0g==", "dev": true, - "license": "MIT", "dependencies": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", @@ -2265,7 +2112,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "dev": true, - "license": "MIT", "dependencies": { "ms": "0.7.2" } @@ -2274,15 +2120,13 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/engine.io-parser": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", "integrity": "sha512-3UyTJo+5Jbmr7rd3MosTAApK7BOIo4sjx8dJYSHa3Em5R3A9Y2s9GWu4JFJe6Px0VieJC0hKUA5NBytC+O7k2A==", "dev": true, - "license": "MIT", "dependencies": { "after": "0.8.2", "arraybuffer.slice": "0.0.6", @@ -2297,7 +2141,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "dev": true, - "license": "MIT", "dependencies": { "ms": "0.7.2" } @@ -2306,14 +2149,12 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz", - "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==", - "license": "MIT", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" @@ -2327,7 +2168,6 @@ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.2.tgz", "integrity": "sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -2343,7 +2183,6 @@ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, - "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -2355,7 +2194,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2364,7 +2202,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2372,14 +2209,12 @@ "node_modules/es-module-lexer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "license": "MIT" + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==" }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -2391,7 +2226,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", "engines": { "node": ">=6" } @@ -2400,14 +2234,12 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -2420,7 +2252,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -2432,7 +2263,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2441,7 +2271,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2455,14 +2284,12 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -2472,7 +2299,6 @@ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", "integrity": "sha512-zOOsEnAhvIxxd0esCNbYG2xerGf46niZ1egS43eV7Fu4t7VIScgPXMcMabCLaPrqkzwvwo6zZipDiX3t0ILF2w==", "dev": true, - "license": "MIT", "dependencies": { "array-slice": "^0.2.3", "array-unique": "^0.2.1", @@ -2487,7 +2313,6 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", "dev": true, - "license": "MIT", "dependencies": { "is-posix-bracket": "^0.1.0" }, @@ -2517,18 +2342,24 @@ "source-map": "0.5.x" } }, + "node_modules/exports-loader/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -2541,7 +2372,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -2554,7 +2384,6 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -2567,7 +2396,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2576,7 +2404,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -2590,8 +2417,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-uri": { "version": "3.1.0", @@ -2606,15 +2432,13 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -2624,7 +2448,6 @@ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.0.0" }, @@ -2642,7 +2465,6 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/filename-regex": { @@ -2650,7 +2472,6 @@ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2660,7 +2481,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^2.1.0", "isobject": "^2.0.0", @@ -2677,7 +2497,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -2689,15 +2508,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fill-range/node_modules/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, - "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -2705,12 +2522,23 @@ "node": ">=0.10.0" } }, + "node_modules/fill-range/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fill-range/node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } @@ -2720,7 +2548,6 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -2734,29 +2561,11 @@ "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/finalhandler/node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -2768,7 +2577,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" @@ -2780,11 +2588,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up": { + "node_modules/find-cache-dir/node_modules/find-up": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -2796,11 +2603,87 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -2816,7 +2699,6 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -2830,7 +2712,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, @@ -2846,7 +2727,6 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2856,7 +2736,6 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", "dev": true, - "license": "MIT", "dependencies": { "for-in": "^1.0.1" }, @@ -2878,7 +2757,6 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "dev": true, - "license": "MIT", "dependencies": { "map-cache": "^0.2.2" }, @@ -2890,8 +2768,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/fsevents": { "version": "1.2.13", @@ -2900,7 +2777,6 @@ "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -2917,7 +2793,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2926,7 +2801,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2935,7 +2809,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2944,7 +2817,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -2968,7 +2840,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -2987,7 +2858,6 @@ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2998,7 +2868,6 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3019,7 +2888,6 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", "dev": true, - "license": "MIT", "dependencies": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -3033,7 +2901,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^2.0.0" } @@ -3043,7 +2910,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3053,7 +2919,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -3066,7 +2931,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -3077,8 +2941,7 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globby": { "version": "6.1.0", @@ -3109,7 +2972,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3120,14 +2982,12 @@ "node_modules/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==", - "license": "ISC" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/gulp-shell": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/gulp-shell/-/gulp-shell-0.8.0.tgz", "integrity": "sha512-wHNCgmqbWkk1c6Gc2dOL5SprcoeujQdeepICwfQRo91DIylTE7a794VEE+leq3cE2YDoiS5ulvRfKVIEMazcTQ==", - "license": "MIT", "dependencies": { "chalk": "^3.0.0", "fancy-log": "^1.3.3", @@ -3145,7 +3005,6 @@ "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", "integrity": "sha512-k1Umb4/jrBWZbtL+QKSji8qWeoZ7ZTkXdnDXt1wxwBKAFM0//u96wDj43mBIqCIas8rDQMYyrBEvcS8hdGd4Sg==", "dev": true, - "license": "MIT", "dependencies": { "isarray": "0.0.1" } @@ -3154,14 +3013,12 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -3170,7 +3027,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -3182,7 +3038,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3194,7 +3049,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -3210,7 +3064,6 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, - "license": "MIT", "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -3225,7 +3078,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -3239,7 +3091,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -3252,7 +3103,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -3265,7 +3115,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -3277,7 +3126,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3294,15 +3142,13 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", @@ -3323,7 +3169,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3333,7 +3178,6 @@ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -3348,7 +3192,6 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -3366,15 +3209,13 @@ "node_modules/immutable": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", - "license": "MIT" + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==" }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, - "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -3389,90 +3230,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/imports-loader": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz", "integrity": "sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==", - "license": "MIT", "dependencies": { "loader-utils": "^1.0.2", "source-map": "^0.6.1" @@ -3481,15 +3242,6 @@ "node": ">= 4" } }, - "node_modules/imports-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -3502,7 +3254,6 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3511,15 +3262,13 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -3529,7 +3278,6 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -3541,7 +3289,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -3558,7 +3305,6 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^1.0.0" }, @@ -3570,14 +3316,12 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3590,7 +3334,6 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -3606,7 +3349,6 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -3619,7 +3361,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -3633,7 +3374,6 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -3649,7 +3389,6 @@ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3659,7 +3398,6 @@ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", "dev": true, - "license": "MIT", "dependencies": { "is-primitive": "^2.0.0" }, @@ -3672,7 +3410,6 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3682,7 +3419,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3691,7 +3427,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", @@ -3711,7 +3446,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "devOptional": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -3765,7 +3499,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -3778,7 +3511,6 @@ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3788,7 +3520,6 @@ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3797,7 +3528,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -3815,7 +3545,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -3831,7 +3560,6 @@ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3841,7 +3569,6 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -3853,15 +3580,13 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/isbinaryfile": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", "dev": true, - "license": "MIT", "dependencies": { "buffer-alloc": "^1.2.0" }, @@ -3873,14 +3598,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3890,7 +3613,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -3900,7 +3622,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -3917,7 +3638,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -3927,12 +3647,23 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -3942,22 +3673,34 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, - "license": "BSD-3-Clause", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/istanbul-reports": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -3970,13 +3713,12 @@ "version": "2.6.4", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.4.tgz", "integrity": "sha512-HUYBYi/hlSnCIr8QH9xuDBJUAzSHS0El3HxTomovIQcNxtbNhoOtKwpEZaB/jq3sfW/qyhqwW/VDUtoB2RZ4Tg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/jasmine-jquery": { "version": "2.1.1", "resolved": "git+https://git@github.com/velesin/jasmine-jquery.git#ebad463d592d3fea00c69f26ea18a930e09c7b58", - "integrity": "sha512-sWMb40chzlUOKrHZCGpZoUrVnGm6khfL/fAMKO8vLtUR8yOmWIVVN7MRmep3/DSFhy1Hilon6qAH+UbLZgGG0w==", + "integrity": "sha512-P9aZDwDEAVgAbdHG/ViapRzAUJ6zBSq/4I1lJFluIbrld6Sv6LI+HT2J4dgWqtfaCgIyDnHBHSHiJ/anter7wQ==", "dev": true, "license": "MIT" }, @@ -3984,7 +3726,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -3994,27 +3735,11 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/jquery": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", "integrity": "sha512-lBHj60ezci2u1v2FqnZIraShGgEXq35qCzMv4lITyHGppTnA13rwR0MgwyNJh9TnDs3aXUvd1xjAotfraMHX/Q==", - "deprecated": "This version is deprecated. Please upgrade to the latest version or find support at https://www.herodevs.com/support/jquery-nes.", - "license": "MIT" + "deprecated": "This version is deprecated. Please upgrade to the latest version or find support at https://www.herodevs.com/support/jquery-nes." }, "node_modules/jquery-ui": { "version": "1.14.2", @@ -4028,14 +3753,12 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -4046,14 +3769,12 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json3": { "version": "3.3.2", @@ -4066,7 +3787,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4132,7 +3852,6 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-0.13.22.tgz", "integrity": "sha512-A9/7e/IzHUkTcfjnTy5Wzo2P5wPuf7+QZh1JzNdTpYA0AN/vSrxfFjPKtKC3jRYJFZMJ7S1I9L2LItaJS1XMSg==", "dev": true, - "license": "MIT", "dependencies": { "batch": "^0.5.3", "bluebird": "^2.9.27", @@ -4191,7 +3910,6 @@ "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", "dev": true, - "license": "MIT", "dependencies": { "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-instrument": "^5.1.0", @@ -4209,18 +3927,31 @@ "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.3.tgz", "integrity": "sha512-LMM2bseebLbYjODBOVt7TCPP9OI2vZIXCavIXhkO9m+10Uj5l7u/SKoeRmYx8FYHTVGZSpk6peX+3BMHC1WwNw==", "dev": true, - "license": "MIT", "dependencies": { "is-wsl": "^2.2.0", "which": "^3.0.0" } }, + "node_modules/karma-firefox-launcher/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/karma-jasmine": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-0.3.8.tgz", "integrity": "sha512-EDNIM4f9FV17XXoF+Rzfw+6uPajd7tOAfEFwe7PIyNVQrM3l1V5OJj2167JDY9KmLDIK/MQZX7tKkK1jVYlfmw==", "dev": true, - "license": "MIT", "peerDependencies": { "jasmine-core": "*" } @@ -4266,12 +3997,17 @@ "karma": ">=0.9" } }, + "node_modules/karma-regex-preprocessor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-regex-preprocessor/-/karma-regex-preprocessor-1.0.1.tgz", + "integrity": "sha512-A+CTjK8VQZ1qZFnDMsuB7//2qWorOVuE2fnnZ2iDhv0H5Ug5Lv0I2FmolPV9KaTgJK1ipXHnSxVrG282fnoe7g==", + "dev": true + }, "node_modules/karma-requirejs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz", "integrity": "sha512-MHTOYKdwwJBkvYid0TaYvBzOnFH3TDtzo6ie5E4o9SaUSXXsfMRLa/whUz6efVIgTxj1xnKYasNn/XwEgJeB/Q==", "dev": true, - "license": "MIT", "peerDependencies": { "karma": ">=0.9", "requirejs": "^2.1.0" @@ -4281,6 +4017,7 @@ "version": "0.0.4-openedx.0", "resolved": "git+ssh://git@github.com/openedx/karma-selenium-webdriver-launcher.git#79cfdc5037eb8585dd3e584875e4343febb6d61f", "dev": true, + "license": "MIT", "dependencies": { "q": "~0.9.6" }, @@ -4294,7 +4031,6 @@ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz", "integrity": "sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.10" } @@ -4304,7 +4040,6 @@ "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.20.tgz", "integrity": "sha512-pl+KmLNwnu802F/q9cZx5n20FuxA0ebwM3uMuy4Qh+GGfviy4EFK8I5Bl2cWogSRBUC2Fhg5oOsUFVlv/j5tuA==", "dev": true, - "license": "MIT", "dependencies": { "colors": "~0.6.0" }, @@ -4377,15 +4112,19 @@ "lodash": "^4.17.15" } }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/karma/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } @@ -4404,7 +4143,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "license": "MIT", "engines": { "node": ">=6.11.5" }, @@ -4417,7 +4155,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -4431,7 +4168,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -4443,45 +4179,38 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { - "p-locate": "^6.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/lodash": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "license": "MIT" + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" }, "node_modules/lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "deprecated": "This package is deprecated. Use https://socket.dev/npm/package/eta instead.", - "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" @@ -4491,7 +4220,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0" } @@ -4502,7 +4230,6 @@ "integrity": "sha512-Cd+klbx7lkiaamEId9/0odHxv/PFHDz2E12kEfd6/CzIOZD084DzysASR/Dot4i1dYPBQKC3r2XIER+dfbLOmw==", "deprecated": "0.x is no longer supported. Please upgrade to 6.x or higher.", "dev": true, - "license": "Apache-2.0", "dependencies": { "readable-stream": "~1.0.2", "semver": "~4.3.3" @@ -4516,7 +4243,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", "integrity": "sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -4524,14 +4250,12 @@ "node_modules/lolex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha512-YYp8cqz7/8eruZ15L1mzcPkvLYxipfdsWIDESvNdNmQP9o7TsDitRhNuV2xb7aFu2ofZngao1jiVrVZ842x4BQ==", - "license": "BSD-3-Clause" + "integrity": "sha512-YYp8cqz7/8eruZ15L1mzcPkvLYxipfdsWIDESvNdNmQP9o7TsDitRhNuV2xb7aFu2ofZngao1jiVrVZ842x4BQ==" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -4541,7 +4265,6 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -4557,7 +4280,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4570,7 +4292,6 @@ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4580,7 +4301,6 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, - "license": "MIT", "dependencies": { "object-visit": "^1.0.0" }, @@ -4592,7 +4312,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4601,15 +4320,13 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4617,15 +4334,13 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", "dev": true, - "license": "MIT", "dependencies": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -4650,7 +4365,6 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", "dev": true, - "license": "MIT", "dependencies": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -4665,7 +4379,6 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^2.1.0" }, @@ -4678,7 +4391,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4688,7 +4400,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -4696,12 +4407,23 @@ "node": ">=0.10.0" } }, + "node_modules/micromatch/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/micromatch/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, - "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -4714,7 +4436,6 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -4726,7 +4447,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4735,7 +4455,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -4747,7 +4466,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz", "integrity": "sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g==", - "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -4764,11 +4482,10 @@ } }, "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4780,15 +4497,13 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, - "license": "MIT", "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -4802,7 +4517,6 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -4814,7 +4528,6 @@ "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", "engines": { "node": "*" } @@ -4823,7 +4536,6 @@ "version": "0.5.46", "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", - "license": "MIT", "dependencies": { "moment": "^2.29.4" }, @@ -4832,17 +4544,16 @@ } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/nan": { "version": "2.25.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/nanomatch": { @@ -4850,7 +4561,6 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, - "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4873,7 +4583,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4883,17 +4592,6 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4903,7 +4601,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha512-qTxkr1RoLw5Pz+1+PTJ/66hWuyi2LEOeOuIDJDlx6JF8x75bmD5C7qXTg2UlX5W9rLfkqKP+r8q6Vy6NWdWrbw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4911,28 +4608,24 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "license": "MIT", "optional": true }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "license": "MIT" + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4942,7 +4635,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", "integrity": "sha512-Lbc7GfN7XFaK30bzUN3cDYLOkT0dH05S0ax1QikylHUD9+Z9PRF3G1iYwX3kcz+6AlzTFGkUgMxz6l3aUwbwTA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4958,7 +4650,6 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, - "license": "MIT", "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -4973,7 +4664,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -4986,7 +4676,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -4995,12 +4684,23 @@ "node": ">= 0.4" } }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5013,7 +4713,6 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.0" }, @@ -5026,7 +4725,6 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", "dev": true, - "license": "MIT", "dependencies": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -5040,7 +4738,6 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -5053,7 +4750,6 @@ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -5066,7 +4762,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } @@ -5076,7 +4771,6 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", "dev": true, - "license": "MIT/X11", "dependencies": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -5096,39 +4790,35 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { - "yocto-queue": "^1.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { - "p-limit": "^4.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/p-map": { @@ -5145,7 +4835,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5162,7 +4851,6 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", "dev": true, - "license": "MIT", "dependencies": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -5178,7 +4866,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5188,7 +4875,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -5200,7 +4886,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "license": "MIT", "engines": { "node": ">= 0.10" } @@ -5210,7 +4895,6 @@ "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", "integrity": "sha512-v38ZjVbinlZ2r1Rz06WUZEnGoSRcEGX+roMsiWjHeAe23s2qlQUyfmsPQZvh7d8l0E8AZzTIO/RkUr00LfkSiA==", "dev": true, - "license": "MIT", "dependencies": { "better-assert": "~1.0.0" } @@ -5220,7 +4904,6 @@ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha512-B3Nrjw2aL7aI4TDujOzfA4NsEc4u1lVcIRE0xesutH8kjeWF70uk+W5cBlIQx04zUH9NTBvuN36Y9xLRPK6Jjw==", "dev": true, - "license": "MIT", "dependencies": { "better-assert": "~1.0.0" } @@ -5230,7 +4913,6 @@ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha512-ijhdxJu6l5Ru12jF0JvzXVPvsC+VibqeaExlNoMhWN6VQ79PGjkmc7oA4W1lp00sFkNyj0fx6ivPLdV51/UMog==", "dev": true, - "license": "MIT", "dependencies": { "better-assert": "~1.0.0" } @@ -5240,7 +4922,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5250,18 +4931,17 @@ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" } }, "node_modules/path-is-absolute": { @@ -5269,7 +4949,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5285,7 +4964,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -5294,21 +4972,18 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -5347,25 +5022,21 @@ } }, "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "dependencies": { - "find-up": "^6.3.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/plugin-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "license": "MIT", "dependencies": { "ansi-colors": "^1.0.1", "arr-diff": "^4.0.0", @@ -5380,7 +5051,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5401,7 +5071,6 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5410,7 +5079,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5420,7 +5088,6 @@ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5433,22 +5100,19 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/q": { "version": "0.9.7", @@ -5466,7 +5130,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" }, @@ -5482,7 +5145,6 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -5497,17 +5159,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/randomatic/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5516,7 +5167,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -5526,7 +5176,6 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", @@ -5542,7 +5191,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -5555,7 +5203,6 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -5570,7 +5217,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5580,7 +5226,6 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5590,7 +5235,6 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -5612,7 +5256,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5620,22 +5263,11 @@ "node": ">=0.10.0" } }, - "node_modules/readdirp/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, "node_modules/readdirp/node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -5654,7 +5286,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -5667,7 +5298,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5680,7 +5310,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -5694,7 +5323,6 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, - "license": "MIT", "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -5714,7 +5342,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -5727,7 +5354,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5740,7 +5366,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -5756,7 +5381,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5769,7 +5393,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -5782,7 +5405,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -5794,25 +5416,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/readdirp/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "dev": true }, "node_modules/readdirp/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -5832,19 +5442,11 @@ "node": ">=0.10.0" } }, - "node_modules/readdirp/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/readdirp/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5860,7 +5462,6 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } @@ -5869,15 +5470,13 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/readdirp/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -5887,7 +5486,6 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -5900,7 +5498,6 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, - "license": "MIT", "dependencies": { "is-equal-shallow": "^0.1.3" }, @@ -5913,7 +5510,6 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -5926,15 +5522,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5952,18 +5546,15 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/requirejs": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.8.tgz", - "integrity": "sha512-7/cTSLOdYkNBNJcDMWf+luFvMriVm7eYxp4BcFCsAX0wF421Vyce5SXP17c+Jd5otXKGNehIonFlyQXSowL6Mw==", - "license": "MIT", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.1.22.tgz", + "integrity": "sha512-AhZqN7UrWV8R2d1LfGfznskMJNF0Vb6yStwrCn52UbktJg6y5V1I7RoGRyJtACe86d50PyQn0Iw0jYDKMvc4iA==", "bin": { - "r_js": "bin/r.js", "r.js": "bin/r.js" }, "engines": { @@ -5973,22 +5564,19 @@ "node_modules/requirejs-text": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/requirejs-text/-/requirejs-text-2.0.16.tgz", - "integrity": "sha512-XrzjeTb1pwzIWmkz8qnUiM20gENgiwB+66IciNuziwlaPAJsYQsQPSYyQ1kD4tGKGZxTisIfDbOHk02DpI/76Q==", - "license": "MIT" + "integrity": "sha512-XrzjeTb1pwzIWmkz8qnUiM20gENgiwB+66IciNuziwlaPAJsYQsQPSYyQ1kD4tGKGZxTisIfDbOHk02DpI/76Q==" }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", @@ -6009,7 +5597,6 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -6022,7 +5609,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6032,15 +5618,13 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12" } @@ -6051,7 +5635,6 @@ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6076,15 +5659,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, - "license": "MIT", "dependencies": { "ret": "~0.1.10" } @@ -6093,7 +5674,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -6110,8 +5690,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/samsam": { "version": "1.1.2", @@ -6123,7 +5702,6 @@ "version": "1.97.3", "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", - "license": "MIT", "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -6143,7 +5721,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -6158,7 +5735,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "license": "MIT", "engines": { "node": ">= 14.18.0" }, @@ -6171,7 +5747,6 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -6248,7 +5823,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -6257,7 +5831,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -6266,7 +5839,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6284,7 +5856,6 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -6300,7 +5871,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6319,14 +5889,12 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -6334,21 +5902,11 @@ "node": ">=8" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6361,7 +5919,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6371,7 +5928,6 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -6391,7 +5947,6 @@ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -6408,7 +5963,6 @@ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -6427,7 +5981,6 @@ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -6447,7 +6000,6 @@ "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", "integrity": "sha512-M9rtyQxKfcTTdB64rpPSRaTzOvunb+HHPv/3PxvNPrEDnFSny95Pi6/3VoD471ody0ay0IHyzT3BErfcLXj6NA==", "deprecated": "16.1.1", - "license": "BSD-3-Clause", "dependencies": { "formatio": "1.1.1", "lolex": "1.3.2", @@ -6463,7 +6015,6 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, - "license": "MIT", "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -6483,7 +6034,6 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, - "license": "MIT", "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -6498,7 +6048,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -6511,7 +6060,6 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.2.0" }, @@ -6519,14 +6067,16 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/snapdragon/node_modules/define-property": { @@ -6534,7 +6084,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -6547,7 +6096,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6560,7 +6108,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -6569,19 +6116,20 @@ "node": ">= 0.4" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.10.0" + } }, "node_modules/socket.io": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", "integrity": "sha512-rKMY/U7gBmbHjwrljcPHy+uEXZ5973WvO2DrooL643w1R24SZVzsmhvNmJFjYVhAL4y7wrZJJS/znUfp0VWfKw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.3.3", "engine.io": "~1.8.4", @@ -6597,7 +6145,6 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", "integrity": "sha512-zmYvlFJay9skt4yk1MffE9p93HKvQtyy0BLZ5dRM73bOXFJXNZWq8qZVdY456sLaxdK6fHGiZ7glxzqvzwGzkw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.3.3", "socket.io-parser": "2.3.1" @@ -6608,7 +6155,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "dev": true, - "license": "MIT", "dependencies": { "ms": "0.7.2" } @@ -6617,15 +6163,13 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/socket.io-client": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", "integrity": "sha512-vW9xr9XyTJejFS//7GNZmLTLkUSAcvOSxRXXhrojV+7wboTFB8CuvK1UBCW3NiB2kqyi0h9cTeyD7dXjdUd9jQ==", "dev": true, - "license": "MIT", "dependencies": { "backo2": "1.0.2", "component-bind": "1.0.0", @@ -6645,7 +6189,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "dev": true, - "license": "MIT", "dependencies": { "ms": "0.7.2" } @@ -6654,15 +6197,13 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/socket.io-parser": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", "integrity": "sha512-j6l4g/+yWQjmy1yByzg1DPFL4vxQw+NwCJatIxni/AE1wfm17FBtIKSWU4Ay+onrJwDxmC4eK4QS/04ZsqYwZQ==", "dev": true, - "license": "MIT", "dependencies": { "component-emitter": "1.1.2", "debug": "2.2.0", @@ -6681,7 +6222,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", "dev": true, - "license": "MIT", "dependencies": { "ms": "0.7.1" } @@ -6697,7 +6237,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha512-dCHp4G+F11zb+RtEu7BE2U8R32AYmM/4bljQfut8LipH3PdwsVBVGh083MXvtKkB7HSQUzSwiXz53c4mzJvYfw==", "dev": true, - "license": "MIT", "dependencies": { "ms": "0.7.2" } @@ -6706,8 +6245,7 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/source-list-map": { "version": "2.0.1", @@ -6716,10 +6254,9 @@ "dev": true }, "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } @@ -6728,7 +6265,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -6739,7 +6275,6 @@ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, - "license": "MIT", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -6752,35 +6287,23 @@ "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==", - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -6793,7 +6316,6 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, - "license": "MIT", "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -6807,7 +6329,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -6820,7 +6341,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -6834,7 +6354,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6843,15 +6362,13 @@ "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/string-replace-loader": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.3.0.tgz", "integrity": "sha512-AZ3y7ktSHhd/Ebipczkp6vdfp01d2kQVwFujCGAgmogTB8t4dRhbsRGDKnyZAYqBbIA9QW7+D/IsACVJOOpcBg==", "dev": true, - "license": "MIT", "dependencies": { "schema-utils": "^4" }, @@ -6863,15 +6380,17 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -6879,7 +6398,6 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6891,7 +6409,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "license": "MIT", "engines": { "node": ">=6" }, @@ -6904,7 +6421,6 @@ "version": "5.46.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", - "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -6922,7 +6438,6 @@ "version": "5.3.16", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -6956,7 +6471,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -6966,7 +6480,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6980,7 +6493,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -6989,7 +6501,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6999,7 +6510,6 @@ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, - "license": "MIT", "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -7016,7 +6526,6 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -7035,7 +6544,6 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -7043,12 +6551,23 @@ "node": ">=0.10.0" } }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, - "license": "MIT", "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -7064,7 +6583,6 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -7078,7 +6596,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -7086,12 +6603,23 @@ "node": ">=0.10.0" } }, + "node_modules/to-regex-range/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range/node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } @@ -7101,7 +6629,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6" } @@ -7109,15 +6636,13 @@ "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -7130,20 +6655,17 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", "integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/underscore": { "version": "1.13.8", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", - "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", - "license": "MIT" + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==" }, "node_modules/undici-types": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "license": "MIT" + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==" }, "node_modules/unidragger": { "version": "3.0.1", @@ -7158,7 +6680,6 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, - "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -7174,7 +6695,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7184,7 +6704,6 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, - "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -7198,7 +6717,6 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, - "license": "MIT", "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -7213,7 +6731,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, - "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -7226,7 +6743,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7235,8 +6751,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/update-browserslist-db": { "version": "1.2.3", @@ -7256,7 +6771,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -7271,23 +6785,20 @@ "node_modules/urijs": { "version": "1.19.11", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", - "license": "MIT" + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" }, "node_modules/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7297,7 +6808,6 @@ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, - "license": "MIT", "dependencies": { "lru-cache": "4.1.x", "tmp": "0.0.x" @@ -7308,7 +6818,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -7318,14 +6827,12 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -7337,15 +6844,13 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -7359,7 +6864,6 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7368,7 +6872,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -7378,10 +6881,9 @@ } }, "node_modules/webpack": { - "version": "5.105.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.3.tgz", - "integrity": "sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg==", - "license": "MIT", + "version": "5.105.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", + "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -7389,7 +6891,7 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.16.0", + "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", @@ -7407,7 +6909,7 @@ "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", - "webpack-sources": "^3.3.4" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -7430,7 +6932,6 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, - "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -7476,7 +6977,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } @@ -7497,15 +6997,6 @@ "webpack": "^5.75.0" } }, - "node_modules/webpack-manifest-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", @@ -7524,7 +7015,6 @@ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, - "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -7538,32 +7028,29 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", - "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "node-which": "bin/which.js" + "node-which": "bin/node-which" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, "node_modules/which-typed-array": { "version": "1.1.20", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -7583,15 +7070,13 @@ "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "license": "MIT" + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, "node_modules/wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -7600,15 +7085,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/ws": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "dev": true, - "license": "MIT", "dependencies": { "options": ">=0.0.5", "ultron": "1.0.x" @@ -7618,8 +7101,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", "integrity": "sha512-qfR6ovmRRMxNHgUNYI9LRdVofApe/eYrv4ggNOvvCP+pPdEo9Ym93QN4jUceGD6PignBbp2zAzgoE7GibAdq2A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/xmlbuilder": { "version": "12.0.0", @@ -7642,21 +7124,18 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/yocto-queue": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", - "license": "MIT", "engines": { "node": ">=12.20" }, @@ -7664,8 +7143,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "xblocks_contrib/discussion/assets": { + "devDependencies": { + "append-prepend-loader": "^1.0.0", + "backbone": "^1", + "backbone-associations": "^0.6", + "backbone.paginator": "^2", + "copy-webpack-plugin": "13.0.1", + "draggabilly": "^3.0.0", + "edx-ui-toolkit": "^1", + "imports-loader": "^0.8", + "jasmine-core": "2.6.4", + "jasmine-jquery": "git+https://git@github.com/velesin/jasmine-jquery.git#ebad463d592d3fea00c69f26ea18a930e09c7b58", + "jquery": "^2", + "karma": "^0.13", + "karma-chrome-launcher": "^3", + "karma-coverage": "^2", + "karma-firefox-launcher": "^2", + "karma-jasmine": "^0.3", + "karma-regex-preprocessor": "^1.0.1", + "karma-sourcemap-loader": "^0.4.0", + "karma-spec-reporter": "0.0.20", + "underscore": "^1", + "webpack": "^5", + "webpack-cli": "^5" + } + }, "xblocks_contrib/problem/assets": { - "name": "problem-xblock", "dependencies": { "babel-loader": "^9", "edx-ui-toolkit": "^1", @@ -7691,7 +7195,6 @@ } }, "xblocks_contrib/video/assets": { - "name": "video-xblock", "version": "1.0.0", "dependencies": { "draggabilly": "^3", diff --git a/xblocks_contrib/discussion/assets/jasmine.common.conf.js b/xblocks_contrib/discussion/assets/jasmine.common.conf.js new file mode 100644 index 00000000..398f544b --- /dev/null +++ b/xblocks_contrib/discussion/assets/jasmine.common.conf.js @@ -0,0 +1,12 @@ +/* eslint-env node */ + +'use strict'; + +// By default, fixtures are loaded from spec/javascripts/fixtures but in karma everything gets served from /base +jasmine.getFixtures().fixturesPath = '/base/static/spec/fixtures/'; + +// https://github.com/edx/js-test-tool/blob/master/js_test_tool/templates/jasmine_test_runner.html#L10 +// Stub out modal dialog alerts, which will prevent +// us from accessing the test results in the DOM +window.confirm = function() { return true; }; +window.alert = function() { }; diff --git a/xblocks_contrib/discussion/assets/karma.conf.js b/xblocks_contrib/discussion/assets/karma.conf.js new file mode 100644 index 00000000..af0577b3 --- /dev/null +++ b/xblocks_contrib/discussion/assets/karma.conf.js @@ -0,0 +1,112 @@ +/* eslint-env node */ +'use strict'; + +const path = require('path'); + +const discussionRoot = __dirname; +const uiToolkitRoot = path.dirname(require.resolve('edx-ui-toolkit/package.json')); + +module.exports = function (config) { + config.set({ + basePath: discussionRoot, + + frameworks: ['jasmine'], + + files: [ + { pattern: require.resolve('jquery/dist/jquery.js'), included: true }, + { pattern: require.resolve('jasmine-jquery/lib/jasmine-jquery.js'), included: true }, + { pattern: require.resolve('underscore/underscore.js'), included: true }, + { pattern: require.resolve('backbone/backbone.js'), included: true }, + { pattern: path.join(uiToolkitRoot, 'src/js/utils/global-loader.js'), included: true }, + { pattern: path.join(uiToolkitRoot, 'src/js/utils/string-utils.js'), included: true }, + { pattern: path.join(uiToolkitRoot, 'src/js/utils/html-utils.js'), included: true }, + { pattern: 'static/spec/spec_helpers/i18n.js', included: true }, + { pattern: 'jasmine.common.conf.js', included: true }, + { pattern: require.resolve('draggabilly/dist/draggabilly.pkgd.js'), included: true }, + { pattern: 'static/js/vendor/URI.min.js', included: true }, + { pattern: 'static/js/vendor/jquery.leanModal.js', included: true }, + { pattern: 'static/js/vendor/Markdown.Converter.js', included: true }, + { pattern: 'static/js/vendor/Markdown.Sanitizer.js', included: true }, + { pattern: 'static/js/vendor/Markdown.Editor.js', included: true }, + { pattern: 'static/js/vendor/jquery.ajaxfileupload.js', included: true }, + { pattern: 'static/js/vendor/jquery.timeago.js', included: true }, + { pattern: 'static/js/vendor/jquery.truncate.js', included: true }, + { pattern: 'static/js/vendor/split.js', included: true }, + { pattern: 'static/js/mathjax_accessible.js', included: true }, + { pattern: 'static/js/mathjax_delay_renderer.js', included: true }, + { pattern: 'static/js/common/utils.js', included: true }, + { pattern: 'static/js/common/models/*.js', included: true }, + { pattern: 'static/js/common/content.js', included: true }, + { pattern: 'static/js/common/discussion.js', included: true }, + { pattern: 'static/js/common/mathjax_include.js', included: true }, + { pattern: 'static/js/customwmd.js', included: true }, + { pattern: 'static/js/common/views/*.js', included: true }, + { pattern: 'static/spec/spec_helpers/discussion_spec_helper.js', included: true }, + { pattern: 'static/spec/view/discussion_view_spec_helper.js', included: true }, + { pattern: 'static/spec/fixtures/**/*', included: false, served: true }, + { pattern: 'static/spec/**/*_spec.js', included: true } + ], + + exclude: [ + '**/public/**' + ], + + preprocessors: { + 'static/js/**/*.js': ['sourcemap'], + 'static/spec/view/discussion_thread_view_spec.js': ['regex', 'sourcemap'], + 'static/spec/**/*.js': ['sourcemap'] + }, + + regexPreprocessor: { + rules: [ + { + fileName: 'discussion_thread_view_spec.js', + replacement: [ + { replace: /return function\(\) \{\s*/g, with: '' }, + { replace: / \};\s*\n \}\);\s*\n describe\('thread responses'/g, with: ' });\n describe(\'thread responses\'' } + ] + } + ] + }, + + plugins: [ + 'karma-regex-preprocessor', + 'karma-jasmine', + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-sourcemap-loader', + 'karma-coverage', + require('karma-spec-reporter') + ], + + reporters: ['spec', 'coverage'], + + coverageReporter: { + dir: 'coverage/', + reporters: [ + { type: 'html', subdir: 'report-html' }, + { type: 'lcov', subdir: 'report-lcov' } + ] + }, + + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: false, + browsers: ['FirefoxNoUpdates'], + + customLaunchers: { + FirefoxNoUpdates: { + base: 'Firefox', + prefs: { + 'app.update.auto': false, + 'app.update.enabled': false + } + } + }, + + singleRun: true, + concurrency: Infinity, + client: { captureConsole: true } + }); +}; diff --git a/xblocks_contrib/discussion/assets/package.json b/xblocks_contrib/discussion/assets/package.json new file mode 100644 index 00000000..4a9a8d80 --- /dev/null +++ b/xblocks_contrib/discussion/assets/package.json @@ -0,0 +1,33 @@ +{ + "private": true, + "scripts": { + "build": "webpack --config webpack.prod.config.js", + "build-dev": "webpack --config webpack.dev.config.js", + "test": "karma start karma.conf.js", + "test-ci": "xvfb-run --auto-servernum karma start karma.conf.js" + }, + "devDependencies": { + "backbone": "^1", + "backbone-associations": "^0.6", + "backbone.paginator": "^2", + "append-prepend-loader": "^1.0.0", + "copy-webpack-plugin": "13.0.1", + "imports-loader": "^0.8", + "webpack": "^5", + "webpack-cli": "^5", + "draggabilly": "^3.0.0", + "edx-ui-toolkit": "^1", + "jasmine-core": "2.6.4", + "jasmine-jquery": "git+https://git@github.com/velesin/jasmine-jquery.git#ebad463d592d3fea00c69f26ea18a930e09c7b58", + "jquery": "^2", + "karma": "^0.13", + "karma-chrome-launcher": "^3", + "karma-coverage": "^2", + "karma-firefox-launcher": "^2", + "karma-jasmine": "^0.3", + "karma-regex-preprocessor": "^1.0.1", + "karma-sourcemap-loader": "^0.4.0", + "karma-spec-reporter": "0.0.20", + "underscore": "^1" + } +} diff --git a/xblocks_contrib/discussion/static/css/inline-discussion-rtl.css b/xblocks_contrib/discussion/assets/static/css/inline-discussion-rtl.css similarity index 100% rename from xblocks_contrib/discussion/static/css/inline-discussion-rtl.css rename to xblocks_contrib/discussion/assets/static/css/inline-discussion-rtl.css diff --git a/xblocks_contrib/discussion/static/css/inline-discussion.css b/xblocks_contrib/discussion/assets/static/css/inline-discussion.css similarity index 100% rename from xblocks_contrib/discussion/static/css/inline-discussion.css rename to xblocks_contrib/discussion/assets/static/css/inline-discussion.css diff --git a/xblocks_contrib/discussion/static/js/common/content.js b/xblocks_contrib/discussion/assets/static/js/common/content.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/content.js rename to xblocks_contrib/discussion/assets/static/js/common/content.js diff --git a/xblocks_contrib/discussion/static/js/common/discussion.js b/xblocks_contrib/discussion/assets/static/js/common/discussion.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/discussion.js rename to xblocks_contrib/discussion/assets/static/js/common/discussion.js diff --git a/xblocks_contrib/discussion/static/js/common/mathjax_include.js b/xblocks_contrib/discussion/assets/static/js/common/mathjax_include.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/mathjax_include.js rename to xblocks_contrib/discussion/assets/static/js/common/mathjax_include.js diff --git a/xblocks_contrib/discussion/static/js/common/models/discussion_course_settings.js b/xblocks_contrib/discussion/assets/static/js/common/models/discussion_course_settings.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/models/discussion_course_settings.js rename to xblocks_contrib/discussion/assets/static/js/common/models/discussion_course_settings.js diff --git a/xblocks_contrib/discussion/static/js/common/models/discussion_user.js b/xblocks_contrib/discussion/assets/static/js/common/models/discussion_user.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/models/discussion_user.js rename to xblocks_contrib/discussion/assets/static/js/common/models/discussion_user.js diff --git a/xblocks_contrib/discussion/static/js/common/utils.js b/xblocks_contrib/discussion/assets/static/js/common/utils.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/utils.js rename to xblocks_contrib/discussion/assets/static/js/common/utils.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_content_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_content_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_content_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_content_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_inline_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_inline_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_inline_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_inline_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_thread_edit_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_edit_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_thread_edit_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_edit_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_thread_list_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_list_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_thread_list_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_list_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_thread_profile_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_profile_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_thread_profile_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_profile_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_thread_show_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_show_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_thread_show_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_show_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_thread_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_thread_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_thread_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/discussion_topic_menu_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/discussion_topic_menu_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/discussion_topic_menu_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/discussion_topic_menu_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/new_post_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/new_post_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/new_post_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/new_post_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/response_comment_edit_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/response_comment_edit_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/response_comment_edit_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/response_comment_edit_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/response_comment_show_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/response_comment_show_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/response_comment_show_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/response_comment_show_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/response_comment_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/response_comment_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/response_comment_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/response_comment_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/thread_response_edit_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/thread_response_edit_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/thread_response_edit_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/thread_response_edit_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/thread_response_show_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/thread_response_show_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/thread_response_show_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/thread_response_show_view.js diff --git a/xblocks_contrib/discussion/static/js/common/views/thread_response_view.js b/xblocks_contrib/discussion/assets/static/js/common/views/thread_response_view.js similarity index 100% rename from xblocks_contrib/discussion/static/js/common/views/thread_response_view.js rename to xblocks_contrib/discussion/assets/static/js/common/views/thread_response_view.js diff --git a/xblocks_contrib/discussion/static/js/customwmd.js b/xblocks_contrib/discussion/assets/static/js/customwmd.js similarity index 100% rename from xblocks_contrib/discussion/static/js/customwmd.js rename to xblocks_contrib/discussion/assets/static/js/customwmd.js diff --git a/xblocks_contrib/discussion/assets/static/js/discussion_main.js b/xblocks_contrib/discussion/assets/static/js/discussion_main.js new file mode 100644 index 00000000..41ab4ba2 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/js/discussion_main.js @@ -0,0 +1,40 @@ +/* + Webpack entry: imports all discussion JS in dependency order. + */ + +// Vendor +import './vendor/Markdown.Converter.js'; +import './vendor/Markdown.Sanitizer.js'; +import './vendor/Markdown.Editor.js'; +import './vendor/jquery.ajaxfileupload.js'; +import './vendor/jquery.timeago.js'; +import './vendor/jquery.timeago.locale.js'; +import './vendor/jquery.truncate.js'; +import './vendor/split.js'; +// MathJax +import './mathjax_accessible.js'; +import './mathjax_delay_renderer.js'; +// Core +import './common/utils.js'; +import './common/models/discussion_course_settings.js'; +import './common/models/discussion_user.js'; +import './common/content.js'; +import './common/discussion.js'; +import './common/mathjax_include.js'; +import './customwmd.js'; +// Views +import './common/views/discussion_content_view.js'; +import './common/views/discussion_inline_view.js'; +import './common/views/discussion_thread_edit_view.js'; +import './common/views/discussion_thread_list_view.js'; +import './common/views/discussion_thread_profile_view.js'; +import './common/views/discussion_thread_show_view.js'; +import './common/views/discussion_thread_view.js'; +import './common/views/discussion_topic_menu_view.js'; +import './common/views/new_post_view.js'; +import './common/views/response_comment_edit_view.js'; +import './common/views/response_comment_show_view.js'; +import './common/views/response_comment_view.js'; +import './common/views/thread_response_edit_view.js'; +import './common/views/thread_response_show_view.js'; +import './common/views/thread_response_view.js'; diff --git a/xblocks_contrib/discussion/static/js/mathjax_accessible.js b/xblocks_contrib/discussion/assets/static/js/mathjax_accessible.js similarity index 100% rename from xblocks_contrib/discussion/static/js/mathjax_accessible.js rename to xblocks_contrib/discussion/assets/static/js/mathjax_accessible.js diff --git a/xblocks_contrib/discussion/static/js/mathjax_delay_renderer.js b/xblocks_contrib/discussion/assets/static/js/mathjax_delay_renderer.js similarity index 100% rename from xblocks_contrib/discussion/static/js/mathjax_delay_renderer.js rename to xblocks_contrib/discussion/assets/static/js/mathjax_delay_renderer.js diff --git a/xblocks_contrib/discussion/static/js/vendor/Markdown.Converter.js b/xblocks_contrib/discussion/assets/static/js/vendor/Markdown.Converter.js similarity index 100% rename from xblocks_contrib/discussion/static/js/vendor/Markdown.Converter.js rename to xblocks_contrib/discussion/assets/static/js/vendor/Markdown.Converter.js diff --git a/xblocks_contrib/discussion/static/js/vendor/Markdown.Editor.js b/xblocks_contrib/discussion/assets/static/js/vendor/Markdown.Editor.js similarity index 100% rename from xblocks_contrib/discussion/static/js/vendor/Markdown.Editor.js rename to xblocks_contrib/discussion/assets/static/js/vendor/Markdown.Editor.js diff --git a/xblocks_contrib/discussion/static/js/vendor/Markdown.Sanitizer.js b/xblocks_contrib/discussion/assets/static/js/vendor/Markdown.Sanitizer.js similarity index 100% rename from xblocks_contrib/discussion/static/js/vendor/Markdown.Sanitizer.js rename to xblocks_contrib/discussion/assets/static/js/vendor/Markdown.Sanitizer.js diff --git a/xblocks_contrib/discussion/assets/static/js/vendor/URI.min.js b/xblocks_contrib/discussion/assets/static/js/vendor/URI.min.js new file mode 100644 index 00000000..1def2f91 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/js/vendor/URI.min.js @@ -0,0 +1,47 @@ +/*! http://mths.be/punycode v1.2.3 by @mathias */ + +/*! + * URI.js - Mutating URLs + * IPv6 Support + * + * Version: 1.11.2 + * + * Author: Rodney Rehm + * Web: http://medialize.github.com/URI.js/ + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * GPL v3 http://opensource.org/licenses/GPL-3.0 + * + */ + +/*! + * URI.js - Mutating URLs + * Second Level Domain (SLD) Support + * + * Version: 1.11.2 + * + * Author: Rodney Rehm + * Web: http://medialize.github.com/URI.js/ + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * GPL v3 http://opensource.org/licenses/GPL-3.0 + * + */ + +/*! + * URI.js - Mutating URLs + * + * Version: 1.11.2 + * + * Author: Rodney Rehm + * Web: http://medialize.github.com/URI.js/ + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * GPL v3 http://opensource.org/licenses/GPL-3.0 + * + */ + +(function(e){function S(e){throw RangeError(g[e])}function x(e,t){var n=e.length;while(n--)e[n]=t(e[n]);return e}function T(e,t){return x(e.split(m),t).join(".")}function N(e){var t=[],n=0,r=e.length,i,s;while(n=55296&&i<=56319&&n65535&&(e-=65536,t+=w(e>>>10&1023|55296),e=56320|e&1023),t+=w(e),t}).join("")}function k(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:o}function L(e,t){return e+22+75*(e<26)-((t!=0)<<5)}function A(e,t,n){var r=0;e=n?b(e/l):e>>1,e+=b(e/t);for(;e>y*a>>1;r+=o)e=b(e/y);return b(r+(y+1)*e/(e+f))}function O(e){var t=[],n=e.length,r,i=0,f=h,l=c,d,v,m,g,y,w,E,x,T,N;d=e.lastIndexOf(p),d<0&&(d=0);for(v=0;v=128&&S("not-basic"),t.push(e.charCodeAt(v));for(m=d>0?d+1:0;m=n&&S("invalid-input"),E=k(e.charCodeAt(m++)),(E>=o||E>b((s-i)/y))&&S("overflow"),i+=E*y,x=w<=l?u:w>=l+a?a:w-l;if(Eb(s/N)&&S("overflow"),y*=N}r=t.length+1,l=A(i-g,r,g==0),b(i/r)>s-f&&S("overflow"),f+=b(i/r),i%=r,t.splice(i++,0,f)}return C(t)}function M(e){var t,n,r,i,f,l,d,v,m,g,y,E=[],x,T,C,k;e=N(e),x=e.length,t=h,n=0,f=c;for(l=0;l=t&&yb((s-n)/T)&&S("overflow"),n+=(d-t)*T,t=d;for(l=0;ls&&S("overflow");if(y==t){for(v=n,m=o;;m+=o){g=m<=f?u:m>=f+a?a:m-f;if(v= 0x80 (not a basic code point)","invalid-input":"Invalid input"},y=o-u,b=Math.floor,w=String.fromCharCode,E;i={version:"1.2.3",ucs2:{decode:N,encode:C},decode:O,encode:M,toASCII:D,toUnicode:_};if(typeof define=="function"&&typeof define.amd=="object"&&define.amd)define("punycode",[],function(){return i});else if(t&&!t.nodeType)if(n)n.exports=i;else for(E in i)i.hasOwnProperty(E)&&(t[E]=i[E]);else e.punycode=i})(this),function(e,t){typeof exports=="object"?module.exports=t():typeof define=="function"&&define.amd?define("IPv6",t):e.IPv6=t(e)}(this,function(e){function n(e){var t=e.toLowerCase(),n=t.split(":"),r=n.length,i=8;n[0]===""&&n[1]===""&&n[2]===""?(n.shift(),n.shift()):n[0]===""&&n[1]===""?n.shift():n[r-1]===""&&n[r-2]===""&&n.pop(),r=n.length,n[r-1].indexOf(".")!==-1&&(i=7);var s;for(s=0;s1))break;o.splice(0,1)}n[u]=o.join("")}var f=-1,l=0,c=0,h=-1,p=!1;for(u=0;ul&&(f=h,l=c)):n[u]=="0"&&(p=!0,h=u,c=1);c>l&&(f=h,l=c),l>1&&n.splice(f,l,""),r=n.length;var d="";n[0]===""&&(beststr=":");for(u=0;u]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig,s.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"},s.invalid_hostname_characters=/[^a-zA-Z0-9\.-]/,s.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src"},s.getDomAttribute=function(e){if(!e||!e.nodeName)return undefined;var t=e.nodeName.toLowerCase();return t==="input"&&e.type!=="image"?undefined:s.domAttributes[t]},s.encode=v,s.decode=decodeURIComponent,s.iso8859=function(){s.encode=escape,s.decode=unescape},s.unicode=function(){s.encode=v,s.decode=decodeURIComponent},s.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}}},s.encodeQuery=function(e,t){var n=s.encode(e+"");return t?n.replace(/%20/g,"+"):n},s.decodeQuery=function(e,t){e+="";try{return s.decode(t?e.replace(/\+/g,"%20"):e)}catch(n){return e}},s.recodePath=function(e){var t=(e+"").split("/");for(var n=0,r=t.length;n-1&&(t.fragment=e.substring(n+1)||null,e=e.substring(0,n)),n=e.indexOf("?"),n>-1&&(t.query=e.substring(n+1)||null,e=e.substring(0,n)),e.substring(0,2)==="//"?(t.protocol=null,e=e.substring(2),e=s.parseAuthority(e,t)):(n=e.indexOf(":"),n>-1&&(t.protocol=e.substring(0,n)||null,t.protocol&&!t.protocol.match(s.protocol_expression)?t.protocol=undefined:t.protocol==="file"?e=e.substring(n+3):e.substring(n+1,n+3)==="//"?(e=e.substring(n+3),e=s.parseAuthority(e,t)):(e=e.substring(n+1),t.urn=!0))),t.path=e,t},s.parseHost=function(e,t){var n=e.indexOf("/"),r,i;return n===-1&&(n=e.length),e.charAt(0)==="["?(r=e.indexOf("]"),t.hostname=e.substring(1,r)||null,t.port=e.substring(r+2,n)||null):e.indexOf(":")!==e.lastIndexOf(":")?(t.hostname=e.substring(0,n)||null,t.port=null):(i=e.substring(0,n).split(":"),t.hostname=i[0]||null,t.port=i[1]||null),t.hostname&&e.substring(n).charAt(0)!=="/"&&(n++,e="/"+e),e.substring(n)||"/"},s.parseAuthority=function(e,t){return e=s.parseUserinfo(e,t),s.parseHost(e,t)},s.parseUserinfo=function(e,t){var n=e.indexOf("/"),r=n>-1?e.lastIndexOf("@",n):e.indexOf("@"),i;return r>-1&&(n===-1||r"); + $("body").append(overlay); + } + + options = $.extend(defaults, options); + return this.each(function() { + var o = options; + $(this).click(function(e) { + var modal_id = $(this).attr("href"); + $("#lean_overlay").click(function() { + close_modal(modal_id) + }); + $(o.closeButton).click(function() { + close_modal(modal_id) + }); + var modal_height = $(modal_id).outerHeight(); + var modal_width = $(modal_id).outerWidth(); + $("#lean_overlay").css({ + "display": "block", + opacity: 0 + }); + $("#lean_overlay").fadeTo(200, o.overlay); + $(modal_id).css({ + "display": "block", + "position": "fixed", + "opacity": 0, + "z-index": 11000, + "left": 50 + "%", + "margin-left": -(modal_width / 2) + "px", + "top": o.top + "px" + }); + $(modal_id).fadeTo(200, 1); + e.preventDefault() + }) + }); + + function close_modal(modal_id) { + $("#lean_overlay").fadeOut(200); + $(modal_id).css({ + "display": "none" + }) + } + } + }) +})(jQuery); diff --git a/xblocks_contrib/discussion/static/js/vendor/jquery.timeago.js b/xblocks_contrib/discussion/assets/static/js/vendor/jquery.timeago.js similarity index 100% rename from xblocks_contrib/discussion/static/js/vendor/jquery.timeago.js rename to xblocks_contrib/discussion/assets/static/js/vendor/jquery.timeago.js diff --git a/xblocks_contrib/discussion/static/js/vendor/jquery.timeago.locale.js b/xblocks_contrib/discussion/assets/static/js/vendor/jquery.timeago.locale.js similarity index 100% rename from xblocks_contrib/discussion/static/js/vendor/jquery.timeago.locale.js rename to xblocks_contrib/discussion/assets/static/js/vendor/jquery.timeago.locale.js diff --git a/xblocks_contrib/discussion/static/js/vendor/jquery.truncate.js b/xblocks_contrib/discussion/assets/static/js/vendor/jquery.truncate.js similarity index 100% rename from xblocks_contrib/discussion/static/js/vendor/jquery.truncate.js rename to xblocks_contrib/discussion/assets/static/js/vendor/jquery.truncate.js diff --git a/xblocks_contrib/discussion/static/js/vendor/split.js b/xblocks_contrib/discussion/assets/static/js/vendor/split.js similarity index 100% rename from xblocks_contrib/discussion/static/js/vendor/split.js rename to xblocks_contrib/discussion/assets/static/js/vendor/split.js diff --git a/xblocks_contrib/discussion/assets/static/spec/content_spec.js b/xblocks_contrib/discussion/assets/static/spec/content_spec.js new file mode 100644 index 00000000..fe1109d0 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/content_spec.js @@ -0,0 +1,158 @@ +/* globals Comments, Content, DiscussionSpecHelper, DiscussionUser, DiscussionUtil, Thread */ +(function() { + 'use strict'; + + describe('All Content', function() { + beforeEach(function() { + return DiscussionSpecHelper.setUpGlobals(); + }); + describe('Staff and TA Content', function() { + beforeEach(function() { + return DiscussionUtil.loadRoles({ + Moderator: [567], + Administrator: [567], + 'Community TA': [567] + }); + }); + it('anonymous thread should not include login role label', function() { + var anon_content; + anon_content = new Content(); + anon_content.initialize(); + expect(anon_content.get('staff_authored')).toBe(false); + return expect(anon_content.get('community_ta_authored')).toBe(false); + }); + return it('general thread should include login role label', function() { + var anon_content; + anon_content = new Content({ + user_id: '567' + }); + anon_content.initialize(); + expect(anon_content.get('staff_authored')).toBe(true); + return expect(anon_content.get('community_ta_authored')).toBe(true); + }); + }); + describe('Content', function() { + beforeEach(function() { + this.content = new Content({ + id: '01234567', + user_id: '567', + course_id: 'edX/999/test', + body: 'this is some content', + abuse_flaggers: ['123'] + }); + }); + it('should exist', function() { + return expect(Content).toBeDefined(); + }); + it('is initialized correctly', function() { + this.content.initialize(); + expect(Content.contents['01234567']).toEqual(this.content); + expect(this.content.get('id')).toEqual('01234567'); + expect(this.content.get('user_url')).toEqual('/courses/edX/999/test/discussion/forum/users/567'); + expect(this.content.get('children')).toEqual([]); + return expect(this.content.get('comments')).toEqual(jasmine.any(Comments)); + }); + it('can update info', function() { + this.content.updateInfo({ + ability: { + can_edit: true + }, + voted: true, + subscribed: true + }); + expect(this.content.get('ability')).toEqual({ + can_edit: true + }); + expect(this.content.get('voted')).toEqual(true); + return expect(this.content.get('subscribed')).toEqual(true); + }); + it('can be flagged for abuse', function() { + this.content.flagAbuse(); + return expect(this.content.get('abuse_flaggers')).toEqual(['123', '567']); + }); + return it('can be unflagged for abuse', function() { + var temp_array; + temp_array = []; + temp_array.push(window.user.get('id')); + this.content.set('abuse_flaggers', temp_array); + this.content.unflagAbuse(); + return expect(this.content.get('abuse_flaggers')).toEqual([]); + }); + }); + return describe('Comments', function() { + beforeEach(function() { + this.comment1 = new Comment({ + id: '123' + }); + this.comment2 = new Comment({ + id: '345' + }); + }); + it('can contain multiple comments', function() { + var myComments; + myComments = new Comments(); + expect(myComments.length).toEqual(0); + myComments.add(this.comment1); + expect(myComments.length).toEqual(1); + myComments.add(this.comment2); + return expect(myComments.length).toEqual(2); + }); + it('returns results to the find method', function() { + var myComments; + myComments = new Comments(); + myComments.add(this.comment1); + return expect(myComments.find('123')).toBe(this.comment1); + }); + return it('can be endorsed', function() { + DiscussionUtil.loadRoles({ + Moderator: [111], + Administrator: [222], + 'Community TA': [333] + }); + this.discussionThread = new Thread({ + id: 1, + thread_type: 'discussion', + user_id: 99 + }); + this.discussionResponse = new Comment({ + id: 1, + thread: this.discussionThread + }); + this.questionThread = new Thread({ + id: 1, + thread_type: 'question', + user_id: 99 + }); + this.questionResponse = new Comment({ + id: 1, + thread: this.questionThread + }); + window.user = new DiscussionUser({ + id: 111 + }); + expect(this.discussionResponse.canBeEndorsed()).toBe(true); + expect(this.questionResponse.canBeEndorsed()).toBe(true); + window.user = new DiscussionUser({ + id: 222 + }); + expect(this.discussionResponse.canBeEndorsed()).toBe(true); + expect(this.questionResponse.canBeEndorsed()).toBe(true); + window.user = new DiscussionUser({ + id: 333 + }); + expect(this.discussionResponse.canBeEndorsed()).toBe(true); + expect(this.questionResponse.canBeEndorsed()).toBe(true); + window.user = new DiscussionUser({ + id: 99 + }); + expect(this.discussionResponse.canBeEndorsed()).toBe(false); + expect(this.questionResponse.canBeEndorsed()).toBe(true); + window.user = new DiscussionUser({ + id: 999 + }); + expect(this.discussionResponse.canBeEndorsed()).toBe(false); + return expect(this.questionResponse.canBeEndorsed()).toBe(false); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/fixtures/templates.underscore b/xblocks_contrib/discussion/assets/static/spec/fixtures/templates.underscore new file mode 100644 index 00000000..22204f4b --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/fixtures/templates.underscore @@ -0,0 +1,889 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xblocks_contrib/discussion/assets/static/spec/spec_helpers/discussion_spec_helper.js b/xblocks_contrib/discussion/assets/static/spec/spec_helpers/discussion_spec_helper.js new file mode 100644 index 00000000..b90c4cdc --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/spec_helpers/discussion_spec_helper.js @@ -0,0 +1,216 @@ +/* global _, Content, Discussion, DiscussionCourseSettings, DiscussionUtil, DiscussionUser */ +(function() { + 'use strict'; + + this.DiscussionSpecHelper = (function() { + function DiscussionSpecHelper() { + } + + DiscussionSpecHelper.setUpGlobals = function(opts) { + var options = opts || {}; + DiscussionUtil.loadRoles(options.roles || DiscussionSpecHelper.getTestRoleInfo()); + window.$$course_id = options.courseName || 'edX/999/test'; + window.user = new DiscussionUser(options.userInfo || DiscussionSpecHelper.getTestUserInfo()); + DiscussionUtil.setUser(window.user); + }; + + DiscussionSpecHelper.getTestUserInfo = function() { + return { + username: 'test_user', + id: '567', + upvoted_ids: [] + }; + }; + + DiscussionSpecHelper.getTestRoleInfo = function() { + return { + Moderator: [], + Administrator: [], + 'Community TA': [] + }; + }; + + DiscussionSpecHelper.makeTA = function() { + return DiscussionUtil.roleIds['Community TA'].push(parseInt(DiscussionUtil.getUser().id, 10)); + }; + + DiscussionSpecHelper.makeModerator = function() { + return DiscussionUtil.roleIds.Moderator.push(parseInt(DiscussionUtil.getUser().id, 10)); + }; + + DiscussionSpecHelper.makeAjaxSpy = function(fakeAjax) { + return spyOn($, 'ajax').and.callFake(function(params) { + fakeAjax(params); + return { + always: function() { + } + }; + }); + }; + + DiscussionSpecHelper.makeEventSpy = function() { + return jasmine.createSpyObj('event', ['preventDefault', 'target']); + }; + + DiscussionSpecHelper.createTestCourseSettings = function(options) { + var context = _.extend( + { + category_map: { + children: [['Test Topic', 'entry'], ['Other Topic', 'entry']], + entries: { + 'Test Topic': { + is_divided: true, + id: 'test_topic' + }, + 'Other Topic': { + is_divided: true, + id: 'other_topic' + } + } + }, + is_discussion_division_enabled: true, + allow_anonymous: false, + allow_anonymous_to_peers: false + }, + options || {} + ); + return new DiscussionCourseSettings(context); + }; + + DiscussionSpecHelper.createTestDiscussion = function(options) { + var sortPreference = options.sort_preference, + threads = options.threads || [], + threadPages = options.thread_pages || 1, + contentInfo = options.content_info; + DiscussionSpecHelper.setUpGlobals(options); + if (contentInfo) { + Content.loadContentInfos(contentInfo); + } + return new Discussion(threads, {pages: threadPages, sort: sortPreference}); + }; + + DiscussionSpecHelper.setUnderscoreFixtures = function() { + var templateFixtures = readFixtures('templates.underscore'); + appendSetFixtures(templateFixtures); + appendSetFixtures( + '' + ); + + appendSetFixtures( + '
\n' + + '
' + ); + }; + + return DiscussionSpecHelper; + }()); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/spec_helpers/i18n.js b/xblocks_contrib/discussion/assets/static/spec/spec_helpers/i18n.js new file mode 100644 index 00000000..267fd6d3 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/spec_helpers/i18n.js @@ -0,0 +1,10 @@ +window.gettext = function(s) { return s; }; +window.ngettext = function(singular, plural, num) { return num == 1 ? singular : plural; }; + +function interpolate(fmt, obj, named) { + if (named) { + return fmt.replace(/%\(\w+\)s/g, function(match) { return String(obj[match.slice(2, -2)]); }); + } else { + return fmt.replace(/%s/g, function(match) { return String(obj.shift()); }); + } +} diff --git a/xblocks_contrib/discussion/assets/static/spec/utils_spec.js b/xblocks_contrib/discussion/assets/static/spec/utils_spec.js new file mode 100644 index 00000000..d071ad53 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/utils_spec.js @@ -0,0 +1,94 @@ +/* globals DiscussionSpecHelper, DiscussionUtil */ +(function() { + 'use strict'; + + describe('DiscussionUtil', function() { + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + }); + + describe('updateWithUndo', function() { + it('calls through to safeAjax with correct params, and reverts the model in case of failure', function() { + var deferred, model, res, updates; + deferred = $.Deferred(); + spyOn($, 'ajax').and.returnValue(deferred); + spyOn(DiscussionUtil, 'safeAjax').and.callThrough(); + model = new Backbone.Model({ + hello: false, + number: 42 + }); + updates = { + hello: 'world' + }; + res = DiscussionUtil.updateWithUndo(model, updates, { + foo: 'bar' + }, 'error message'); + expect(DiscussionUtil.safeAjax).toHaveBeenCalled(); + expect(model.attributes).toEqual({ + hello: 'world', + number: 42 + }); + spyOn(DiscussionUtil, 'discussionAlert'); + DiscussionUtil.safeAjax.calls.mostRecent().args[0].error(); + expect(DiscussionUtil.discussionAlert).toHaveBeenCalledWith('Error', 'error message'); + deferred.reject(); + return expect(model.attributes).toEqual({ + hello: false, + number: 42 + }); + }); + return it('rolls back the changes if the associated element is disabled', function() { + var $elem, failed, model, res, updates; + spyOn(DiscussionUtil, 'safeAjax').and.callThrough(); + model = new Backbone.Model({ + hello: false, + number: 42 + }); + updates = { + hello: 'world' + }; + $elem = jasmine.createSpyObj('$elem', ['prop']); + $elem.prop.and.returnValue(true); + res = DiscussionUtil.updateWithUndo(model, updates, { + foo: 'bar', + $elem: $elem + }, 'error message'); + expect($elem.prop).toHaveBeenCalledWith('disabled'); + expect(DiscussionUtil.safeAjax).toHaveBeenCalled(); + expect(model.attributes).toEqual({ + hello: false, + number: 42 + }); + failed = false; + res.fail(function() { + failed = true; + }); + return expect(failed).toBe(true); + }); + }); + + describe('safeAjax', function() { + function dismissAlert() { + $('.modal#discussion-alert').remove(); + } + + it('respects global beforeSend', function() { + var beforeSendSpy = jasmine.createSpy(); + $.ajaxSetup({beforeSend: beforeSendSpy}); + + var $elem = jasmine.createSpyObj('$elem', ['prop']); + + DiscussionUtil.safeAjax({ + $elem: $elem, + url: '/', + type: 'GET', + dataType: 'json' + }).always(function() { + dismissAlert(); + }); + expect($elem.prop).toHaveBeenCalledWith('disabled', true); + expect(beforeSendSpy).toHaveBeenCalled(); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_content_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_content_view_spec.js new file mode 100644 index 00000000..fadd47ea --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_content_view_spec.js @@ -0,0 +1,58 @@ +/* globals DiscussionSpecHelper, DiscussionContentView, Thread */ +(function() { + 'use strict'; + + describe('DiscussionContentView', function() { + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.threadData = { + id: '01234567', + user_id: '567', + course_id: 'edX/999/test', + body: 'this is a thread', + created_at: '2013-04-03T20:08:39Z', + abuse_flaggers: ['123'], + votes: { + up_count: '42' + }, + type: 'thread', + roles: [] + }; + this.thread = new Thread(this.threadData); + this.view = new DiscussionContentView({ + model: this.thread + }); + this.view.setElement($('#fixture-element')); + return this.view.render(); + }); + + it('defines the tag', function() { + expect($('#jasmine-fixtures')).toExist(); + expect(this.view.tagName).toBeDefined(); + return expect(this.view.el.tagName.toLowerCase()).toBe('div'); + }); + + it('defines the class', function() { + return expect(this.view.model).toBeDefined(); + }); + + it('is tied to the model', function() { + return expect(this.view.model).toBeDefined(); + }); + + it('can be flagged for abuse', function() { + this.thread.flagAbuse(); + return expect(this.thread.get('abuse_flaggers')).toEqual(['123', '567']); + }); + + it('can be unflagged for abuse', function() { + var temp_array; + temp_array = []; + temp_array.push(window.user.get('id')); + this.thread.set('abuse_flaggers', temp_array); + this.thread.unflagAbuse(); + return expect(this.thread.get('abuse_flaggers')).toEqual([]); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_inline_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_inline_view_spec.js new file mode 100644 index 00000000..ed3bb4c8 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_inline_view_spec.js @@ -0,0 +1,257 @@ +/* globals + _, Discussion, DiscussionCourseSettings, DiscussionViewSpecHelper, DiscussionSpecHelper, + DiscussionInlineView, DiscussionUtil, DiscussionThreadShowView, Thread + */ +(function() { + 'use strict'; + + describe('DiscussionInlineView', function() { + var createTestView, showDiscussion, setNextAjaxResult, + TEST_THREAD_TITLE = 'Test thread title'; + + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + setFixtures( + '
' + + '
' + + '

Test Discussion

' + + '
' + + ' Topic: Category / Target ' + + '
' + + '
' + + ' ' + + '
' + ); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.ajaxSpy = spyOn($, 'ajax'); + + // Don't attempt to render markdown + spyOn(DiscussionUtil, 'makeWmdEditor'); + spyOn(DiscussionThreadShowView.prototype, 'convertMath'); + }); + + createTestView = function(test) { + var testView; + var courseSettings = DiscussionSpecHelper.createTestCourseSettings({ + groups: [ + { + id: 1, + name: 'Cohort1' + }, { + id: 2, + name: 'Cohort2' + } + ] + }); + setNextAjaxResult(test, { + user_info: DiscussionSpecHelper.getTestUserInfo(), + roles: DiscussionSpecHelper.getTestRoleInfo(), + course_settings: courseSettings.attributes, + discussion_data: DiscussionViewSpecHelper.makeThreadWithProps({ + commentable_id: 'test-topic', + title: TEST_THREAD_TITLE + }), + page: 1, + num_pages: 1, + content: { + endorsed_responses: [], + non_endorsed_responses: [], + children: [] + } + }); + testView = new DiscussionInlineView({ + el: $('.discussion-module') + }); + testView.render(); + return testView; + }; + + showDiscussion = function(test, testView) { + var courseSettings = DiscussionSpecHelper.createTestCourseSettings({ + groups: [ + { + id: 1, + name: 'Cohort1' + }, { + id: 2, + name: 'Cohort2' + } + ] + }); + setNextAjaxResult(test, { + user_info: DiscussionSpecHelper.getTestUserInfo(), + roles: DiscussionSpecHelper.getTestRoleInfo(), + course_settings: courseSettings.attributes, + discussion_data: DiscussionViewSpecHelper.makeThreadWithProps({ + commentable_id: 'test-topic', + title: TEST_THREAD_TITLE + }), + page: 1, + num_pages: 1, + content: { + endorsed_responses: [], + non_endorsed_responses: [], + children: [] + } + }); + testView.$('.discussion-show').click(); + }; + + setNextAjaxResult = function(test, result) { + test.ajaxSpy.and.callFake(function(params) { + var deferred = $.Deferred(); + deferred.resolve(); + params.success(result); + return deferred; + }); + }; + + describe('inline discussion', function() { + it('is shown by default', function() { + var testView = createTestView(this), + showButton = testView.$('.discussion-show'); + + // Verify that the discussion is shown without clicking anything + expect(showButton).toHaveClass('shown'); + expect(showButton.text().trim()).toEqual('Hide Discussion'); + expect(testView.$('.inline-discussion:visible')).not.toHaveClass('is-hidden'); + }); + it('is shown after "Show Discussion" is clicked while discussions are hidden', function() { + var testView = createTestView(this), + showButton = testView.$('.discussion-show'); + + // hide the discussion; discussions are loaded by default + testView.$('.discussion-show').click(); + showDiscussion(this, testView); + + // Verify that the discussion is now shown again + expect(showButton).toHaveClass('shown'); + expect(showButton.text().trim()).toEqual('Hide Discussion'); + expect(testView.$('.inline-discussion:visible')).not.toHaveClass('is-hidden'); + }); + + it('is hidden after "Hide Discussion" is clicked', function() { + var testView = createTestView(this), + showButton = testView.$('.discussion-show'); + + // Hide the discussion by clicking the toggle button + testView.$('.discussion-show').click(); + + // Verify that the discussion is now hidden + expect(showButton).not.toHaveClass('shown'); + expect(showButton.text().trim()).toEqual('Show Discussion'); + expect(testView.$('.inline-discussion:visible')).toHaveClass('is-hidden'); + }); + }); + + describe('new post form', function() { + it('should not be visible when the discussion is first shown', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + expect(testView.$('.new-post-article')).toHaveClass('is-hidden'); + }); + + it('should be shown when the "Add a Post" button is clicked', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + testView.$('.new-post-btn').click(); + expect(testView.$('.new-post-article')).not.toHaveClass('is-hidden'); + }); + + it('should be hidden when the "Cancel" button is clicked', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + testView.$('.new-post-btn').click(); + testView.$('.forum-new-post-form .cancel').click(); + expect(testView.$('.new-post-article')).toHaveClass('is-hidden'); + }); + + it('should be hidden when the "Close" button is clicked', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + testView.$('.new-post-btn').click(); + testView.$('.forum-new-post-form .add-post-cancel').click(); + expect(testView.$('.new-post-article')).toHaveClass('is-hidden'); + }); + + it('should return to the thread listing after adding a post', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + + // Navigate to an individual thread + testView.$('.forum-nav-thread-link').click(); + + // Click "Add a Post", fill in the form, and submit it + testView.$('.new-post-btn').click(); + testView.$('.js-post-title').text('Test title'); + testView.$('.wmd-input').text('Test body'); + setNextAjaxResult(this, { + hello: 'world' + }); + testView.$('.forum-new-post-form .submit').click(); + + // Verify that the list of threads is shown + expect(testView.$('.inline-threads')).not.toHaveClass('is-hidden'); + + // Verify that the individual thread is no longer shown + expect(testView.$('.group-visibility-label').length).toBe(0); + }); + }); + + describe('thread listing', function() { + it('builds a view that lists the threads', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + expect(testView.$('.forum-nav-thread-title').text()).toBe(TEST_THREAD_TITLE); + }); + }); + + describe('thread post drill down', function() { + it('can drill down to a thread', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + testView.$('.forum-nav-thread-link').click(); + + // Verify that the list of threads is hidden + expect(testView.$('.inline-threads')).toHaveClass('is-hidden'); + + // Verify that the individual thread is shown + expect(testView.$('.group-visibility-label').text().trim()).toBe('This post is visible to everyone.'); + }); + + it('can go back to the list of threads', function() { + var testView = createTestView(this); + showDiscussion(this, testView); + testView.$('.forum-nav-thread-link').click(); + testView.$('.all-posts-btn').click(); + + // Verify that the list of threads is shown + expect(testView.$('.inline-threads')).not.toHaveClass('is-hidden'); + + // Verify that the individual thread is no longer shown + expect(testView.$('.group-visibility-label').length).toBe(0); + }); + + it('marks a thread as read once it is opened', function() { + var testView = createTestView(this); + var thread; + showDiscussion(this, testView); + thread = testView.$('.forum-nav-thread'); + + // The thread is marked as unread. + expect(thread).toHaveClass('never-read'); + + // Navigate to the thread. + thread.find('.forum-nav-thread-link').click(); + + // The thread is no longer marked as unread. + expect(thread).not.toHaveClass('never-read'); + }); + }); + }); +}()); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_edit_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_edit_view_spec.js new file mode 100644 index 00000000..1aa7b1f4 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_edit_view_spec.js @@ -0,0 +1,184 @@ +/* globals + DiscussionCourseSettings, DiscussionSpecHelper, DiscussionThreadEditView, DiscussionUtil, + DiscussionViewSpecHelper, Thread +*/ +(function() { + 'use strict'; + + describe('DiscussionThreadEditView', function() { + var testUpdate, testCancel; + + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + spyOn(DiscussionUtil, 'makeWmdEditor'); + this.threadData = DiscussionViewSpecHelper.makeThreadWithProps({ + commentable_id: 'test_topic', + title: 'test thread title' + }); + this.thread = new Thread(this.threadData); + this.course_settings = DiscussionSpecHelper.createTestCourseSettings(); + + this.createEditView = function(options) { + options = _.extend({ + container: $('#fixture-element'), + model: this.thread, + mode: 'tab', + course_settings: this.course_settings + }, options); + this.view = new DiscussionThreadEditView(options); + this.view.render(); + }; + }); + + testUpdate = function(view, thread, newTopicId, newTopicName, mode) { + var discussionMode = mode || 'tab'; + + spyOn($, 'ajax').and.callFake(function(params) { + expect(params.url.path()).toEqual(DiscussionUtil.urlFor('update_thread', 'dummy_id')); + expect(params.data.thread_type).toBe('discussion'); + if (discussionMode !== 'inline') { + expect(params.data.commentable_id).toBe(newTopicId); + } + expect(params.data.title).toBe('changed thread title'); + params.success(); + return { + always: function() { + } + }; + }); + view.$el.find('.topic-title').filter(function(idx, el) { + return $(el).data('discussionId') === newTopicId; + }).prop('selected', true); // set new topic + view.$('.post-topic').trigger('change'); + view.$('.edit-post-title').val('changed thread title'); // set new title + if (discussionMode !== 'inline') { + view.$("label[for$='post-type-discussion']").click(); // set new thread type + } + view.$('.post-update').click(); + expect($.ajax).toHaveBeenCalled(); + + expect(thread.get('title')).toBe('changed thread title'); + expect(thread.get('thread_type')).toBe('discussion'); + if (discussionMode !== 'inline') { + expect(thread.get('commentable_id')).toBe(newTopicId); + expect(thread.get('courseware_title')).toBe(newTopicName); + } + expect(view.$('.edit-post-title')).toHaveValue(''); + expect(view.$('.wmd-preview p')).toHaveText(''); + }; + + it('can save new data correctly in tab mode', function() { + this.createEditView(); + testUpdate(this.view, this.thread, 'other_topic', 'Other Topic'); + }); + + it('can save new data correctly in inline mode', function() { + this.createEditView({mode: 'inline'}); + testUpdate(this.view, this.thread, 'other_topic', 'Other Topic', 'inline'); + }); + + testCancel = function(view) { + view.$('.post-cancel').click(); + expect($('.edit-post-form')).not.toExist(); + }; + + it('can close the view in tab mode', function() { + this.createEditView(); + testCancel(this.view); + }); + + it('can close the view in inline mode', function() { + this.createEditView({mode: 'inline'}); + testCancel(this.view); + }); + + describe('Enter key behavior in title input', function() { + beforeEach(function() { + this.createEditView(); + this.titleInput = this.view.$('.edit-post-title'); + }); + + it('prevents form submission when Enter is pressed in title input', function() { + var submitSpy = jasmine.createSpy('submitSpy'); + this.view.$el.on('submit', submitSpy); + + var enterKeyEvent = $.Event('keypress', {which: 13, keyCode: 13}); + this.titleInput.trigger(enterKeyEvent); + expect(submitSpy).not.toHaveBeenCalled(); + }); + + it('prevents default behavior when Enter is pressed in title input', function() { + var enterKeyEvent = $.Event('keypress', {which: 13, keyCode: 13}); + var preventDefaultSpy = spyOn(enterKeyEvent, 'preventDefault'); + + this.titleInput.trigger(enterKeyEvent); + expect(preventDefaultSpy).toHaveBeenCalled(); + }); + + it('does not prevent non-Enter key presses in title input', function() { + var submitSpy = jasmine.createSpy('submitSpy'); + this.view.$el.on('submit', submitSpy); + + var aKeyEvent = $.Event('keypress', {which: 65, keyCode: 65}); + var preventDefaultSpy = spyOn(aKeyEvent, 'preventDefault'); + this.titleInput.trigger(aKeyEvent); + expect(preventDefaultSpy).not.toHaveBeenCalled(); + }); + + it('does not interfere with body editor when Enter is pressed', function() { + var bodyEditor = this.view.$('.edit-post-body textarea'); + var enterKeyEvent = $.Event('keypress', {which: 13, keyCode: 13}); + var preventDefaultSpy = spyOn(enterKeyEvent, 'preventDefault'); + + bodyEditor.trigger(enterKeyEvent); + expect(preventDefaultSpy).not.toHaveBeenCalled(); + }); + }); + + describe('renderComments', function() { + beforeEach(function() { + this.course_settings = new DiscussionCourseSettings({ + category_map: { + children: [ + ['Topic', 'entry'], + ['General', 'entry'], + ['Basic Question', 'entry'] + ], + entries: { + Topic: { + is_divided: true, + id: 'topic' + }, + General: { + sort_key: 'General', + is_divided: false, + id: '6.00.1x_General' + }, + 'Basic Question': { + is_divided: false, + id: "6>00'1x\"Basic_Question" + } + } + }, + is_cohorted: true + }); + }); + + it('can save new data correctly for current discussion id without dots', function() { + this.createEditView({topicId: 'topic'}); + testUpdate(this.view, this.thread, '6.00.1x_General', 'General'); + }); + + it('can save new data correctly for current discussion id with dots', function() { + this.createEditView({topicId: '6.00.1x_General'}); + testUpdate(this.view, this.thread, "6>00\'1x\"Basic_Question", 'Basic Question'); + }); + + it('can save new data correctly for current discussion id with special characters', function() { + this.createEditView({topicId: "6>00\'1x\"Basic_Question"}); + testUpdate(this.view, this.thread, '6.00.1x_General', 'General'); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_list_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_list_view_spec.js new file mode 100644 index 00000000..c0b9c60b --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_list_view_spec.js @@ -0,0 +1,754 @@ +/* globals + _, Discussion, DiscussionCourseSettings, DiscussionViewSpecHelper, DiscussionSpecHelper, + DiscussionThreadListView, DiscussionUtil, Thread +*/ +(function() { + 'use strict'; + + describe('DiscussionThreadListView', function() { + var checkThreadsOrdering, expectFilter, makeView, renderSingleThreadWithProps, setupAjax; + + beforeEach(function() { + var deferred; + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + appendSetFixtures( + '' + ); + this.threads = [ + DiscussionViewSpecHelper.makeThreadWithProps({ + id: '1', + title: 'Thread1', + votes: { + up_count: '20' + }, + pinned: true, + comments_count: 1, + created_at: '2013-04-03T20:08:39Z' + }), DiscussionViewSpecHelper.makeThreadWithProps({ + id: '2', + title: 'Thread2', + votes: { + up_count: '42' + }, + comments_count: 2, + created_at: '2013-04-03T20:07:39Z' + }), DiscussionViewSpecHelper.makeThreadWithProps({ + id: '3', + title: 'Thread3', + votes: { + up_count: '12' + }, + read: true, + comments_count: 3, + unread_comments_count: 2, + created_at: '2013-04-03T20:06:39Z' + }), DiscussionViewSpecHelper.makeThreadWithProps({ + id: '4', + title: 'Thread4', + votes: { + up_count: '25' + }, + comments_count: 0, + pinned: true, + created_at: '2013-04-03T20:05:39Z' + }) + ]; + deferred = $.Deferred(); + spyOn($, 'ajax').and.returnValue(deferred); + this.discussion = new Discussion([]); + this.view = new DiscussionThreadListView({ + collection: this.discussion, + el: $('#fixture-element'), + courseSettings: new DiscussionCourseSettings({ + is_discussion_division_enabled: true + }) + }); + return this.view.render(); + }); + + setupAjax = function(callback) { + return $.ajax.and.callFake(function(params) { + if (callback) { + callback(params); + } + params.success({ + discussion_data: [], + page: 1, + num_pages: 1 + }); + return { + always: function() { + } + }; + }); + }; + + renderSingleThreadWithProps = function(props) { + return makeView(new Discussion([new Thread(DiscussionViewSpecHelper.makeThreadWithProps(props))])).render(); + }; + + makeView = function(discussion, props) { + return new DiscussionThreadListView( + _.extend( + { + el: $('#fixture-element'), + collection: discussion, + showThreadPreview: true, + courseSettings: new DiscussionCourseSettings({ + is_discussion_division_enabled: true + }) + }, + props + ) + ); + }; + + expectFilter = function(filterVal) { + return $.ajax.and.callFake(function(params) { + _.each(['unread', 'unanswered', 'flagged'], function(paramName) { + if (paramName === filterVal) { + return expect(params.data[paramName]).toEqual(true); + } else { + return expect(params.data[paramName]).toBeUndefined(); + } + }); + return { + always: function() { + } + }; + }); + }; + + describe('should filter correctly', function() { + return _.each(['all', 'unread', 'unanswered', 'flagged'], function(filterVal) { + it('for ' + filterVal, function() { + expectFilter(filterVal); + this.view.$('.forum-nav-filter-main-control').val(filterVal).change(); + return expect($.ajax).toHaveBeenCalled(); + }); + }); + }); + + it('filter should clear search alert when alternate term was searched', function() { + var filterval = 'unread'; + expectFilter(filterval); + this.view.$('.forum-nav-filter-main-control').val(filterval); + expect($('.search-alert .message').text()) + .toEqual('There are no posts in this topic yet.'); + + filterval = 'all'; + expectFilter(filterval); + this.view.$('.forum-nav-filter-main-control').val(filterval).change(); + expect($('.search-alert .message').text()).toEqual(''); + }); + + describe('group selector', function() { + it('should not be visible to students', function() { + return expect(this.view.$('.forum-nav-filter-cohort-control:visible')).not.toExist(); + }); + it('should allow moderators to select visibility', function() { + var expectedGroupId, + self = this; + DiscussionSpecHelper.makeModerator(); + this.view.render(); + expectedGroupId = null; + setupAjax(function(params) { + return expect(params.data.group_id).toEqual(expectedGroupId); + }); + return _.each([ + { + val: '', + // eslint-disable-next-line no-void + expectedGroupId: void 0 + }, { + val: '1', + expectedGroupId: '1' + }, { + val: '2', + expectedGroupId: '2' + } + ], function(optionInfo) { + expectedGroupId = optionInfo.expectedGroupId; + self.view.$('.forum-nav-filter-cohort-control').val(optionInfo.val).change(); + expect($.ajax).toHaveBeenCalled(); + return $.ajax.calls.reset(); + }); + }); + }); + + it('search should clear filter', function() { + expectFilter(null); + this.view.$('.forum-nav-filter-main-control').val('flagged'); + this.view.searchFor('foobar'); + return expect(this.view.$('.forum-nav-filter-main-control').val()).toEqual('all'); + }); + + checkThreadsOrdering = function(view, sortOrder, type) { + expect(view.$el.find('.forum-nav-thread').children().length).toEqual(4); + expect(view.$el.find('.forum-nav-thread:nth-child(1) .forum-nav-thread-title').text()) + .toEqual(sortOrder[0]); + expect(view.$el.find('.forum-nav-thread:nth-child(2) .forum-nav-thread-title').text()) + .toEqual(sortOrder[1]); + expect(view.$el.find('.forum-nav-thread:nth-child(3) .forum-nav-thread-title').text()) + .toEqual(sortOrder[2]); + expect(view.$el.find('.forum-nav-thread:nth-child(4) .forum-nav-thread-title').text()) + .toEqual(sortOrder[3]); + return expect(view.$el.find('.forum-nav-sort-control').val()).toEqual(type); + }; + + describe('thread rendering should be correct', function() { + var checkRender; + checkRender = function(threads, type, sortOrder) { + var discussion, view, + isOrderedByVotes = type === 'votes'; + discussion = new Discussion(_.map(threads, function(thread) { + return new Thread(thread); + }), { + pages: 1, + sort: type + }); + view = makeView(discussion); + view.render(); + checkThreadsOrdering(view, sortOrder, type); + expect(view.$el.find('.forum-nav-thread-comments-count:visible').length) + .toEqual(isOrderedByVotes ? 0 : 4); + expect(view.$el.find('.forum-nav-thread-unread-comments-count:visible').length) + .toEqual(isOrderedByVotes ? 0 : 1); + expect(view.$el.find('.forum-nav-thread-votes-count:visible').length) + .toEqual(isOrderedByVotes ? 4 : 0); + if (isOrderedByVotes) { + expect(_.map(view.$el.find('.forum-nav-thread-votes-count'), function(element) { + return $(element).text().trim(); + })).toEqual(['+25 votes', '+20 votes', '+42 votes', '+12 votes']); + } else { + expect(view.$el.find('.forum-nav-thread-votes-count:visible').length) + .toEqual(0); + } + }; + + it('with sort preference "activity"', function() { + checkRender(this.threads, 'activity', ['Thread1', 'Thread2', 'Thread3', 'Thread4']); + }); + + it('with sort preference "votes"', function() { + checkRender(this.threads, 'votes', ['Thread4', 'Thread1', 'Thread2', 'Thread3']); + }); + + it('with sort preference "comments"', function() { + checkRender(this.threads, 'comments', ['Thread1', 'Thread4', 'Thread3', 'Thread2']); + }); + }); + + describe('Sort change should be correct', function() { + var changeSorting; + changeSorting = function(threads, selectedType, newType, sortOrder) { + var discussion, sortControl, sortedThreads, view; + discussion = new Discussion(_.map(threads, function(thread) { + return new Thread(thread); + }), { + pages: 1, + sort: selectedType + }); + view = makeView(discussion); + view.render(); + sortControl = view.$el.find('.forum-nav-sort-control'); + expect(sortControl.val()).toEqual(selectedType); + sortedThreads = []; + if (newType === 'activity') { + sortedThreads = [threads[0], threads[3], threads[1], threads[2]]; + } else if (newType === 'comments') { + sortedThreads = [threads[0], threads[3], threads[2], threads[1]]; + } else if (newType === 'votes') { + sortedThreads = [threads[3], threads[0], threads[1], threads[2]]; + } + $.ajax.and.callFake(function(params) { + params.success({ + discussion_data: sortedThreads, + page: 1, + num_pages: 1 + }); + return { + always: function() { + } + }; + }); + sortControl.val(newType).change(); + expect($.ajax).toHaveBeenCalled(); + expect(view.mode).toBe('commentables'); + checkThreadsOrdering(view, sortOrder, newType); + }; + + it('with sort preference activity', function() { + changeSorting( + this.threads, 'comments', 'activity', ['Thread1', 'Thread4', 'Thread3', 'Thread2'] + ); + }); + + it('with sort preference votes', function() { + changeSorting(this.threads, 'activity', 'votes', ['Thread4', 'Thread1', 'Thread2', 'Thread3']); + }); + + it('with sort preference comments', function() { + changeSorting(this.threads, 'votes', 'comments', ['Thread1', 'Thread4', 'Thread3', 'Thread2']); + }); + }); + + describe('post type renders correctly', function() { + it('for discussion', function() { + renderSingleThreadWithProps({ + thread_type: 'discussion' + }); + expect($('.forum-nav-thread-wrapper-0 .icon')).toHaveClass('fa-comments'); + return expect($('.forum-nav-thread-wrapper-0 .sr')).toHaveText('discussion'); + }); + + it('for answered question', function() { + renderSingleThreadWithProps({ + thread_type: 'question', + endorsed: true + }); + expect($('.forum-nav-thread-wrapper-0 .icon')).toHaveClass('fa-check-square-o'); + return expect($('.forum-nav-thread-wrapper-0 .sr')).toHaveText('answered question'); + }); + + it('for unanswered question', function() { + renderSingleThreadWithProps({ + thread_type: 'question', + endorsed: false + }); + expect($('.forum-nav-thread-wrapper-0 .icon')).toHaveClass('fa-question'); + return expect($('.forum-nav-thread-wrapper-0 .sr')).toHaveText('unanswered question'); + }); + }); + + describe('post labels render correctly', function() { + beforeEach(function() { + this.moderatorId = '42'; + this.administratorId = '43'; + this.communityTaId = '44'; + return DiscussionUtil.loadRoles({ + Moderator: [parseInt(this.moderatorId, 10)], + Administrator: [parseInt(this.administratorId, 10)], + 'Community TA': [parseInt(this.communityTaId, 10)] + }); + }); + + it('for pinned', function() { + renderSingleThreadWithProps({ + pinned: true + }); + return expect($('.post-label-pinned').length).toEqual(1); + }); + + it('for following', function() { + renderSingleThreadWithProps({ + subscribed: true + }); + return expect($('.post-label-following').length).toEqual(1); + }); + + it('for moderator', function() { + renderSingleThreadWithProps({ + user_id: this.moderatorId + }); + return expect($('.post-label-by-staff').length).toEqual(1); + }); + + it('for administrator', function() { + renderSingleThreadWithProps({ + user_id: this.administratorId + }); + return expect($('.post-label-by-staff').length).toEqual(1); + }); + + it('for community TA', function() { + renderSingleThreadWithProps({ + user_id: this.communityTaId + }); + return expect($('.post-label-by-community-ta').length).toEqual(1); + }); + + it('when none should be present', function() { + renderSingleThreadWithProps({}); + return expect($('.forum-nav-thread-labels').length).toEqual(0); + }); + }); + + describe('search alerts', function() { + var testAlertMessages, getAlertMessagesAndClasses; + + testAlertMessages = function(expectedMessages) { + return expect($('.search-alert .message').map(function() { + return $(this).html(); + }).get()).toEqual(expectedMessages); + }; + + getAlertMessagesAndClasses = function() { + return $('.search-alert').map(function() { + return { + text: $('.message', this).html(), + css_class: $(this).attr('class') + }; + }).get(); + }; + + it('renders and removes search alerts', function() { + var bar, foo; + testAlertMessages(['There are no posts in this topic yet.']); + this.view.clearSearchAlerts(); + testAlertMessages([]); + foo = this.view.addSearchAlert('foo'); + testAlertMessages(['foo']); + bar = this.view.addSearchAlert('bar'); + testAlertMessages(['foo', 'bar']); + this.view.removeSearchAlert(foo.cid); + testAlertMessages(['bar']); + this.view.removeSearchAlert(bar.cid); + return testAlertMessages([]); + }); + + it('renders search alert with custom class', function() { + var messages; + testAlertMessages(['There are no posts in this topic yet.']); + this.view.clearSearchAlerts(); + testAlertMessages([]); + + this.view.addSearchAlert('foo', 'custom-class'); + messages = getAlertMessagesAndClasses(); + expect(messages.length).toEqual(1); + expect(messages[0].text).toEqual('foo'); + expect(messages[0].css_class).toEqual('search-alert custom-class'); + + this.view.addSearchAlert('bar', 'other-class'); + + messages = getAlertMessagesAndClasses(); + expect(messages.length).toEqual(2); + expect(messages[0].text).toEqual('foo'); + expect(messages[0].css_class).toEqual('search-alert custom-class'); + expect(messages[1].text).toEqual('bar'); + expect(messages[1].css_class).toEqual('search-alert other-class'); + }); + + it('clears all search alerts', function() { + this.view.clearSearchAlerts(); + this.view.addSearchAlert('foo'); + this.view.addSearchAlert('bar'); + this.view.addSearchAlert('baz'); + testAlertMessages(['foo', 'bar', 'baz']); + this.view.clearSearchAlerts(); + return testAlertMessages([]); + }); + }); + + describe('search spell correction', function() { + var testCorrection; + + beforeEach(function() { + return spyOn(this.view, 'searchForUser'); + }); + + testCorrection = function(view, correctedText) { + spyOn(view, 'addSearchAlert'); + $.ajax.and.callFake(function(params) { + params.success({ + discussion_data: [], + page: 42, + num_pages: 99, + corrected_text: correctedText + }, 'success'); + return { + always: function() { + } + }; + }); + view.searchFor('dummy'); + return expect($.ajax).toHaveBeenCalled(); + }; + + it('adds a search alert when an alternate term was searched', function() { + testCorrection(this.view, 'foo'); + expect(this.view.addSearchAlert.calls.count()).toEqual(2); + return expect(this.view.addSearchAlert.calls.mostRecent().args[0]).toMatch(/foo/); + }); + + it('does not add a search alert when no alternate term was searched', function() { + testCorrection(this.view, null); + expect(this.view.addSearchAlert.calls.count()).toEqual(2); + return expect(this.view.addSearchAlert.calls.mostRecent().args[0]).toMatch(/no posts matched/i); + }); + + it('clears search alerts when a new search is performed', function() { + spyOn(this.view, 'clearSearchAlerts'); + spyOn(DiscussionUtil, 'safeAjax'); + this.view.searchFor('dummy'); + return expect(this.view.clearSearchAlerts).toHaveBeenCalled(); + }); + + it('clears search alerts when the underlying collection changes', function() { + spyOn(this.view, 'clearSearchAlerts'); + spyOn(this.view, 'renderThread'); + this.view.collection.trigger('change', new Thread({ + id: 1 + })); + return expect(this.view.clearSearchAlerts).toHaveBeenCalled(); + }); + }); + + describe('username search', function() { + var setAjaxResults; + + it('makes correct ajax calls', function() { + $.ajax.and.callFake(function(params) { + expect(params.data.username).toEqual('testing-username'); + expect(params.url.path()).toEqual(DiscussionUtil.urlFor('users')); + params.success({ + users: [] + }, 'success'); + return { + always: function() { + } + }; + }); + this.view.searchForUser('testing-username'); + return expect($.ajax).toHaveBeenCalled(); + }); + + setAjaxResults = function(threadSuccess, userResult) { + return $.ajax.and.callFake(function(params) { + if (params.data.text && threadSuccess) { + params.success({ + discussion_data: [], + page: 42, + num_pages: 99, + corrected_text: 'dummy' + }, 'success'); + } else if (params.data.username) { + params.success({ + users: userResult + }, 'success'); + } + return { + always: function() { + } + }; + }); + }; + + it('gets called after a thread search succeeds', function() { + spyOn(this.view, 'searchForUser').and.callThrough(); + setAjaxResults(true, []); + this.view.searchFor('gizmo'); + expect(this.view.searchForUser).toHaveBeenCalled(); + return expect($.ajax.calls.mostRecent().args[0].data.username).toEqual('gizmo'); + }); + + it('does not get called after a thread search fails', function() { + spyOn(this.view, 'searchForUser').and.callThrough(); + setAjaxResults(false, []); + this.view.searchFor('gizmo'); + return expect(this.view.searchForUser).not.toHaveBeenCalled(); + }); + + it('adds a search alert when an username was matched', function() { + spyOn(this.view, 'addSearchAlert'); + setAjaxResults(true, [ + { + username: 'gizmo', + id: '1' + } + ]); + this.view.searchForUser('dummy'); + expect($.ajax).toHaveBeenCalled(); + expect(this.view.addSearchAlert).toHaveBeenCalled(); + return expect(this.view.addSearchAlert.calls.mostRecent().args[0]).toMatch(/gizmo/); + }); + + it('does not add a search alert when no username was matched', function() { + spyOn(this.view, 'addSearchAlert'); + setAjaxResults(true, []); + this.view.searchForUser('dummy'); + expect($.ajax).toHaveBeenCalled(); + return expect(this.view.addSearchAlert).not.toHaveBeenCalled(); + }); + }); + + describe('thread preview body', function() { + it('should be shown when showThreadPreview is true', function() { + renderSingleThreadWithProps({ + thread_type: 'discussion' + }); + expect($('.thread-preview-body').length).toEqual(1); + }); + + it('should not show image when showThreadPreview is true', function() { + renderSingleThreadWithProps({ + thread_type: 'discussion', + body: '![customizedImageAltTitle].png' + }); + expect($('.thread-preview-body').text()).toEqual(''); + }); + + it('should not show MathJax when showThreadPreview is true', function() { + renderSingleThreadWithProps({ + thread_type: 'discussion', + body: '$$x^2 + sqrt(y)$$' + }); + expect($('.thread-preview-body').text()).toEqual(''); + }); + + it('should not be shown when showThreadPreview is false', function() { + var view, + discussion = new Discussion([]), + showThreadPreview = false; + view = makeView(discussion, showThreadPreview); + view.render(); + expect(view.$el.find('.thread-preview-body').length).toEqual(0); + }); + }); + + describe('read/unread state', function() { + it('adds never-read class to unread threads', function() { + var unreads = this.threads.filter(function(thread) { + return !thread.read && thread.unread_comments_count === thread.comments_count; + }).length; + + this.view = makeView(new Discussion(this.threads)); + this.view.render(); + expect(this.view.$('.never-read').length).toEqual(unreads); + }); + + it('shows a "x new" message for threads that are read, but have unread comments', function() { + var unreadThread = this.threads.filter(function(thread) { + return thread.read && thread.unread_comments_count !== thread.comments_count; + })[0], + newCommentsOnUnreadThread = unreadThread.unread_comments_count; + + this.view = makeView(new Discussion(this.threads)); + this.view.render(); + expect( + this.view.$('.forum-nav-thread-unread-comments-count') + .first() + .text() + .trim() + ).toEqual(newCommentsOnUnreadThread + ' new'); + }); + + it('should display every thread as read if hideReadState: true is passed to the constructor', function() { + this.view = makeView(new Discussion(this.threads), {hideReadState: true}); + this.view.render(); + expect(this.view.$('.never-read').length).toEqual(0); + }); + + it('does not show the "x new" indicator for any thread if hideReadState: true is passed', function() { + this.view = makeView(new Discussion(this.threads), {hideReadState: true}); + this.view.render(); + expect(this.view.$('.forum-nav-thread-unread-comments-count').length).toEqual(0); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_profile_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_profile_view_spec.js new file mode 100644 index 00000000..30d9549b --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_profile_view_spec.js @@ -0,0 +1,151 @@ +/* globals Discussion, DiscussionSpecHelper, DiscussionThreadProfileView, Thread */ +(function() { + 'use strict'; + + describe('DiscussionThreadProfileView', function() { + var checkBody, checkPostWithImages, makeThread, makeView, spyConvertMath; + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.threadData = { + id: '1', + body: 'dummy body', + discussion: new Discussion(), + abuse_flaggers: [], + commentable_id: 'dummy_discussion', + votes: { + up_count: '42' + }, + created_at: '2014-09-09T20:11:08Z' + }; + this.imageTag = ''; + }); + makeView = function(thread) { + var view; + view = new DiscussionThreadProfileView({ + model: thread + }); + spyConvertMath(view); + return view; + }; + makeThread = function(threadData) { + var thread; + thread = new Thread(threadData); + thread.discussion = new Discussion(); + return thread; + }; + spyConvertMath = function(view) { + return spyOn(view, 'convertMath').and.callFake(function() { + return this.model.set('markdownBody', this.model.get('body')); + }); + }; + checkPostWithImages = function(numberOfImages, truncatedText, threadData, imageTag) { + var expectedHtml, expectedText, i, testText, view, _i, _ref; + expectedHtml = '

'; + threadData.body = '

'; + testText = ''; + expectedText = ''; + if (truncatedText) { + testText = new Array(100).join('test '); + expectedText = testText.substring(0, 139) + '…'; + } else { + testText = 'Test body'; + expectedText = 'Test body'; + // I really have no idea what it is supposed to mean - probably just iteration, but better be safe + for ( + // eslint-disable-next-line no-multi-assign + i = _i = 0, _ref = numberOfImages - 1; + _ref >= 0 ? _i <= _ref : _i >= _ref; + i = _ref >= 0 ? ++_i : --_i + ) { + threadData.body += imageTag; + if (i === 0) { + expectedHtml += imageTag; + } else { + expectedHtml += 'image omitted'; + } + } + } + threadData.body = threadData.body + '' + testText + '

'; + if (numberOfImages > 1) { + expectedHtml = expectedHtml + '' + expectedText + + '

Some images in this post have been omitted

'; + } else { + expectedHtml = expectedHtml + '' + expectedText + '

'; + } + view = makeView(makeThread(threadData)); + view.render(); + return expect(view.$el.find('.post-body').html()).toEqual(expectedHtml); + }; + checkBody = function(truncated, view, threadData) { + var expectedOutput, inputHtmlStripped, outputHtmlStripped; + view.render(); + if (!truncated) { + expect(view.model.get('body')).toEqual(view.model.get('abbreviatedBody')); + return expect(view.$el.find('.post-body').html()).toEqual(threadData.body); + } else { + expect(view.model.get('body')).not.toEqual(view.model.get('abbreviatedBody')); + expect(view.$el.find('.post-body').html()).not.toEqual(threadData.body); + outputHtmlStripped = view.$el.find('.post-body').html().replace(/(<([^>]+)>)/ig, ''); + outputHtmlStripped = outputHtmlStripped.replace('Some images in this post have been omitted', ''); + outputHtmlStripped = outputHtmlStripped.replace('image omitted', ''); + inputHtmlStripped = threadData.body.replace(/(<([^>]+)>)/ig, ''); + expectedOutput = inputHtmlStripped.substring(0, 139) + '…'; + expect(outputHtmlStripped).toEqual(expectedOutput); + return expect(view.$el.find('.post-body').html().indexOf('…')).toBeGreaterThan(0); + } + }; + describe('Body markdown should be correct', function() { + var numImages, truncatedText, _i, _j, _len, _len1, _ref, _ref1; + it('untruncated text without markdown body', function() { + var view; + this.threadData.body = 'Test body'; + view = makeView(makeThread(this.threadData)); + return checkBody(false, view, this.threadData); + }); + it('truncated text without markdown body', function() { + var view; + this.threadData.body = new Array(100).join('test '); + view = makeView(makeThread(this.threadData)); + return checkBody(true, view, this.threadData); + }); + it('untruncated text with markdown body', function() { + var view; + this.threadData.body = '

' + this.imageTag + 'Google top search engine

'; + view = makeView(makeThread(this.threadData)); + return checkBody(false, view, this.threadData); + }); + it('truncated text with markdown body', function() { + var testText, view; + testText = new Array(100).join('test '); + this.threadData.body = '

' + this.imageTag + this.imageTag + '' + testText + '

'; + view = makeView(makeThread(this.threadData)); + return checkBody(true, view, this.threadData); + }); + _ref = [1, 2, 10]; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + numImages = _ref[_i]; + _ref1 = [true, false]; + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + truncatedText = _ref1[_j]; + it( + 'body with ' + numImages + ' images and ' + (truncatedText ? 'truncated' : 'untruncated') + + ' text', + // eslint-disable no-loop-func + // eslint-disable-next-line no-loop-func + function() { + return checkPostWithImages(numImages, truncatedText, this.threadData, this.imageTag); + } + // eslint-enable no-loop-func + ); + } + } + it('check the thread retrieve url', function() { + var thread; + thread = makeThread(this.threadData); + return expect(thread.urlFor('retrieve')) + .toBe('/courses/edX/999/test/discussion/forum/dummy_discussion/threads/1'); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_show_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_show_view_spec.js new file mode 100644 index 00000000..ce603770 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_show_view_spec.js @@ -0,0 +1,199 @@ +/* globals DiscussionSpecHelper, DiscussionThreadShowView, DiscussionUtil, DiscussionViewSpecHelper, Thread */ +(function() { + 'use strict'; + + var $$course_id = '$$course_id'; + describe('DiscussionThreadShowView', function() { + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals({}); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.user = DiscussionUtil.getUser(); + this.threadData = { + id: 'dummy', + user_id: this.user.id, + username: this.user.get('username'), + course_id: $$course_id, + title: 'dummy title', + body: 'this is a thread', + created_at: '2013-04-03T20:08:39Z', + abuse_flaggers: [], + votes: { + up_count: 42 + }, + thread_type: 'discussion', + closed: false, + pinned: false, + type: 'thread' + }; + this.thread = new Thread(this.threadData); + this.view = new DiscussionThreadShowView({ + model: this.thread + }); + this.view.setElement($('#fixture-element')); + return spyOn(this.view, 'convertMath'); + }); + describe('voting', function() { + it('renders the vote state correctly', function() { + return DiscussionViewSpecHelper.checkRenderVote(this.view, this.thread); + }); + it('votes correctly via click', function() { + return DiscussionViewSpecHelper.checkUpvote(this.view, this.thread, this.user, $.Event('click')); + }); + it('votes correctly via spacebar', function() { + return DiscussionViewSpecHelper.checkUpvote(this.view, this.thread, this.user, $.Event('keydown', { + which: 32 + })); + }); + it('unvotes correctly via click', function() { + return DiscussionViewSpecHelper.checkUnvote(this.view, this.thread, this.user, $.Event('click')); + }); + it('unvotes correctly via spacebar', function() { + return DiscussionViewSpecHelper.checkUnvote(this.view, this.thread, this.user, $.Event('keydown', { + which: 32 + })); + }); + }); + describe('pinning', function() { + var expectPinnedRendered; + expectPinnedRendered = function(view, model) { + var button, pinned; + pinned = model.get('pinned'); + button = view.$el.find('.action-pin'); + expect(button.hasClass('is-checked')).toBe(pinned); + return expect(button.attr('aria-checked')).toEqual(pinned.toString()); + }; + it('renders the pinned state correctly', function() { + this.view.render(); + expectPinnedRendered(this.view, this.thread); + this.thread.set('pinned', false); + this.view.render(); + expectPinnedRendered(this.view, this.thread); + this.thread.set('pinned', true); + this.view.render(); + return expectPinnedRendered(this.view, this.thread); + }); + it('exposes the pinning control only to authorized users', function() { + this.thread.updateInfo({ + ability: { + can_openclose: false + } + }); + this.view.render(); + expect(this.view.$el.find('.action-pin').closest('.is-hidden')).toExist(); + this.thread.updateInfo({ + ability: { + can_openclose: true + } + }); + this.view.render(); + return expect(this.view.$el.find('.action-pin').closest('.is-hidden')).not.toExist(); + }); + it('handles events correctly', function() { + this.view.render(); + return DiscussionViewSpecHelper.checkButtonEvents(this.view, 'togglePin', '.action-pin'); + }); + }); + describe('labels', function() { + var expectOneElement; + expectOneElement = function(view, selector, visible) { + var elements; + if (typeof visible === 'undefined' || visible === null) { + visible = true; + } + view.render(); + elements = view.$el.find(selector); + expect(elements.length).toEqual(1); + if (visible) { + return expect(elements).not.toHaveClass('is-hidden'); + } else { + return expect(elements).toHaveClass('is-hidden'); + } + }; + it('displays the closed label when appropriate', function() { + expectOneElement(this.view, '.post-label-closed', false); + this.thread.set('closed', true); + return expectOneElement(this.view, '.post-label-closed'); + }); + it('displays the pinned label when appropriate', function() { + expectOneElement(this.view, '.post-label-pinned', false); + this.thread.set('pinned', true); + return expectOneElement(this.view, '.post-label-pinned'); + }); + it('displays the reported label when appropriate for a non-staff user', function() { + expectOneElement(this.view, '.post-label-reported', false); + this.thread.set('abuse_flaggers', [DiscussionUtil.getUser().id]); + expectOneElement(this.view, '.post-label-reported'); + this.thread.set('abuse_flaggers', [DiscussionUtil.getUser().id + 1]); + return expectOneElement(this.view, '.post-label-reported', false); + }); + it('displays the reported label when appropriate for a flag moderator', function() { + DiscussionSpecHelper.makeModerator(); + expectOneElement(this.view, '.post-label-reported', false); + this.thread.set('abuse_flaggers', [DiscussionUtil.getUser().id]); + expectOneElement(this.view, '.post-label-reported'); + this.thread.set('abuse_flaggers', [DiscussionUtil.getUser().id + 1]); + return expectOneElement(this.view, '.post-label-reported'); + }); + }); + describe('author display', function() { + var checkUserLink; + beforeEach(function() { + return this.thread.set('user_url', 'test_user_url'); + }); + checkUserLink = function(element, is_ta, is_staff) { + expect(element.find('.username').length).toEqual(1); + expect(element.find('.username').text()).toEqual('test_user'); + expect(element.find('.username').attr('href')).toEqual('test_user_url'); + expect(element.find('.user-label-community-ta').length).toEqual(is_ta ? 1 : 0); + return expect(element.find('.user-label-staff').length).toEqual(is_staff ? 1 : 0); + }; + it('renders correctly for a student-authored thread', function() { + var $el; + $el = $('#fixture-element').html(this.view.getAuthorDisplay()); + return checkUserLink($el, false, false); + }); + it('renders correctly for a community TA-authored thread', function() { + var $el; + this.thread.set('community_ta_authored', true); + $el = $('#fixture-element').html(this.view.getAuthorDisplay()); + return checkUserLink($el, true, false); + }); + it('renders correctly for a staff-authored thread', function() { + var $el; + this.thread.set('staff_authored', true); + $el = $('#fixture-element').html(this.view.getAuthorDisplay()); + return checkUserLink($el, false, true); + }); + it('renders correctly for an anonymously-authored thread', function() { + var $el; + this.thread.set('username', null); + $el = $('#fixture-element').html(this.view.getAuthorDisplay()); + expect($el.find('.username').length).toEqual(0); + return expect($el.text()).toMatch(/^(\s*)anonymous(\s*)$/); + }); + }); + describe('cohorting', function() { + it('renders correctly for a unified thread', function() { + this.view.render(); + return expect(this.view.$('.group-visibility-label').text().trim()) + .toEqual('This post is visible to everyone.'); + }); + it('renders correctly for a divided thread', function() { + this.thread.set('group_id', '1'); + this.thread.set('group_name', 'Mock Cohort'); + this.view.is_commentable_divided = true; + this.view.render(); + return expect(this.view.$('.group-visibility-label').text().trim()) + .toEqual('This post is visible only to Mock Cohort.'); + }); + it('renders correctly for a grouped unified thread', function() { + this.thread.set('group_id', '1'); + this.thread.set('group_name', 'Mock Cohort'); + this.view.is_commentable_divided = false; + this.view.render(); + return expect(this.view.$('.group-visibility-label').text().trim()) + .toEqual('This post is visible to everyone.'); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_view_spec.js new file mode 100644 index 00000000..dfdf7008 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_thread_view_spec.js @@ -0,0 +1,367 @@ +/* global + _, Discussion, DiscussionThreadShowView, DiscussionViewSpecHelper, DiscussionSpecHelper, DiscussionThreadView, + DiscussionUtil, Thread, DiscussionContentView, ThreadResponseShowView +*/ +(function() { + 'use strict'; + + describe('DiscussionThreadView', function() { + var assertContentVisible, assertExpandedContentVisible, assertResponseCountAndPaginationCorrect, + createAjaxResponseJson, createTestResponseJson, postResponse, renderWithContent, renderWithTestResponses; + beforeEach(function() { + var deferred; + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + jasmine.clock().install(); + this.threadData = DiscussionViewSpecHelper.makeThreadWithProps({}); + this.thread = new Thread(this.threadData); + this.discussion = new Discussion(this.thread); + deferred = $.Deferred(); + spyOn($, 'ajax').and.returnValue(deferred); + spyOn(DiscussionThreadShowView.prototype, 'convertMath'); + spyOn(DiscussionContentView.prototype, 'makeWmdEditor'); + spyOn(DiscussionUtil, 'makeWmdEditor'); + spyOn(DiscussionUtil, 'setWmdContent'); + return spyOn(ThreadResponseShowView.prototype, 'convertMath'); + }); + afterEach(function() { + $.ajax.calls.reset(); + return jasmine.clock().uninstall(); + }); + + renderWithContent = function(view, content) { + $.ajax.and.callFake(function(params) { + params.success(createAjaxResponseJson(content, false), 'success'); + return { + always: function() { + } + }; + }); + view.render(); + return jasmine.clock().tick(100); + }; + renderWithTestResponses = function(view, count, options) { + var index; + return renderWithContent(view, _.extend({ + resp_total: count, + children: count > 0 ? (function() { + var _i, _results; + _results = []; + // eslint-disable-next-line no-multi-assign + for (index = _i = 1; count >= 1 ? _i <= count : _i >= count; index = count >= 1 ? ++_i : --_i) { + _results.push(createTestResponseJson(index)); + } + return _results; + }()) : [] + }, options)); + }; + createTestResponseJson = function(index) { + return { + user_id: window.user.id, + body: 'Response ' + index, + id: 'id_' + index, + created_at: '2015-01-01T22:20:28Z' + }; + }; + assertContentVisible = function(view, selector, visible) { + var content; + content = view.$el.find(selector); + expect(content.length).toBeGreaterThan(0); + return content.each(function(i, elem) { + return expect($(elem).is(':visible')).toEqual(visible); + }); + }; + assertExpandedContentVisible = function(view, expanded) { + expect(view.$el.hasClass('expanded')).toEqual(expanded); + assertContentVisible(view, '.post-extended-content', expanded); + assertContentVisible(view, '.forum-thread-expand', !expanded); + return assertContentVisible(view, '.forum-thread-collapse', expanded); + }; + assertResponseCountAndPaginationCorrect = function(view, countText, displayCountText, buttonText) { + expect(view.$el.find('.response-count').text()).toEqual(countText); + if (displayCountText) { + expect(view.$el.find('.response-display-count').text()).toEqual(displayCountText); + } else { + expect(view.$el.find('.response-display-count').length).toEqual(0); + } + if (buttonText) { + return expect(view.$el.find('.load-response-button').text()).toEqual(buttonText); + } else { + return expect(view.$el.find('.load-response-button').length).toEqual(0); + } + }; + createAjaxResponseJson = function(content, can_act) { + return { + content: content, + annotated_content_info: { + ability: { + editable: can_act, + can_delete: can_act, + can_reply: can_act, + can_vote: can_act + } + } + }; + }; + postResponse = function(view, index) { + var responseText, testResponseJson; + testResponseJson = createTestResponseJson(index); + responseText = testResponseJson.body; + spyOn(view, 'getWmdContent').and.returnValue(responseText); + $.ajax.and.callFake(function(params) { + expect(params.type).toEqual('POST'); + expect(params.data.body).toEqual(responseText); + params.success(createAjaxResponseJson(testResponseJson, true), 'success'); + return { + always: function() { + } + }; + }); + return view.$('.discussion-submit-post').click(); + }; + describe('closed and open Threads', function() { + var checkCommentForm, checkVoteDisplay, createDiscussionThreadView; + createDiscussionThreadView = function(originallyClosed) { + var discussion, thread, threadData, view; + threadData = DiscussionViewSpecHelper.makeThreadWithProps({ + closed: originallyClosed + }); + thread = new Thread(threadData); + discussion = new Discussion(thread); + view = new DiscussionThreadView({ + model: thread, + el: $('#fixture-element'), + course_settings: DiscussionSpecHelper.createTestCourseSettings() + }); + renderWithTestResponses(view, 1); + spyOn(DiscussionUtil, 'updateWithUndo').and.callFake(function(model, updates) { + return model.set(updates); + }); + return view; + }; + checkCommentForm = function(originallyClosed) { + var view; + view = createDiscussionThreadView(originallyClosed); + expect(view.$('.comment-form').closest('li').is(':visible')).toBe(!originallyClosed); + expect(view.$('.discussion-reply-new').is(':visible')).toBe(!originallyClosed); + view.$('.action-close').click(); + expect(view.$('.comment-form').closest('li').is(':visible')).toBe(originallyClosed); + return expect(view.$('.discussion-reply-new').is(':visible')).toBe(originallyClosed); + }; + checkVoteDisplay = function(originallyClosed) { + var view; + view = createDiscussionThreadView(originallyClosed); + expect(view.$('.thread-main-wrapper .action-vote').is(':visible')).toBe(!originallyClosed); + expect(view.$('.thread-main-wrapper .display-vote').is(':visible')).toBe(originallyClosed); + view.$('.action-close').click(); + expect(view.$('.action-vote').is(':visible')).toBe(originallyClosed); + return expect(view.$('.display-vote').is(':visible')).toBe(!originallyClosed); + }; + return function() { + it( + 'Test that when a closed thread is opened the comment form is displayed', + function() { return checkCommentForm(true); } + ); + it( + 'Test that when a open thread is closed the comment form is hidden', + function() { return checkCommentForm(false); } + ); + it( + 'Test that when a closed thread is opened the vote button is displayed and ' + + 'vote count is hidden', + function() { return checkVoteDisplay(true); } + ); + it( + 'Test that when a open thread is closed the vote button is hidden and ' + + 'vote count is displayed', + function() { return checkVoteDisplay(false); } + ); + }; + }); + describe('thread responses', function() { + beforeEach(function() { + this.view = new DiscussionThreadView({ + model: this.thread, + el: $('#fixture-element'), + course_settings: DiscussionSpecHelper.createTestCourseSettings() + }); + spyOn($.fn, 'focus'); + }); + describe('responses', function() { + it('can post a first response', function() { + renderWithTestResponses(this.view, 0); + postResponse(this.view, 1); + expect(this.view.$('.forum-response').length).toBe(1); + expect(this.view.$('.post-actions-list').find('.action-edit').parent('.is-hidden').length).toBe(1); + expect(this.view.$('.response-actions-list').find('.action-edit') + .parent().not('.is-hidden').length).toBe(1); + expect(document.activeElement === this.view.$('.forum-response')[0]); + }); + it('can post a second response', function() { + renderWithTestResponses(this.view, 1); + expect(this.view.$('.forum-response').length).toBe(1); + expect(this.view.$('.post-actions-list').find('.action-edit').parent('.is-hidden').length).toBe(1); + expect(this.view.$('.response-actions-list').find('.action-edit').parent() + .not('.is-hidden').length).toBe(1); + postResponse(this.view, 2); + expect(this.view.$('.forum-response').length).toBe(2); + expect(this.view.$('.post-actions-list').find('.action-edit').parent('.is-hidden').length).toBe(1); + expect(this.view.$('.response-actions-list').find('.action-edit').parent() + .not('.is-hidden').length).toBe(2); + expect(document.activeElement === this.view.$('.forum-response')[0]); + }); + }); + describe('response count and pagination', function() { + it('correctly render for a thread with no responses', function() { + renderWithTestResponses(this.view, 0); + return assertResponseCountAndPaginationCorrect(this.view, '0 responses', null, null); + }); + it('correctly render for a thread with one response', function() { + renderWithTestResponses(this.view, 1); + return assertResponseCountAndPaginationCorrect( + this.view, '1 response', 'Showing all responses', null + ); + }); + it('correctly render for a thread with one additional page', function() { + renderWithTestResponses(this.view, 1, { + resp_total: 2 + }); + return assertResponseCountAndPaginationCorrect( + this.view, '2 responses', 'Showing first response', 'Load all responses' + ); + }); + it('correctly render for a thread with multiple additional pages', function() { + renderWithTestResponses(this.view, 2, { + resp_total: 111 + }); + return assertResponseCountAndPaginationCorrect( + this.view, '111 responses', 'Showing first 2 responses', 'Load next 100 responses' + ); + }); + describe('on clicking the load more button', function() { + beforeEach(function() { + renderWithTestResponses(this.view, 1, { + resp_total: 5 + }); + return assertResponseCountAndPaginationCorrect( + this.view, '5 responses', 'Showing first response', 'Load all responses' + ); + }); + it('correctly re-render when all threads have loaded', function() { + renderWithTestResponses(this.view, 5, { + resp_total: 5 + }); + this.view.$el.find('.load-response-button').click(); + return assertResponseCountAndPaginationCorrect( + this.view, '5 responses', 'Showing all responses', null + ); + }); + it('correctly re-render when one page remains', function() { + renderWithTestResponses(this.view, 3, { + resp_total: 42 + }); + this.view.$el.find('.load-response-button').click(); + return assertResponseCountAndPaginationCorrect( + this.view, '42 responses', 'Showing first 3 responses', 'Load all responses' + ); + }); + it('correctly re-render when multiple pages remain', function() { + renderWithTestResponses(this.view, 3, { + resp_total: 111 + }); + this.view.$el.find('.load-response-button').click(); + return assertResponseCountAndPaginationCorrect( + this.view, '111 responses', 'Showing first 3 responses', 'Load next 100 responses' + ); + }); + }); + }); + }); + describe('for question threads', function() { + var generateContent, renderTestCase; + beforeEach(function() { + this.thread.set('thread_type', 'question'); + this.view = new DiscussionThreadView({ + model: this.thread, + el: $('#fixture-element'), + course_settings: DiscussionSpecHelper.createTestCourseSettings() + }); + }); + generateContent = function(idStart, idEnd) { + return _.map(_.range(idStart, idEnd), function(i) { + return createTestResponseJson(i); + }); + }; + renderTestCase = function(view, numEndorsed, numNonEndorsed) { + renderWithContent(view, { + endorsed_responses: generateContent(0, numEndorsed), + non_endorsed_responses: generateContent(numEndorsed, numEndorsed + numNonEndorsed), + non_endorsed_resp_total: numNonEndorsed + }); + expect(view.$('.js-marked-answer-list .discussion-response').length).toEqual(numEndorsed); + expect(view.$('.js-response-list .discussion-response').length).toEqual(numNonEndorsed); + return assertResponseCountAndPaginationCorrect( + view, '' + numNonEndorsed + ' ' + (numEndorsed ? 'other ' : '') + + (numNonEndorsed === 1 ? 'response' : 'responses'), + numNonEndorsed ? 'Showing all responses' : null, null + ); + }; + _.each({ + no: 0, + one: 1, + many: 5 + }, function(numEndorsed, endorsedDesc) { + return _.each({ + no: 0, + one: 1, + many: 5 + }, function(numNonEndorsed, nonEndorsedDesc) { + it( + 'renders correctly with ' + endorsedDesc + ' marked answer(s) and ' + nonEndorsedDesc + + ' response(s)', + function() { return renderTestCase(this.view, numEndorsed, numNonEndorsed); } + ); + }); + }); + it('handles pagination correctly', function() { + renderWithContent(this.view, { + endorsed_responses: generateContent(0, 2), + non_endorsed_responses: generateContent(3, 6), + non_endorsed_resp_total: 42 + }); + DiscussionViewSpecHelper.setNextResponseContent({ + endorsed_responses: generateContent(0, 3), + non_endorsed_responses: generateContent(6, 9), + non_endorsed_resp_total: 41 + }); + this.view.$el.find('.load-response-button').click(); + expect($('.js-marked-answer-list .discussion-response').length).toEqual(3); + expect($('.js-response-list .discussion-response').length).toEqual(6); + return assertResponseCountAndPaginationCorrect( + this.view, '41 other responses', 'Showing first 6 responses', 'Load all responses' + ); + }); + }); + describe('post restrictions', function() { + beforeEach(function() { + this.thread.attributes.ability = _.extend(this.thread.attributes.ability, { + can_report: false, + can_vote: false + }); + this.view = new DiscussionThreadView({ + model: this.thread, + el: $('#fixture-element'), + course_settings: DiscussionSpecHelper.createTestCourseSettings() + }); + }); + it("doesn't show report option if can_report ability is disabled", function() { + this.view.render(); + return expect(this.view.$el.find('.action-report').closest('.actions-item')).toHaveClass('is-hidden'); + }); + it("doesn't show voting button if can_vote ability is disabled", function() { + this.view.render(); + return expect(this.view.$el.find('.action-vote').closest('.actions-item')).toHaveClass('is-disabled'); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_topic_menu_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_topic_menu_view_spec.js new file mode 100644 index 00000000..ece16187 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_topic_menu_view_spec.js @@ -0,0 +1,110 @@ +/* globals DiscussionTopicMenuView, DiscussionSpecHelper, DiscussionCourseSettings, _ */ +(function() { + 'use strict'; + + describe('DiscussionTopicMenuView', function() { + var ExpectedDiscussionId; + beforeEach(function() { + this.createTopicView = function(options) { + options = _.extend({ + course_settings: this.course_settings, + // eslint-disable-next-line no-void + topicId: void 0 + }, options); + this.view = new DiscussionTopicMenuView(options); + this.view.render().appendTo('#fixture-element'); + }; + + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.course_settings = new DiscussionCourseSettings({ + category_map: { + subcategories: { + 'Basic Question Types': { + subcategories: {}, + children: [ + ['Selection From Options', 'entry'], + ['Numerical Input', 'entry'], + ['Very long category name', 'entry'], + ['Very very very very long category name', 'entry'], + ['Name with HTML', 'entry'] + ], + entries: { + 'Selection From Options': { + sort_key: null, + is_divided: true, + id: 'cba3e4cd91d0466b9ac50926e495b76f' + }, + 'Numerical Input': { + sort_key: null, + is_divided: false, + id: 'c49f0dfb8fc94c9c8d9999cc95190c56' + }, + 'Very long category name': { + sort_key: null, + is_divided: false, + id: 'c49f0dfb8fc94c9c8d9999cc95190c59' + }, + 'Very very very very long category name': { + sort_key: null, + is_divided: false, + id: 'c49f0dfb8fc94c9c8d9999cc95190e32' + }, + 'Name with HTML': { + sort_key: null, + is_divided: false, + id: 'c49f0dfb8fc94c9c8d9999cc95190363' + } + + } + }, + 'Example Inline Discussion': { + subcategories: {}, + children: [ + ['What Are Your Goals for Creating a MOOC?', 'entry'] + ], + entries: { + 'What Are Your Goals for Creating a MOOC?': { + sort_key: null, + is_divided: true, + id: 'cba3e4cd91d0466b9ac50926e495b931' + } + } + } + }, + children: [ + ['Basic Question Types', 'subcategory'], + ['Example Inline Discussion', 'subcategory'] + ], + entries: {} + }, + is_cohorted: true + }); + }); + + it('defaults to first subtopic', function() { + this.createTopicView(); + expect(this.view.$el.find('option.topic-title:selected').text()).toEqual('Selection From Options'); + }); + + it('titles are escaped before display', function() { + this.createTopicView(); + $(this.view.$el.find('option.topic-title')[4]).prop('selected', true); + expect(this.view.$el.find('option.topic-title:selected').text()).toContain(''); + }); + + it('appropriate topic is selected if topicId is passed', function() { + this.createTopicView({ + topicId: 'c49f0dfb8fc94c9c8d9999cc95190c56' + }); + this.view.render(); + expect(this.view.$el.find('option.topic-title:selected').text()).toEqual('Numerical Input'); + }); + it('if general topic is not present then topiId is set to first discussion topicId', function() { + this.createTopicView({}); + this.view.render(); + ExpectedDiscussionId = this.view.$('.post-topic option').first().data('discussion-id'); + expect(this.view.getCurrentTopicId()).toEqual(ExpectedDiscussionId); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/discussion_view_spec_helper.js b/xblocks_contrib/discussion/assets/static/spec/view/discussion_view_spec_helper.js new file mode 100644 index 00000000..cca39d0c --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/discussion_view_spec_helper.js @@ -0,0 +1,147 @@ +/* globals DiscussionUtil */ +(function() { + 'use strict'; + + var __indexOf = [].indexOf || function(item) { + for (var i = 0, l = this.length; i < l; i++) { + if (i in this && this[i] === item) { + return i; + } + } + return -1; + }; + + this.DiscussionViewSpecHelper = (function() { + var triggerVoteEvent; + + function DiscussionViewSpecHelper() { + } + + DiscussionViewSpecHelper.makeThreadWithProps = function(props) { + var thread; + thread = { + id: 'dummy_id', + thread_type: 'discussion', + pinned: false, + endorsed: false, + votes: { + up_count: '0' + }, + read: false, + unread_comments_count: 0, + comments_count: 0, + abuse_flaggers: [], + body: '', + title: 'dummy title', + created_at: '2014-08-18T01:02:03Z', + ability: { + can_delete: false, + can_reply: true, + can_vote: false, + editable: false + } + }; + return $.extend(thread, props); + }; + + DiscussionViewSpecHelper.checkVoteClasses = function(view) { + var action_button, display_button; + view.render(); + display_button = view.$el.find('.display-vote'); + expect(display_button.hasClass('is-hidden')).toBe(true); + action_button = view.$el.find('.action-vote'); + return expect(action_button).not.toHaveAttr('style', 'display: inline; '); + }; + + DiscussionViewSpecHelper.expectVoteRendered = function(view, model, user) { + var button; + button = view.$el.find('.action-vote'); + expect(button.hasClass('is-checked')).toBe(user.voted(model)); + expect(button.attr('aria-checked')).toEqual(user.voted(model).toString()); + expect(button.find('.vote-count').text()).toMatch('^' + (model.get('votes').up_count) + ' Votes?$'); + return expect(button.find('.sr.js-sr-vote-count').text()) + .toMatch('^there are currently ' + (model.get('votes').up_count) + ' votes?$'); + }; + + DiscussionViewSpecHelper.checkRenderVote = function(view, model) { + view.render(); + DiscussionViewSpecHelper.expectVoteRendered(view, model, window.user); + window.user.vote(model); + view.render(); + DiscussionViewSpecHelper.expectVoteRendered(view, model, window.user); + window.user.unvote(model); + view.render(); + return DiscussionViewSpecHelper.expectVoteRendered(view, model, window.user); + }; + + triggerVoteEvent = function(view, event, expectedUrl) { + var deferred; + deferred = $.Deferred(); + spyOn($, 'ajax').and.callFake(function(params) { + expect(params.url.toString()).toEqual(expectedUrl); + return deferred; + }); + view.render(); + view.$el.find('.action-vote').trigger(event); + expect($.ajax).toHaveBeenCalled(); + return deferred.resolve(); + }; + + DiscussionViewSpecHelper.checkUpvote = function(view, model, user, event) { + var initialVoteCount, _ref, _ref1; + expect((_ref = model.id, __indexOf.call(user.get('upvoted_ids'), _ref) >= 0)).toBe(false); + initialVoteCount = model.get('votes').up_count; + triggerVoteEvent(view, event, DiscussionUtil.urlFor('upvote_' + (model.get('type')), model.id) + '?ajax=1'); + expect((_ref1 = model.id, __indexOf.call(user.get('upvoted_ids'), _ref1) >= 0)).toBe(true); + return expect(model.get('votes').up_count).toEqual(initialVoteCount + 1); + }; + + DiscussionViewSpecHelper.checkUnvote = function(view, model, user, event) { + var initialVoteCount, _ref; + user.vote(model); + expect((_ref = model.id, __indexOf.call(user.get('upvoted_ids'), _ref) >= 0)).toBe(true); + initialVoteCount = model.get('votes').up_count; + triggerVoteEvent( + view, event, DiscussionUtil.urlFor('undo_vote_for_' + (model.get('type')), model.id) + '?ajax=1' + ); + expect(user.get('upvoted_ids')).toEqual([]); + return expect(model.get('votes').up_count).toEqual(initialVoteCount - 1); + }; + + DiscussionViewSpecHelper.checkButtonEvents = function(view, viewFunc, buttonSelector) { + var button, spy; + spy = spyOn(view, viewFunc); + button = view.$el.find(buttonSelector); + button.click(); + expect(spy).toHaveBeenCalled(); + spy.calls.reset(); + button.trigger($.Event('keydown', { + which: 13 + })); + expect(spy).not.toHaveBeenCalled(); + spy.calls.reset(); + button.trigger($.Event('keydown', { + which: 32 + })); + return expect(spy).toHaveBeenCalled(); + }; + + DiscussionViewSpecHelper.checkVoteButtonEvents = function(view) { + return this.checkButtonEvents(view, 'toggleVote', '.action-vote'); + }; + + DiscussionViewSpecHelper.setNextResponseContent = function(content) { + return $.ajax.and.callFake(function(params) { + params.success({ + content: content + }); + return { + always: function() { + } + }; + }); + }; + + return DiscussionViewSpecHelper; + }()); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/new_post_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/new_post_view_spec.js new file mode 100644 index 00000000..b388526b --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/new_post_view_spec.js @@ -0,0 +1,347 @@ +/* globals Discussion, DiscussionCourseSettings, DiscussionSpecHelper, DiscussionUtil, NewPostView */ +(function() { + 'use strict'; + + describe('NewPostView', function() { + var checkVisibility; + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + window.$$course_id = 'edX/999/test'; + spyOn(DiscussionUtil, 'makeWmdEditor').and.callFake(function($content, $local, cls_identifier) { + return $local('.' + cls_identifier).html(''); + }); + this.discussion = new Discussion([], { + pages: 1 + }); + }); + checkVisibility = function(view, expectedVisible, expectedDisabled, render) { + var disabled, group_disabled; + if (render) { + view.render(); + } + expect(view.$('.group-selector-wrapper').is(':visible') || false).toEqual(expectedVisible); + disabled = view.$('.js-group-select').prop('disabled') || false; + group_disabled = view.$('.group-selector-wrapper').hasClass('disabled'); + if (expectedVisible && !expectedDisabled) { + expect(disabled).toEqual(false); + return expect(group_disabled).toEqual(false); + } else if (expectedDisabled) { + expect(disabled).toEqual(true); + return expect(group_disabled).toEqual(true); + } + }; + describe('group selector', function() { + beforeEach(function() { + this.course_settings = new DiscussionCourseSettings({ + category_map: { + children: [['Topic', 'entry'], ['General', 'entry'], ['Not Cohorted', 'entry']], + entries: { + Topic: { + is_divided: true, + id: 'topic' + }, + General: { + is_divided: true, + id: 'general' + }, + 'Not Cohorted': { + is_divided: false, + id: 'not-cohorted' + } + } + }, + allow_anonymous: false, + allow_anonymous_to_peers: false, + is_discussion_division_enabled: true, + groups: [ + { + id: 1, + name: 'Cohort1' + }, { + id: 2, + name: 'Cohort2' + } + ] + }); + this.view = new NewPostView({ + el: $('#fixture-element'), + collection: this.discussion, + course_settings: this.course_settings, + is_commententable_cohorted: true, + mode: 'tab' + }); + }); + it('is not visible to students', function() { + return checkVisibility(this.view, false, false, true); + }); + it('allows TAs to see the group selector when the topic is divided', function() { + DiscussionSpecHelper.makeTA(); + return checkVisibility(this.view, true, false, true); + }); + it('allows moderators to see the group selector when the topic is divided', function() { + DiscussionSpecHelper.makeModerator(); + return checkVisibility(this.view, true, false, true); + }); + it('only enables the group selector when applicable', function() { + DiscussionSpecHelper.makeModerator(); + checkVisibility(this.view, true, false, true); + + $('option:contains(Not Cohorted)').prop('selected', true); + $('.post-topic').trigger('change'); + checkVisibility(this.view, true, true, false); + + $('option:contains(Topic)').prop('selected', true); + $('.post-topic').trigger('change'); + return checkVisibility(this.view, true, false, false); + }); + it('visibility message changes when group is changed', function() { + DiscussionSpecHelper.makeModerator(); + checkVisibility(this.view, true, false, true); + + $('option:contains(Topic)').prop('selected', true); + $('.post-topic').trigger('change'); + expect($('.js-group-select option:selected').text()) + .toEqual('All Groups'); + expect($('.group-visibility').text().trim()) + .toEqual('This post will be visible only to All Groups.'); + + $('.js-group-select option:contains(Cohort1)').prop('selected', true); + $('.js-group-select').trigger('change'); + expect($('.js-group-select option:selected').text()) + .toEqual('Cohort1'); + expect($('.group-visibility').text().trim()) + .toEqual('This post will be visible only to Cohort1.'); + return checkVisibility(this.view, true, false, false); + }); + it('allows the user to make a group selection', function() { + var expectedGroupId, + self = this; + DiscussionSpecHelper.makeModerator(); + this.view.render(); + expectedGroupId = null; + DiscussionSpecHelper.makeAjaxSpy(function(params) { + expect(params.data.group_id).toEqual(expectedGroupId); + }); + return _.each(['1', '2', ''], function(groupIdStr) { + expectedGroupId = groupIdStr; + self.view.$('.js-group-select').val(groupIdStr); + self.view.$('.js-post-title').val('dummy title'); + self.view.$('.js-post-body textarea').val('dummy body'); + self.view.$('.forum-new-post-form').submit(); + expect($.ajax).toHaveBeenCalled(); + self.view.$('.forum-new-post-form').prop('disabled', false); + return $.ajax.calls.reset(); + }); + }); + }); + describe('always divide inline discussions ', function() { + beforeEach(function() { + this.course_settings = new DiscussionCourseSettings({ + category_map: { + children: [], + entries: {} + }, + allow_anonymous: false, + allow_anonymous_to_peers: false, + is_discussion_division_enabled: true, + groups: [ + { + id: 1, + name: 'Cohort1' + }, { + id: 2, + name: 'Cohort2' + } + ] + }); + this.view = new NewPostView({ + el: $('#fixture-element'), + collection: this.discussion, + course_settings: this.course_settings, + mode: 'tab' + }); + }); + it('disables the group menu if it is set false', function() { + DiscussionSpecHelper.makeModerator(); + this.view.is_commentable_divided = false; + return checkVisibility(this.view, true, true, true); + }); + it('enables the group menu if it is set true', function() { + DiscussionSpecHelper.makeModerator(); + this.view.is_commentable_divided = true; + return checkVisibility(this.view, true, false, true); + }); + it('is not visible to students when set false', function() { + this.view.is_commentable_divided = false; + return checkVisibility(this.view, false, false, true); + }); + it('is not visible to students when set true', function() { + this.view.is_commentable_divided = true; + return checkVisibility(this.view, false, false, true); + }); + }); + describe('cancel post resets form ', function() { + var checkPostCancelReset; + beforeEach(function() { + this.course_settings = new DiscussionCourseSettings({ + allow_anonymous_to_peers: true, + allow_anonymous: true, + category_map: { + subcategories: { + 'Week 1': { + subcategories: {}, + children: [ + ['Topic-Level Student-Visible Label', 'entry'] + ], + entries: { + 'Topic-Level Student-Visible Label': { + sort_key: null, + is_divided: false, + id: '2b3a858d0c884eb4b272dbbe3f2ffddd' + } + } + } + }, + children: [ + ['General', 'entry'], + ['Week 1', 'subcategory'] + ], + entries: { + General: { + sort_key: 'General', + is_divided: false, + id: 'i4x-waqastest-waqastest-course-waqastest' + } + } + } + }); + }); + checkPostCancelReset = function(mode, discussion, course_settings) { + var eventSpy, view; + view = new NewPostView({ + el: $('#fixture-element'), + collection: discussion, + course_settings: course_settings, + mode: mode + }); + view.render(); + eventSpy = jasmine.createSpy('eventSpy'); + view.listenTo(view, 'newPost:cancel', eventSpy); + view.$('.post-errors').html("
  • Title can't be empty
  • "); + view.$("label[for$='post-type-question']").click(); + view.$('.js-post-title').val('Test Title'); + view.$('.js-post-body textarea').val('Test body'); + view.$('.wmd-preview p').html('Test body'); + view.$('input[name=follow]').prop('checked', false); + view.$('input[name=anonymous]').prop('checked', true); + view.$('input[name=anonymous_to_peers]').prop('checked', true); + if (mode === 'tab') { + view.$("a[data-discussion-id='2b3a858d0c884eb4b272dbbe3f2ffddd']").click(); + } + view.$('.cancel').click(); + expect(eventSpy).toHaveBeenCalled(); + expect(view.$('.post-errors').html()).toEqual(''); + expect($("input[id$='post-type-discussion']")).toBeChecked(); + expect($("input[id$='post-type-question']")).not.toBeChecked(); + expect(view.$('.js-post-title').val()).toEqual(''); + expect(view.$('.js-post-body textarea').val()).toEqual(''); + expect(view.$('input[name=follow]')).toBeChecked(); + expect(view.$('input[name=anonymous]')).not.toBeChecked(); + expect(view.$('input[name=anonymous_to_peers]')).not.toBeChecked(); + if (mode === 'tab') { + return expect(view.$('.post-topic option:selected').text()).toEqual('General'); + } + }; + return _.each(['tab', 'inline'], function(mode) { + it('resets the form in ' + mode + ' mode', function() { + return checkPostCancelReset(mode, this.discussion, this.course_settings); + }); + }); + }); + describe('default topic ', function() { + beforeEach(function() { + this.course_settings = new DiscussionCourseSettings({ + allow_anonymous_to_peers: true, + allow_anonymous: true, + category_map: { + subcategories: { + 'Week 1': { + subcategories: {}, + children: [ + ['Topic-Level Student-Visible Label', 'entry'] + ], + entries: { + 'Topic-Level Student-Visible Label': { + sort_key: null, + is_divided: false, + id: '2b3a858d0c884eb4b272dbbe3f2ffddd' + } + } + } + }, + children: [ + ['First topic', 'entry'], + ['Week 1', 'subcategory'] + ], + entries: { + 'First topic': { + sort_key: 'First topic', + is_divided: false, + id: 'i4x-waqastest-waqastest-course-waqastest' + } + } + } + }); + }); + + it('should be the first topic if General is not found', function() { + var eventSpy, view; + view = new NewPostView({ + el: $('#fixture-element'), + collection: this.discussion, + course_settings: this.course_settings, + mode: 'tab' + }); + view.render(); + eventSpy = jasmine.createSpy('eventSpy'); + view.listenTo(view, 'newPost:cancel', eventSpy); + view.$('.post-errors').html("
  • Title can't be empty
  • "); + view.$("label[for$='post-type-question']").click(); + view.$('.js-post-title').val('Test Title'); + view.$('.js-post-body textarea').val('Test body'); + view.$('.wmd-preview p').html('Test body'); + view.$('input[name=follow]').prop('checked', false); + view.$('input[name=anonymous]').prop('checked', true); + view.$('input[name=anonymous_to_peers]').prop('checked', true); + view.$("a[data-discussion-id='2b3a858d0c884eb4b272dbbe3f2ffddd']").click(); + view.$('.cancel').click(); + expect(view.$('.post-topic option:selected').text()).toEqual('First topic'); + }); + }); + it('posts to the correct URL', function() { + var topicId, view; + topicId = 'test_topic'; + spyOn($, 'ajax').and.callFake(function(params) { + expect(params.url.path()).toEqual(DiscussionUtil.urlFor('create_thread', topicId)); + return { + always: function() { + } + }; + }); + view = new NewPostView({ + el: $('#fixture-element'), + collection: this.discussion, + course_settings: new DiscussionCourseSettings({ + allow_anonymous: false, + allow_anonymous_to_peers: false + }), + mode: 'inline', + topicId: topicId + }); + view.render(); + view.$('.forum-new-post-form').submit(); + return expect($.ajax).toHaveBeenCalled(); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/response_comment_show_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/response_comment_show_view_spec.js new file mode 100644 index 00000000..d210ead0 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/response_comment_show_view_spec.js @@ -0,0 +1,121 @@ +/* globals DiscussionSpecHelper, DiscussionUtil, DiscussionViewSpecHelper, ResponseCommentShowView */ +(function() { + 'use strict'; + + describe('ResponseCommentShowView', function() { + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.comment = new Comment({ + id: '01234567', + user_id: '567', + course_id: 'edX/999/test', + body: 'this is a response', + created_at: '2013-04-03T20:08:39Z', + abuse_flaggers: ['123'], + roles: [] + }); + this.view = new ResponseCommentShowView({ + model: this.comment + }); + return spyOn(this.view, 'convertMath'); + }); + it('defines the tag', function() { + expect($('#jasmine-fixtures')).toExist(); + expect(this.view.tagName).toBeDefined(); + return expect(this.view.el.tagName.toLowerCase()).toBe('li'); + }); + it('is tied to the model', function() { + return expect(this.view.model).toBeDefined(); + }); + describe('rendering', function() { + beforeEach(function() { + return spyOn(this.view, 'renderAttrs'); + }); + it('can be flagged for abuse', function() { + this.comment.flagAbuse(); + return expect(this.comment.get('abuse_flaggers')).toEqual(['123', '567']); + }); + it('can be unflagged for abuse', function() { + var temp_array; + temp_array = []; + temp_array.push(window.user.get('id')); + this.comment.set('abuse_flaggers', temp_array); + this.comment.unflagAbuse(); + return expect(this.comment.get('abuse_flaggers')).toEqual([]); + }); + }); + describe('_delete', function() { + it('triggers on the correct events', function() { + DiscussionUtil.loadRoles([]); + this.comment.updateInfo({ + ability: { + can_delete: true + } + }); + this.view.render(); + return DiscussionViewSpecHelper.checkButtonEvents(this.view, '_delete', '.action-delete'); + }); + it('triggers the delete event', function() { + var triggerTarget; + triggerTarget = jasmine.createSpy(); + this.view.bind('comment:_delete', triggerTarget); + this.view._delete(); + return expect(triggerTarget).toHaveBeenCalled(); + }); + }); + describe('edit', function() { + it('triggers on the correct events', function() { + DiscussionUtil.loadRoles([]); + this.comment.updateInfo({ + ability: { + can_edit: true + } + }); + this.view.render(); + return DiscussionViewSpecHelper.checkButtonEvents(this.view, 'edit', '.action-edit'); + }); + it('triggers comment:edit when the edit button is clicked', function() { + var triggerTarget; + triggerTarget = jasmine.createSpy(); + this.view.bind('comment:edit', triggerTarget); + this.view.edit(); + return expect(triggerTarget).toHaveBeenCalled(); + }); + }); + describe('labels', function() { + var expectOneElement; + expectOneElement = function(view, selector, visible) { + var elements; + if (typeof visible === 'undefined' || visible === null) { + visible = true; + } + view.render(); + elements = view.$el.find(selector); + expect(elements.length).toEqual(1); + if (visible) { + return expect(elements).not.toHaveClass('is-hidden'); + } else { + return expect(elements).toHaveClass('is-hidden'); + } + }; + it('displays the reported label when appropriate for a non-staff user', function() { + this.comment.set('abuse_flaggers', []); + expectOneElement(this.view, '.post-label-reported', false); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id]); + expectOneElement(this.view, '.post-label-reported'); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id + 1]); + return expectOneElement(this.view, '.post-label-reported', false); + }); + it('displays the reported label when appropriate for a flag moderator', function() { + DiscussionSpecHelper.makeModerator(); + this.comment.set('abuse_flaggers', []); + expectOneElement(this.view, '.post-label-reported', false); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id]); + expectOneElement(this.view, '.post-label-reported'); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id + 1]); + return expectOneElement(this.view, '.post-label-reported'); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/response_comment_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/response_comment_view_spec.js new file mode 100644 index 00000000..e7975947 --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/response_comment_view_spec.js @@ -0,0 +1,204 @@ +/* globals DiscussionSpecHelper, DiscussionUtil, ResponseCommentView, ResponseCommentShowView, user */ +(function() { + 'use strict'; + + var $$course_id = '$$course_id'; + + describe('ResponseCommentView', function() { + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals({}); + this.comment = new Comment({ + id: '01234567', + user_id: user.id, + course_id: $$course_id, + body: 'this is a response', + created_at: '2013-04-03T20:08:39Z', + abuse_flaggers: ['123'], + roles: ['Student'] + }); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.view = new ResponseCommentView({ + model: this.comment, + el: $('#fixture-element') + }); + spyOn(ResponseCommentShowView.prototype, 'convertMath'); + spyOn(DiscussionUtil, 'makeWmdEditor'); + return this.view.render(); + }); + describe('_delete', function() { + var setAjaxResult; + beforeEach(function() { + this.comment.updateInfo({ + ability: { + can_delete: true + } + }); + this.event = DiscussionSpecHelper.makeEventSpy(); + this.event.target = $('body'); + spyOn(this.comment, 'remove'); + spyOn(this.view.$el, 'remove'); + $(this.event.target).prop('disabled', false); + }); + setAjaxResult = function(isSuccess) { + return spyOn($, 'ajax').and.callFake(function(params) { + (isSuccess ? params.success : params.error)({}); + return { + always: function() { + } + }; + }); + }; + it('requires confirmation before deleting', function() { + spyOn(window, 'confirm').and.returnValue(false); + setAjaxResult(true); + this.view._delete(this.event); + expect(window.confirm).toHaveBeenCalled(); + expect($.ajax).not.toHaveBeenCalled(); + return expect(this.comment.remove).not.toHaveBeenCalled(); + }); + it('removes the deleted comment object', function() { + setAjaxResult(true); + this.view._delete(this.event); + expect(this.comment.remove).toHaveBeenCalled(); + return expect(this.view.$el.remove).toHaveBeenCalled(); + }); + it('calls the ajax comment deletion endpoint', function() { + setAjaxResult(true); + this.view._delete(this.event); + expect(this.event.preventDefault).toHaveBeenCalled(); + expect($.ajax).toHaveBeenCalled(); + return expect($.ajax.calls.mostRecent().args[0].url._parts.path) + .toEqual('/courses/edX/999/test/discussion/comments/01234567/delete'); + }); + it('handles ajax errors', function() { + spyOn(DiscussionUtil, 'discussionAlert'); + setAjaxResult(false); + this.view._delete(this.event); + expect(this.event.preventDefault).toHaveBeenCalled(); + expect($.ajax).toHaveBeenCalled(); + expect(this.comment.remove).not.toHaveBeenCalled(); + expect(this.view.$el.remove).not.toHaveBeenCalled(); + return expect(DiscussionUtil.discussionAlert).toHaveBeenCalled(); + }); + it('does not delete a comment if the permission is false', function() { + this.comment.updateInfo({ + ability: { + can_delete: false + } + }); + spyOn(window, 'confirm'); + setAjaxResult(true); + this.view._delete(this.event); + expect(window.confirm).not.toHaveBeenCalled(); + expect($.ajax).not.toHaveBeenCalled(); + expect(this.comment.remove).not.toHaveBeenCalled(); + return expect(this.view.$el.remove).not.toHaveBeenCalled(); + }); + }); + describe('renderShowView', function() { + it('renders the show view, removes the edit view, and registers event handlers', function() { + spyOn(this.view, '_delete'); + spyOn(this.view, 'edit'); + this.view.renderEditView(); + this.view.renderShowView(); + this.view.showView.trigger('comment:_delete', DiscussionSpecHelper.makeEventSpy()); + expect(this.view._delete).toHaveBeenCalled(); + this.view.showView.trigger('comment:edit', DiscussionSpecHelper.makeEventSpy()); + expect(this.view.edit).toHaveBeenCalled(); + return expect(this.view.$('.edit-post-form#comment_' + this.comment.id)) + .not.toHaveClass('edit-post-form'); + }); + }); + describe('renderEditView', function() { + it('renders the edit view, removes the show view, and registers event handlers', function() { + spyOn(this.view, 'update'); + spyOn(this.view, 'cancelEdit'); + this.view.renderEditView(); + this.view.editView.trigger('comment:update', DiscussionSpecHelper.makeEventSpy()); + expect(this.view.update).toHaveBeenCalled(); + this.view.editView.trigger('comment:cancel_edit', DiscussionSpecHelper.makeEventSpy()); + expect(this.view.cancelEdit).toHaveBeenCalled(); + return expect(this.view.$('.edit-post-form#comment_' + this.comment.id)).toHaveClass('edit-post-form'); + }); + }); + describe('edit', function() { + it('triggers the appropriate event and switches to the edit view', function() { + var editTarget; + spyOn(this.view, 'renderEditView'); + editTarget = jasmine.createSpy(); + this.view.bind('comment:edit', editTarget); + this.view.edit(); + expect(this.view.renderEditView).toHaveBeenCalled(); + return expect(editTarget).toHaveBeenCalled(); + }); + }); + describe('with edit view displayed', function() { + beforeEach(function() { + return this.view.renderEditView(); + }); + describe('cancelEdit', function() { + it('triggers the appropriate event and switches to the show view', function() { + var cancelEditTarget; + spyOn(this.view, 'renderShowView'); + cancelEditTarget = jasmine.createSpy(); + this.view.bind('comment:cancel_edit', cancelEditTarget); + this.view.cancelEdit(); + expect(this.view.renderShowView).toHaveBeenCalled(); + return expect(cancelEditTarget).toHaveBeenCalled(); + }); + }); + describe('update', function() { + beforeEach(function() { + var self = this; + this.updatedBody = 'updated body'; + this.view.$el.find('.edit-comment-body').html($('')); + this.view.$el.find('.edit-comment-body textarea').val(this.updatedBody); + spyOn(this.view, 'cancelEdit'); + spyOn($, 'ajax').and.callFake(function(params) { + if (self.ajaxSucceed) { + params.success(); + } else { + params.error({ + status: 500 + }); + } + return { + always: function() { + } + }; + }); + + this.event = DiscussionSpecHelper.makeEventSpy(); + // All the way down in discussion/utils.js there's this line + // element.after(...); + // element is event.target in this case. This causes a JS exception, so we override the target + this.event.target = $('body'); + $(this.event.target).prop('disabled', false); + }); + it('calls the update endpoint correctly and displays the show view on success', function() { + this.ajaxSucceed = true; + this.view.update(this.event); + expect($.ajax).toHaveBeenCalled(); + expect($.ajax.calls.mostRecent().args[0].url._parts.path) + .toEqual('/courses/edX/999/test/discussion/comments/01234567/update'); + expect($.ajax.calls.mostRecent().args[0].data.body).toEqual(this.updatedBody); + expect(this.view.model.get('body')).toEqual(this.updatedBody); + return expect(this.view.cancelEdit).toHaveBeenCalled(); + }); + it('handles AJAX errors', function() { + var originalBody; + originalBody = this.comment.get('body'); + this.ajaxSucceed = false; + this.view.update(this.event); + expect($.ajax).toHaveBeenCalled(); + expect($.ajax.calls.mostRecent().args[0].url._parts.path) + .toEqual('/courses/edX/999/test/discussion/comments/01234567/update'); + expect($.ajax.calls.mostRecent().args[0].data.body).toEqual(this.updatedBody); + expect(this.view.model.get('body')).toEqual(originalBody); + expect(this.view.cancelEdit).not.toHaveBeenCalled(); + return expect(this.view.$('.edit-comment-form-errors > *').length).toEqual(1); + }); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/thread_response_show_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/thread_response_show_view_spec.js new file mode 100644 index 00000000..31a4599c --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/thread_response_show_view_spec.js @@ -0,0 +1,267 @@ +/* globals DiscussionViewSpecHelper, DiscussionSpecHelper, DiscussionUtil, Thread, ThreadResponseShowView */ +(function() { + 'use strict'; + + describe('ThreadResponseShowView', function() { + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.user = DiscussionUtil.getUser(); + this.thread = new Thread({ + thread_type: 'discussion' + }); + this.commentData = { + id: 'dummy', + user_id: '567', + course_id: 'TestOrg/TestCourse/TestRun', + body: 'this is a comment', + created_at: '2013-04-03T20:08:39Z', + endorsed: false, + endorsement: {}, + abuse_flaggers: [], + votes: { + up_count: 42 + }, + type: 'comment' + }; + this.comment = new Comment(this.commentData); + this.comment.set('thread', this.thread); + this.view = new ThreadResponseShowView({ + model: this.comment, + $el: $('#fixture-element') + }); + spyOn(ThreadResponseShowView.prototype, 'convertMath'); + return this.view.render(); + }); + describe('voting', function() { + it('renders the vote state correctly', function() { + return DiscussionViewSpecHelper.checkRenderVote(this.view, this.comment); + }); + it('check the vote classes after renders', function() { + return DiscussionViewSpecHelper.checkVoteClasses(this.view); + }); + it('votes correctly via click', function() { + return DiscussionViewSpecHelper.checkUpvote(this.view, this.comment, this.user, $.Event('click')); + }); + it('votes correctly via spacebar', function() { + return DiscussionViewSpecHelper.checkUpvote(this.view, this.comment, this.user, $.Event('keydown', { + which: 32 + })); + }); + it('unvotes correctly via click', function() { + return DiscussionViewSpecHelper.checkUnvote(this.view, this.comment, this.user, $.Event('click')); + }); + it('unvotes correctly via spacebar', function() { + return DiscussionViewSpecHelper.checkUnvote(this.view, this.comment, this.user, $.Event('keydown', { + which: 32 + })); + }); + }); + it('renders endorsement correctly for a marked answer in a question thread', function() { + var endorsement; + endorsement = { + username: 'test_endorser', + user_id: 'test_id', + time: new Date().toISOString() + }; + this.thread.set('thread_type', 'question'); + this.comment.set({ + endorsed: true, + endorsement: endorsement + }); + this.view.render(); + expect(this.view.$('.posted-details').text().replace(/\s+/g, ' ')) + .toMatch('marked as answer less than a minute ago by ' + endorsement.username); + return expect(this.view.$('.posted-details > a').attr('href')) + .toEqual('/courses/edX/999/test/discussion/forum/users/test_id'); + }); + it('renders anonymous endorsement correctly for a marked answer in a question thread', function() { + var endorsement; + endorsement = { + username: null, + time: new Date().toISOString() + }; + this.thread.set('thread_type', 'question'); + this.comment.set({ + endorsed: true, + endorsement: endorsement + }); + this.view.render(); + expect(this.view.$('.posted-details').text()).toMatch('marked as answer less than a minute ago'); + return expect(this.view.$('.posted-details').text()).not.toMatch('\sby\s'); + }); + it('renders endorsement correctly for an endorsed response in a discussion thread', function() { + var endorsement; + endorsement = { + username: 'test_endorser', + user_id: 'test_id', + time: new Date().toISOString() + }; + this.thread.set('thread_type', 'discussion'); + this.comment.set({ + endorsed: true, + endorsement: endorsement + }); + this.view.render(); + expect(this.view.$('.posted-details').text().replace(/\s+/g, ' ')) + .toMatch('endorsed less than a minute ago by ' + endorsement.username); + return expect(this.view.$('.posted-details > a').attr('href')) + .toEqual('/courses/edX/999/test/discussion/forum/users/test_id'); + }); + it('renders anonymous endorsement correctly for an endorsed response in a discussion thread', function() { + var endorsement; + endorsement = { + username: null, + time: new Date().toISOString() + }; + this.thread.set('thread_type', 'discussion'); + this.comment.set({ + endorsed: true, + endorsement: endorsement + }); + this.view.render(); + expect(this.view.$('.posted-details').text()).toMatch('endorsed less than a minute ago'); + return expect(this.view.$('.posted-details').text()).not.toMatch('\sby\s'); + }); + it('re-renders correctly when endorsement changes', function() { + spyOn($, 'ajax').and.returnValue($.Deferred()); + DiscussionUtil.loadRoles({ + Moderator: [parseInt(window.user.id)] + }); + this.thread.set('thread_type', 'question'); + this.view.render(); + expect(this.view.$('.posted-details').text()).not.toMatch('marked as answer'); + this.view.$('.action-answer').click(); + expect(this.view.$('.posted-details').text()).toMatch('marked as answer'); + this.view.$('.action-answer').click(); + expect(this.view.$('.posted-details').text()).not.toMatch('marked as answer'); + + // Previously the endorsement state would revert after a page load due to a bug in the template + this.view.render(); + expect(this.view.$('.posted-details').text()).not.toMatch('marked as answer'); + }); + it('allows a moderator to mark an answer in a question thread', function() { + var endorseButton; + spyOn($, 'ajax').and.returnValue($.Deferred()); + DiscussionUtil.loadRoles({ + Moderator: [parseInt(window.user.id)] + }); + this.thread.set({ + thread_type: 'question', + user_id: (parseInt(window.user.id) + 1).toString() + }); + this.view.render(); + endorseButton = this.view.$('.action-answer'); + expect(endorseButton.length).toEqual(1); + expect(endorseButton.closest('.actions-item')).not.toHaveClass('is-hidden'); + endorseButton.click(); + return expect(endorseButton).toHaveClass('is-checked'); + }); + it('allows the author of a question thread to mark an answer', function() { + var endorseButton; + spyOn($, 'ajax').and.returnValue($.Deferred()); + this.thread.set({ + thread_type: 'question', + user_id: window.user.id + }); + this.view.render(); + endorseButton = this.view.$('.action-answer'); + expect(endorseButton.length).toEqual(1); + expect(endorseButton.closest('.actions-item')).not.toHaveClass('is-hidden'); + endorseButton.click(); + return expect(endorseButton).toHaveClass('is-checked'); + }); + it('does not allow the author of a discussion thread to endorse', function() { + var endorseButton; + this.thread.set({ + thread_type: 'discussion', + user_id: window.user.id + }); + this.view.render(); + endorseButton = this.view.$('.action-endorse'); + expect(endorseButton.length).toEqual(1); + return expect(endorseButton.closest('.actions-item')).toHaveClass('is-hidden'); + }); + it('does not allow a student who is not the author of a question thread to mark an answer', function() { + var endorseButton; + this.thread.set({ + thread_type: 'question', + user_id: (parseInt(window.user.id) + 1).toString() + }); + this.view.render(); + endorseButton = this.view.$('.action-answer'); + expect(endorseButton.length).toEqual(1); + return expect(endorseButton.closest('.actions-item')).toHaveClass('is-hidden'); + }); + describe('labels', function() { + var expectOneElement; + expectOneElement = function(view, selector, visible) { + var elements; + if (typeof visible === 'undefined' || visible === null) { + visible = true; + } + view.render(); + elements = view.$el.find(selector); + expect(elements.length).toEqual(1); + if (visible) { + return expect(elements).not.toHaveClass('is-hidden'); + } else { + return expect(elements).toHaveClass('is-hidden'); + } + }; + it('displays the reported label when appropriate for a non-staff user', function() { + expectOneElement(this.view, '.post-label-reported', false); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id]); + expectOneElement(this.view, '.post-label-reported'); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id + 1]); + return expectOneElement(this.view, '.post-label-reported', false); + }); + it('displays the reported label when appropriate for a flag moderator', function() { + DiscussionSpecHelper.makeModerator(); + expectOneElement(this.view, '.post-label-reported', false); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id]); + expectOneElement(this.view, '.post-label-reported'); + this.comment.set('abuse_flaggers', [DiscussionUtil.getUser().id + 1]); + return expectOneElement(this.view, '.post-label-reported'); + }); + }); + describe('endorser display', function() { + var checkUserLink; + beforeEach(function() { + this.comment.set('endorsement', { + username: 'test_endorser', + time: new Date().toISOString() + }); + return spyOn(DiscussionUtil, 'urlFor').and.returnValue('test_endorser_url'); + }); + checkUserLink = function(element, is_ta, is_staff) { + expect(element.find('.username').length).toEqual(1); + expect(element.find('.username').text()).toEqual('test_endorser'); + expect(element.find('.username').attr('href')).toEqual('test_endorser_url'); + expect(element.find('.user-label-community-ta').length).toEqual(is_ta ? 1 : 0); + return expect(element.find('.user-label-staff').length).toEqual(is_staff ? 1 : 0); + }; + it('renders nothing when the response has not been endorsed', function() { + this.comment.set('endorsement', null); + return expect(this.view.getEndorserDisplay()).toBeNull(); + }); + it('renders correctly for a student-endorsed response', function() { + var $el; + $el = $('#fixture-element').html(this.view.getEndorserDisplay()); + return checkUserLink($el, false, false); + }); + it('renders correctly for a community TA-endorsed response', function() { + var $el; + spyOn(DiscussionUtil, 'isTA').and.returnValue(true); + $el = $('#fixture-element').html(this.view.getEndorserDisplay()); + return checkUserLink($el, true, false); + }); + it('renders correctly for a staff-endorsed response', function() { + var $el; + spyOn(DiscussionUtil, 'isStaff').and.returnValue(true); + $el = $('#fixture-element').html(this.view.getEndorserDisplay()); + return checkUserLink($el, false, true); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/static/spec/view/thread_response_view_spec.js b/xblocks_contrib/discussion/assets/static/spec/view/thread_response_view_spec.js new file mode 100644 index 00000000..918ca73f --- /dev/null +++ b/xblocks_contrib/discussion/assets/static/spec/view/thread_response_view_spec.js @@ -0,0 +1,149 @@ +/* globals DiscussionSpecHelper, ResponseCommentView, Thread, ThreadResponseView, ThreadResponseShowView, _ */ +(function() { + 'use strict'; + + describe('ThreadResponseView', function() { + beforeEach(function() { + DiscussionSpecHelper.setUpGlobals(); + DiscussionSpecHelper.setUnderscoreFixtures(); + this.thread = new Thread({ + thread_type: 'discussion' + }); + this.response = new Comment({ + children: [{}, {}], + thread: this.thread + }); + this.view = new ThreadResponseView({ + model: this.response, + el: $('#fixture-element') + }); + spyOn(ThreadResponseShowView.prototype, 'render'); + return spyOn(ResponseCommentView.prototype, 'render'); + }); + describe('closed and open Threads', function() { + var checkCommentForm; + checkCommentForm = function(closed) { + var comment, commentData, thread, view; + thread = new Thread({ + thread_type: 'discussion', + closed: closed + }); + commentData = { + id: 'dummy', + user_id: '567', + course_id: 'TestOrg/TestCourse/TestRun', + body: 'this is a comment', + created_at: '2013-04-03T20:08:39Z', + abuse_flaggers: [], + type: 'comment', + children: [], + thread: thread + }; + comment = new Comment(commentData); + view = new ThreadResponseView({ + model: comment, + el: $('#fixture-element') + }); + view.render(); + return expect(view.$('.comment-form').closest('li').is(':visible')).toBe(!closed); + }; + it('hides comment form when thread is closed', function() { + return checkCommentForm(true); + }); + it('show comment form when thread is open', function() { + return checkCommentForm(false); + }); + }); + describe('submitComment', function() { + it('focus should be in response container after a new comment is posted', function() { + this.view.render(); + expect(this.view.$('.comments')).toBeVisible(); + expect(document.activeElement === this.view.$('.forum-response')[0]); + }); + }); + describe('renderComments', function() { + it('hides "show comments" link if collapseComments is not set', function() { + this.view.render(); + expect(this.view.$('.comments')).toBeVisible(); + return expect(this.view.$('.action-show-comments')).not.toBeVisible(); + }); + it('hides "show comments" link if collapseComments is set but response has no comments', function() { + this.response = new Comment({ + children: [], + thread: this.thread + }); + this.view = new ThreadResponseView({ + model: this.response, + el: $('#fixture-element'), + collapseComments: true + }); + this.view.render(); + expect(this.view.$('.comments')).toBeVisible(); + return expect(this.view.$('.action-show-comments')).not.toBeVisible(); + }); + it( + 'hides comments if collapseComments is set and shows them when "show comments" link is clicked', + function() { + this.view = new ThreadResponseView({ + model: this.response, + el: $('#fixture-element'), + collapseComments: true + }); + this.view.render(); + expect(this.view.$('.comments')).not.toBeVisible(); + expect(this.view.$('.action-show-comments')).toBeVisible(); + this.view.$('.action-show-comments').click(); + expect(this.view.$('.comments')).toBeVisible(); + return expect(this.view.$('.action-show-comments')).not.toBeVisible(); + } + ); + it('calls renderTemplate with a temporary id if the model lacks one', function() { + this.view = new ThreadResponseView({ + model: this.response, + el: $('#fixture-element'), + collapseComments: true + }); + spyOn(_, 'extend').and.callThrough(); + spyOn(window, 'Date').and.callFake(function() { + return { + getTime: function() { + return 1; + } + }; + }); + this.view.render(); + expect(_.extend).toHaveBeenCalledWith(jasmine.any(Object), jasmine.objectContaining({ + wmdId: 1 + })); + }); + it('populates commentViews and binds events', function() { + this.view.createEditView(); + spyOn(this.view, 'cancelEdit'); + spyOn(this.view, 'cancelCommentEdits'); + spyOn(this.view, 'hideCommentForm'); + spyOn(this.view, 'showCommentForm'); + this.view.renderComments(); + expect(this.view.commentViews.length).toEqual(2); + this.view.commentViews[0].trigger('comment:edit', jasmine.createSpyObj('event', ['preventDefault'])); + expect(this.view.cancelEdit).toHaveBeenCalled(); + expect(this.view.cancelCommentEdits).toHaveBeenCalled(); + expect(this.view.hideCommentForm).toHaveBeenCalled(); + this.view.commentViews[0].trigger('comment:cancel_edit'); + return expect(this.view.showCommentForm).toHaveBeenCalled(); + }); + }); + describe('cancelCommentEdits', function() { + it('calls cancelEdit on each comment view', function() { + this.view.renderComments(); + expect(this.view.commentViews.length).toEqual(2); + _.each(this.view.commentViews, function(commentView) { + return spyOn(commentView, 'cancelEdit'); + }); + this.view.cancelCommentEdits(); + return _.each(this.view.commentViews, function(commentView) { + return expect(commentView.cancelEdit).toHaveBeenCalled(); + }); + }); + }); + }); +}).call(this); diff --git a/xblocks_contrib/discussion/assets/webpack.common.config.js b/xblocks_contrib/discussion/assets/webpack.common.config.js new file mode 100644 index 00000000..ddce76e5 --- /dev/null +++ b/xblocks_contrib/discussion/assets/webpack.common.config.js @@ -0,0 +1,84 @@ +const path = require('path'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +const discussionRoot = __dirname; +const staticJs = path.join(discussionRoot, 'static', 'js'); +const staticCss = path.join(discussionRoot, 'static', 'css'); + +const config = { + context: discussionRoot, + entry: './static/js/discussion_main.js', + output: { + path: path.join(__dirname, '..', 'public', 'js'), + filename: 'discussion_bundle.js', + }, + resolve: { + modules: [staticJs, 'node_modules'], + }, + module: { + rules: [ + { + test: /Markdown\.Converter\.js$/, + use: [ + { + loader: 'append-prepend-loader', + options: { + append: '\n;window.Markdown=exports;', + }, + }, + ], + }, + { + test: /Markdown\.Sanitizer\.js$/, + use: [ + { + loader: 'append-prepend-loader', + options: { + append: '\n;window.Markdown.getSanitizingConverter=exports.getSanitizingConverter;', + }, + }, + ], + }, + // Legacy IIFE code expects this===window; imports-loader wrapper (edx-platform pattern) + // Exclude discussion_main.js (has top-level import/export). + { + test: /\.js$/, + include: [ + path.join(staticJs, 'common'), + path.join(staticJs, 'vendor'), + path.join(staticJs, 'mathjax_accessible.js'), + path.join(staticJs, 'mathjax_delay_renderer.js'), + path.join(staticJs, 'customwmd.js'), + ], + exclude: [path.join(staticJs, 'discussion_main.js')], + use: [ + { + loader: 'imports-loader', + options: 'this=>window' + }, + ], + }, + { + test: /split\.js$/, + use: [ + { + loader: 'append-prepend-loader', + options: { + append: '\n;window._split=_split;', + }, + }, + ], + }, + ], + }, + plugins: [ + new CopyWebpackPlugin({ + patterns: [ + { from: path.join(staticCss, 'inline-discussion.css'), to: path.join(__dirname, '..', 'public', 'css', 'inline-discussion.css') }, + { from: path.join(staticCss, 'inline-discussion-rtl.css'), to: path.join(__dirname, '..', 'public', 'css', 'inline-discussion-rtl.css') }, + ], + }), + ], +}; + +module.exports = config diff --git a/xblocks_contrib/discussion/assets/webpack.dev.config.js b/xblocks_contrib/discussion/assets/webpack.dev.config.js new file mode 100644 index 00000000..f36e69c4 --- /dev/null +++ b/xblocks_contrib/discussion/assets/webpack.dev.config.js @@ -0,0 +1,19 @@ +const {merge} = require('webpack-merge'); +const webpack = require('webpack'); +const _ = require('underscore'); +const commonConfig = require('./webpack.common.config.js'); + +module.exports = commonConfig; + +module.exports = merge(commonConfig, { + mode: 'development', + devtool: 'inline-source-map', + plugins: [ + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('development'), + 'process.env.JS_ENV_EXTRA_CONFIG': process.env.JS_ENV_EXTRA_CONFIG || '{}', + 'CAPTIONS_CONTENT_TO_REPLACE': JSON.stringify(process.env.CAPTIONS_CONTENT_TO_REPLACE || ''), + 'CAPTIONS_CONTENT_REPLACEMENT': JSON.stringify(process.env.CAPTIONS_CONTENT_REPLACEMENT || '') + }) + ] +}); diff --git a/xblocks_contrib/discussion/assets/webpack.prod.config.js b/xblocks_contrib/discussion/assets/webpack.prod.config.js new file mode 100644 index 00000000..ee4cb5b0 --- /dev/null +++ b/xblocks_contrib/discussion/assets/webpack.prod.config.js @@ -0,0 +1,12 @@ +const { merge } = require('webpack-merge'); +const webpack = require('webpack'); +const commonConfig = require('./webpack.common.config.js'); + +module.exports = merge(commonConfig, { + mode: 'production', + plugins: [ + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + }), + ], +}); diff --git a/xblocks_contrib/discussion/discussion.py b/xblocks_contrib/discussion/discussion.py index a7025127..3b2d3080 100644 --- a/xblocks_contrib/discussion/discussion.py +++ b/xblocks_contrib/discussion/discussion.py @@ -125,67 +125,30 @@ def django_user(self): return None return user_service._django_user # pylint: disable=protected-access - def get_all_js_files(self): - """ - Returns list of all JS files in the correct dependency order. - """ - return [ - # Vendor files (load first as dependencies) - 'static/js/vendor/Markdown.Converter.js', - 'static/js/vendor/Markdown.Sanitizer.js', - 'static/js/vendor/Markdown.Editor.js', - 'static/js/vendor/jquery.ajaxfileupload.js', - 'static/js/vendor/jquery.timeago.js', - 'static/js/vendor/jquery.timeago.locale.js', - 'static/js/vendor/jquery.truncate.js', - 'static/js/vendor/split.js', - # MathJax utilities - 'static/js/mathjax_accessible.js', - 'static/js/mathjax_delay_renderer.js', - # Core utilities and models - 'static/js/common/utils.js', - 'static/js/common/models/discussion_course_settings.js', - 'static/js/common/models/discussion_user.js', - # Core discussion functionality - # content.js must come before discussion.js because discussion.js uses Thread - 'static/js/common/content.js', - 'static/js/common/discussion.js', - 'static/js/common/mathjax_include.js', - # Custom WMD editor - 'static/js/customwmd.js', - # Views (depend on core discussion and models) - 'static/js/common/views/discussion_content_view.js', - 'static/js/common/views/discussion_inline_view.js', - 'static/js/common/views/discussion_thread_edit_view.js', - 'static/js/common/views/discussion_thread_list_view.js', - 'static/js/common/views/discussion_thread_profile_view.js', - 'static/js/common/views/discussion_thread_show_view.js', - 'static/js/common/views/discussion_thread_view.js', - 'static/js/common/views/discussion_topic_menu_view.js', - 'static/js/common/views/new_post_view.js', - 'static/js/common/views/response_comment_edit_view.js', - 'static/js/common/views/response_comment_show_view.js', - 'static/js/common/views/response_comment_view.js', - 'static/js/common/views/thread_response_edit_view.js', - 'static/js/common/views/thread_response_show_view.js', - 'static/js/common/views/thread_response_view.js', - ] - def add_resource_urls(self, fragment): """ Adds URLs for JS and CSS resources that this XBlock depends on to `fragment`. """ css_file_path = ( - 'static/css/inline-discussion-rtl.css' + '/css/inline-discussion-rtl.css' if get_language_bidi() - else 'static/css/inline-discussion.css' + else '/css/inline-discussion.css' ) - fragment.add_css(loader.load_unicode(css_file_path)) - # Load all JS files individually in the correct order - for js_file in self.get_all_js_files(): - fragment.add_javascript(loader.load_unicode(js_file)) + # Determine how static assets should be served based on Django settings. + # Open edX requires different asset paths for production vs. local development. + pipeline = getattr(settings, "PIPELINE", {}) + use_pipeline = pipeline.get("PIPELINE_ENABLED", True) or not getattr(settings, "REQUIRE_DEBUG", False) + + # When the Django pipeline is active (production), XBlock assets are namespaced + # using the package scope (e.g., "discussion/public"). + # When inactive (local dev fallback), they are served directly from "public". + # https://github.com/openedx/openedx-platform/blob/master/openedx/core/lib/xblock_utils/__init__.py#L417 + base_path = "discussion/public" if use_pipeline else "public" + + fragment.add_css_url(self.runtime.local_resource_url(self, f"{base_path}{css_file_path}")) + fragment.add_javascript_url(self.runtime.local_resource_url(self, f"{base_path}/js/discussion_bundle.js")) def has_permission(self, permission): # pylint: disable=unused-argument """ diff --git a/xblocks_contrib/discussion/static/css/discussion.css b/xblocks_contrib/discussion/static/css/discussion.css deleted file mode 100644 index 19dca48b..00000000 --- a/xblocks_contrib/discussion/static/css/discussion.css +++ /dev/null @@ -1,9 +0,0 @@ -/* CSS for DiscussionXBlock */ - -.discussion .count { - font-weight: bold; -} - -.discussion p { - cursor: pointer; -} diff --git a/xblocks_contrib/discussion/templates/discussion.html b/xblocks_contrib/discussion/templates/discussion.html deleted file mode 100644 index c54902b2..00000000 --- a/xblocks_contrib/discussion/templates/discussion.html +++ /dev/null @@ -1,7 +0,0 @@ -{% load i18n %} - -
    -

    - DiscussionXBlock: {% trans "count is now" %} {{ count }} {% trans "click me to increment." %} -

    -