diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 26970a191a..4e46ddc53f 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -22,7 +22,6 @@ "babel-eslint": "^10.1.0", "bootstrap": "^4.6.0", "bootstrap-vue": "^2.23.1", - "chai": "^5.1.0", "core-js": "^3.33.1", "dompurify": "^3.0.3", "eslint": "7.32.0", @@ -31,7 +30,6 @@ "eslint-plugin-vue": "7.20.0", "habitica-markdown": "^3.0.0", "hellojs": "^1.20.0", - "inspectpack": "^4.7.1", "intro.js": "^7.2.0", "jquery": "^3.7.1", "lodash": "^4.17.21", @@ -43,7 +41,6 @@ "smartbanner.js": "^1.19.3", "stopword": "^2.0.8", "timers-browserify": "^2.0.12", - "util": "^0.12.5", "uuid": "^9.0.1", "validator": "^13.9.0", "vue": "^2.7.10", @@ -53,11 +50,16 @@ "vue-template-babel-compiler": "^2.0.0", "vue-template-compiler": "^2.7.10", "vuedraggable": "^2.24.3", - "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0", - "webpack": "^5.89.0" + "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0" }, "devDependencies": { - "@babel/plugin-proposal-optional-chaining": "^7.21.0" + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "babel-plugin-lodash": "^3.3.4", + "chai": "^5.1.0", + "inspectpack": "^4.7.1", + "moment-locales-webpack-plugin": "^1.2.0", + "terser-webpack-plugin": "^5.3.10", + "webpack": "^5.89.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3660,6 +3662,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, "engines": { "node": ">=12" } @@ -3814,6 +3817,19 @@ "object.assign": "^4.1.0" } }, + "node_modules/babel-plugin-lodash": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz", + "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0-beta.49", + "@babel/types": "^7.0.0-beta.49", + "glob": "^7.1.1", + "lodash": "^4.17.10", + "require-package-name": "^2.0.1" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.7", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", @@ -4205,6 +4221,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -4233,6 +4250,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, "engines": { "node": ">= 16" } @@ -5106,6 +5124,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", + "dev": true, "engines": { "node": ">=6" } @@ -7011,7 +7030,8 @@ "node_modules/fp-ts": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.1.tgz", - "integrity": "sha512-by7U5W8dkIzcvDofUcO42yl9JbnHTEDBrzu3pt5fKT+Z4Oy85I21K80EYJYdjQGC2qum4Vo55Ag57iiIK4FYuA==" + "integrity": "sha512-by7U5W8dkIzcvDofUcO42yl9JbnHTEDBrzu3pt5fKT+Z4Oy85I21K80EYJYdjQGC2qum4Vo55Ag57iiIK4FYuA==", + "dev": true }, "node_modules/fraction.js": { "version": "4.3.7", @@ -7115,6 +7135,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, "engines": { "node": "*" } @@ -7733,6 +7754,7 @@ "version": "4.7.1", "resolved": "https://registry.npmjs.org/inspectpack/-/inspectpack-4.7.1.tgz", "integrity": "sha512-XoDJbKSM9I2KA+8+OLFJHm8m4NM2pMEgsDD2hze6swVfynEed9ngCx36mRR+otzOsskwnxIZWXjI23FTW1uHqA==", + "dev": true, "dependencies": { "chalk": "^4.1.0", "fp-ts": "^2.6.1", @@ -7753,6 +7775,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7767,6 +7790,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7782,6 +7806,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7792,12 +7817,14 @@ "node_modules/inspectpack/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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/inspectpack/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==", + "dev": true, "engines": { "node": ">=8" } @@ -7806,6 +7833,7 @@ "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" }, @@ -7843,6 +7871,7 @@ "version": "2.2.21", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-2.2.21.tgz", "integrity": "sha512-zz2Z69v9ZIC3mMLYWIeoUcwWD6f+O7yP92FMVVaXEOSZH1jnVBmET/urd/uoarD1WGBY4rCj8TAyMPzsGNzMFQ==", + "dev": true, "peerDependencies": { "fp-ts": "^2.5.0" } @@ -7851,6 +7880,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/io-ts-reporters/-/io-ts-reporters-1.2.2.tgz", "integrity": "sha512-igASwWWkDY757OutNcM6zTtdJf/eTZYkoe2ymsX2qpm5bKZLo74FJYjsCtMQOEdY7dRHLLEulCyFQwdN69GBCg==", + "dev": true, "peerDependencies": { "fp-ts": "^2.0.2", "io-ts": "^2.0.0" @@ -8592,6 +8622,12 @@ "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==" }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -8812,6 +8848,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "dev": true, "dependencies": { "get-func-name": "^2.0.1" } @@ -9574,6 +9611,19 @@ "node": "*" } }, + "node_modules/moment-locales-webpack-plugin": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.2.0.tgz", + "integrity": "sha512-QAi5v0OlPUP7GXviKMtxnpBAo8WmTHrUNN7iciAhNOEAd9evCOvuN0g1N7ThIg3q11GLCkjY1zQ2saRcf/43nQ==", + "dev": true, + "dependencies": { + "lodash.difference": "^4.5.0" + }, + "peerDependencies": { + "moment": "^2.8.0", + "webpack": "^1 || ^2 || ^3 || ^4 || ^5" + } + }, "node_modules/mrmime": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", @@ -10294,6 +10344,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, "engines": { "node": ">= 14.16" } @@ -10318,6 +10369,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, "engines": { "node": ">=10" }, @@ -11434,6 +11486,12 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "node_modules/require-package-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", + "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", + "dev": true + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -11692,7 +11750,8 @@ "node_modules/semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true }, "node_modules/send": { "version": "0.18.0", @@ -12470,15 +12529,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" diff --git a/website/client/package.json b/website/client/package.json index 06a45aaec3..593f539934 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -24,7 +24,6 @@ "babel-eslint": "^10.1.0", "bootstrap": "^4.6.0", "bootstrap-vue": "^2.23.1", - "chai": "^5.1.0", "core-js": "^3.33.1", "dompurify": "^3.0.3", "eslint": "7.32.0", @@ -33,7 +32,6 @@ "eslint-plugin-vue": "7.20.0", "habitica-markdown": "^3.0.0", "hellojs": "^1.20.0", - "inspectpack": "^4.7.1", "intro.js": "^7.2.0", "jquery": "^3.7.1", "lodash": "^4.17.21", @@ -45,7 +43,6 @@ "smartbanner.js": "^1.19.3", "stopword": "^2.0.8", "timers-browserify": "^2.0.12", - "util": "^0.12.5", "uuid": "^9.0.1", "validator": "^13.9.0", "vue": "^2.7.10", @@ -55,10 +52,15 @@ "vue-template-babel-compiler": "^2.0.0", "vue-template-compiler": "^2.7.10", "vuedraggable": "^2.24.3", - "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0", - "webpack": "^5.89.0" + "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0" }, "devDependencies": { - "@babel/plugin-proposal-optional-chaining": "^7.21.0" + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "babel-plugin-lodash": "^3.3.4", + "chai": "^5.1.0", + "inspectpack": "^4.7.1", + "moment-locales-webpack-plugin": "^1.2.0", + "terser-webpack-plugin": "^5.3.10", + "webpack": "^5.89.0" } } diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue index 983f24b832..5a9b747469 100644 --- a/website/client/src/components/appFooter.vue +++ b/website/client/src/components/appFooter.vue @@ -810,7 +810,6 @@ h3 { import axios from 'axios'; import moment from 'moment'; import Vue from 'vue'; -import sinon from 'sinon'; // images import melior from '@/assets/svg/melior.svg'; @@ -826,8 +825,15 @@ import buyGemsModal from './payments/buyGemsModal.vue'; import reportBug from '@/mixins/reportBug.js'; import { worldStateMixin } from '@/mixins/worldState'; -const DEBUG_ENABLED = process.env.DEBUG_ENABLED; // eslint-disable-line no-process-env -const TIME_TRAVEL_ENABLED = process.env.TIME_TRAVEL_ENABLED; // eslint-disable-line no-process-env +const DEBUG_ENABLED = process.env.DEBUG_ENABLED === 'true'; // eslint-disable-line no-process-env +const TIME_TRAVEL_ENABLED = process.env.TIME_TRAVEL_ENABLED === 'true'; // eslint-disable-line no-process-env +let sinon; +if (TIME_TRAVEL_ENABLED) { + console.log(TIME_TRAVEL_ENABLED); + // eslint-disable-next-line global-require + sinon = await import('sinon'); +} + export default { components: { buyGemsModal, diff --git a/website/client/src/main.js b/website/client/src/main.js index 2333d98b52..92c2cedbc3 100644 --- a/website/client/src/main.js +++ b/website/client/src/main.js @@ -36,7 +36,7 @@ setUpLogging(); setupAnalytics(); // just create queues for analytics, no scripts loaded at this time const store = getStore(); -if (process.env.TIME_TRAVEL_ENABLED) { +if (process.env.TIME_TRAVEL_ENABLED === 'true') { (async () => { const sinon = await import('sinon'); if (axios.defaults.headers.common['x-api-user']) { diff --git a/website/client/vue.config.js b/website/client/vue.config.js index 750ff60e7d..43b5cd27ed 100644 --- a/website/client/vue.config.js +++ b/website/client/vue.config.js @@ -5,8 +5,7 @@ const nconf = require('nconf'); const vueTemplateCompiler = require('vue-template-babel-compiler'); const setupNconf = require('../server/libs/setupNconf'); const pkg = require('./package.json'); -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -const TerserPlugin = require("terser-webpack-plugin"); +const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); const configFile = path.join(path.resolve(__dirname, '../../config.json')); @@ -44,16 +43,38 @@ envVars const webpackPlugins = [ new webpack.DefinePlugin(envObject), + new MomentLocalesPlugin({ + localesToKeep: ['bg', + 'cs', + 'da', + 'de', + 'en', + 'es', + 'fr', + 'he', + 'hu', + 'id', + 'it', + 'ja', + 'nl', + 'pl', + 'pt', + 'pt-br', + 'ro', + 'ru', + 'sk', + 'sv', + 'tr', + 'uk', + 'zh-cn', + 'zh-tw' + ], + }), new webpack.IgnorePlugin({ checkResource(resource, context) { - if (context.includes('sinon') || context.includes('nise')) { + if ((context.includes('sinon') || resource.includes('sinon') || context.includes('nise')) && nconf.get('TIME_TRAVEL_ENABLED') !== 'true') { return true; } - if (context.includes('bootstrap-vue')) { - if (resource.includes('/icons')) { - return true - } - } return false; }, }),