diff --git a/src/JobsJobsJobs/App/.eslintrc.js b/src/JobsJobsJobs/App/.eslintrc.js index 67dbdec..e5f5576 100644 --- a/src/JobsJobsJobs/App/.eslintrc.js +++ b/src/JobsJobsJobs/App/.eslintrc.js @@ -4,16 +4,26 @@ module.exports = { node: true }, extends: [ - 'plugin:vue/vue3-essential', - '@vue/standard', - '@vue/typescript/recommended' + "plugin:vue/vue3-essential", + "@vue/standard", + "@vue/typescript/recommended" ], parserOptions: { ecmaVersion: 2020 }, + globals: { + defineProps: "readonly", + defineEmits: "readonly", + defineExpose: "readonly", + withDefaults: "readonly" + }, rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'vue/no-multiple-template-root': 'off' + "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", + "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", + "vue/no-multiple-template-root": "off", + "vue/script-setup-uses-vars": 1, + "quotes": ["error", "double", { avoidEscape: true }], + "func-call-spacing": "off", + "@typescript-eslint/no-unused-vars": "off" } } diff --git a/src/JobsJobsJobs/App/package-lock.json b/src/JobsJobsJobs/App/package-lock.json index 809eb10..8bd76f9 100644 --- a/src/JobsJobsJobs/App/package-lock.json +++ b/src/JobsJobsJobs/App/package-lock.json @@ -264,7 +264,8 @@ "@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true }, "@babel/helper-validator-option": { "version": "7.14.5", @@ -309,7 +310,8 @@ "@babel/parser": { "version": "7.14.7", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.14.5", @@ -1096,6 +1098,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" @@ -1361,9 +1364,9 @@ } }, "@types/bootstrap": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.1.1.tgz", - "integrity": "sha512-W/fEBlqwaJFh+3sCz/H88LPsLt/zLsEECFlrAOkrRPjWuo/ETl8u0JefIerCdc8+WukowQS1f60eIJOwkCBwhg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.1.2.tgz", + "integrity": "sha512-dSQvMi2dMyNwJU6LZjP0pimuBowsMUvGScYdfqqeiDUoj9TxXZCpfu0cTl94U0Zvw/tdH9j/9ToOhi4LKNLZhg==", "dev": true, "requires": { "@popperjs/core": "^2.9.2", @@ -1389,6 +1392,15 @@ "@types/node": "*" } }, + "@types/dompurify": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.2.3.tgz", + "integrity": "sha512-CLtc2mZK8+axmrz1JqtpklO/Kvn38arGc8o1l3UVopZaXXuer9ONdZwJ/9f226GrhRLtUmLr9WrvZsRSNpS8og==", + "dev": true, + "requires": { + "@types/trusted-types": "*" + } + }, "@types/estree": { "version": "0.0.48", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz", @@ -1452,10 +1464,16 @@ "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/marked": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.4.tgz", - "integrity": "sha512-L9VRSe0Id8xbPL99mUo/4aKgD7ZoRwFZqUQScNKHi2pFjF9ZYSMNShUHD6VlMT6J/prQq0T1mxuU25m3R7dFzg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.5.tgz", + "integrity": "sha512-shRZ7XnYFD/8n8zSjKvFdto1QNSf4tONZIlNEZGrJe8GsOE8DL/hG1Hbl8gZlfLnjS7+f5tZGIaTgfpyW38h4w==", "dev": true }, "@types/mime": { @@ -1541,6 +1559,12 @@ "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", "dev": true }, + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", + "dev": true + }, "@types/uglify-js": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", @@ -1619,13 +1643,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz", - "integrity": "sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.3.tgz", + "integrity": "sha512-tBgfA3K/3TsZY46ROGvoRxQr1wBkclbVqRQep97MjVHJzcRBURRY3sNFqLk0/Xr//BY5hM9H2p/kp+6qim85SA==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.29.1", - "@typescript-eslint/scope-manager": "4.29.1", + "@typescript-eslint/experimental-utils": "4.29.3", + "@typescript-eslint/scope-manager": "4.29.3", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.1.0", @@ -1669,15 +1693,15 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz", - "integrity": "sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.3.tgz", + "integrity": "sha512-ffIvbytTVWz+3keg+Sy94FG1QeOvmV9dP2YSdLFHw/ieLXWCa3U1TYu8IRCOpMv2/SPS8XqhM1+ou1YHsdzKrg==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.1", - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/typescript-estree": "4.29.1", + "@typescript-eslint/scope-manager": "4.29.3", + "@typescript-eslint/types": "4.29.3", + "@typescript-eslint/typescript-estree": "4.29.3", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -1695,41 +1719,41 @@ } }, "@typescript-eslint/parser": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.1.tgz", - "integrity": "sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.3.tgz", + "integrity": "sha512-jrHOV5g2u8ROghmspKoW7pN8T/qUzk0+DITun0MELptvngtMrwUJ1tv5zMI04CYVEUsSrN4jV7AKSv+I0y0EfQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.29.1", - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/typescript-estree": "4.29.1", + "@typescript-eslint/scope-manager": "4.29.3", + "@typescript-eslint/types": "4.29.3", + "@typescript-eslint/typescript-estree": "4.29.3", "debug": "^4.3.1" } }, "@typescript-eslint/scope-manager": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz", - "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.3.tgz", + "integrity": "sha512-x+w8BLXO7iWPkG5mEy9bA1iFRnk36p/goVlYobVWHyDw69YmaH9q6eA+Fgl7kYHmFvWlebUTUfhtIg4zbbl8PA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/visitor-keys": "4.29.1" + "@typescript-eslint/types": "4.29.3", + "@typescript-eslint/visitor-keys": "4.29.3" } }, "@typescript-eslint/types": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz", - "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.3.tgz", + "integrity": "sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz", - "integrity": "sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz", + "integrity": "sha512-45oQJA0bxna4O5TMwz55/TpgjX1YrAPOI/rb6kPgmdnemRZx/dB0rsx+Ku8jpDvqTxcE1C/qEbVHbS3h0hflag==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/visitor-keys": "4.29.1", + "@typescript-eslint/types": "4.29.3", + "@typescript-eslint/visitor-keys": "4.29.3", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -1882,12 +1906,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz", - "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz", + "integrity": "sha512-MGGfJvXT4asUTeVs0Q2m+sY63UsfnA+C/FDgBKV3itLBmM9H0u+URcneePtkd0at1YELmZK6HSolCqM4Fzs6yA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/types": "4.29.3", "eslint-visitor-keys": "^2.0.0" } }, @@ -2457,17 +2481,36 @@ } }, "@vue/compiler-core": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.2.tgz", - "integrity": "sha512-QhCI0ZU5nAR0LMcLgzW3v75374tIrHGp8XG5CzJS7Nsy+iuignbE4MZ2XJfh5TGIrtpuzfWA4eTIfukZf/cRdg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.6.tgz", + "integrity": "sha512-vbwnz7+OhtLO5p5i630fTuQCL+MlUpEMTKHuX+RfetQ+3pFCkItt2JUH+9yMaBG2Hkz6av+T9mwN/acvtIwpbw==", "requires": { - "@babel/parser": "^7.12.0", - "@babel/types": "^7.12.0", - "@vue/shared": "3.2.2", - "estree-walker": "^2.0.1", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "@vue/shared": "3.2.6", + "estree-walker": "^2.0.2", "source-map": "^0.6.1" }, "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" + }, + "@babel/parser": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2476,29 +2519,30 @@ } }, "@vue/compiler-dom": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.2.tgz", - "integrity": "sha512-ggcc+NV/ENIE0Uc3TxVE/sKrhYVpLepMAAmEiQ047332mbKOvUkowz4TTFZ+YkgOIuBOPP0XpCxmCMg7p874mA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.6.tgz", + "integrity": "sha512-+a/3oBAzFIXhHt8L5IHJOTP4a5egzvpXYyi13jR7CUYOR1S+Zzv7vBWKYBnKyJLwnrxTZnTQVjeHCgJq743XKg==", "requires": { - "@vue/compiler-core": "3.2.2", - "@vue/shared": "3.2.2" + "@vue/compiler-core": "3.2.6", + "@vue/shared": "3.2.6" } }, "@vue/compiler-sfc": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.2.tgz", - "integrity": "sha512-hrtqpQ5L6IPn5v7yVRo7uvLcQxv0z1+KBjZBWMBOcrXz4t+PKUxU/SWd6Tl9T8FDmYlunzKUh6lcx+2CLo6f5A==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.6.tgz", + "integrity": "sha512-Ariz1eDsf+2fw6oWXVwnBNtfKHav72RjlWXpEgozYBLnfRPzP+7jhJRw4Nq0OjSsLx2HqjF3QX7HutTjYB0/eA==", "dev": true, "requires": { - "@babel/parser": "^7.13.9", - "@babel/types": "^7.13.0", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", "@types/estree": "^0.0.48", - "@vue/compiler-core": "3.2.2", - "@vue/compiler-dom": "3.2.2", - "@vue/compiler-ssr": "3.2.2", - "@vue/shared": "3.2.2", + "@vue/compiler-core": "3.2.6", + "@vue/compiler-dom": "3.2.6", + "@vue/compiler-ssr": "3.2.6", + "@vue/ref-transform": "3.2.6", + "@vue/shared": "3.2.6", "consolidate": "^0.16.0", - "estree-walker": "^2.0.1", + "estree-walker": "^2.0.2", "hash-sum": "^2.0.0", "lru-cache": "^5.1.1", "magic-string": "^0.25.7", @@ -2509,6 +2553,28 @@ "source-map": "^0.6.1" }, "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + }, + "@babel/parser": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "dev": true + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, "consolidate": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz", @@ -2538,13 +2604,13 @@ } }, "@vue/compiler-ssr": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.2.tgz", - "integrity": "sha512-rVl1agMFhdEN3Go0bCriXo+3cysxKIuRP0yh1Wd8ysRrKfAmokyDhUA8PrGSq2Ymj/LdZTh+4OKfj3p2+C+hlA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.6.tgz", + "integrity": "sha512-A7IKRKHSyPnTC4w1FxHkjzoyjXInsXkcs/oX22nBQ+6AWlXj2Tt1le96CWPOXy5vYlsTYkF1IgfBaKIdeN/39g==", "dev": true, "requires": { - "@vue/compiler-dom": "3.2.2", - "@vue/shared": "3.2.2" + "@vue/compiler-dom": "3.2.6", + "@vue/shared": "3.2.6" } }, "@vue/component-compiler-utils": { @@ -2626,36 +2692,57 @@ "dev": true }, "@vue/reactivity": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.2.tgz", - "integrity": "sha512-IHjhtmrhK6dzacj/EnLQDWOaA3HuzzVk6w84qgV8EpS4uWGIJXiRalMRg6XvGW2ykJvIl3pLsF0aBFlTMRiLOA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.6.tgz", + "integrity": "sha512-8vIDD2wpCnYisNNZjmcIj+Rixn0uhZNY3G1vzlgdVdLygeRSuFjkmnZk6WwvGzUWpKfnG0e/NUySM3mVi59hAA==", "requires": { - "@vue/shared": "3.2.2" + "@vue/shared": "3.2.6" + } + }, + "@vue/ref-transform": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.6.tgz", + "integrity": "sha512-ie39+Y4nbirDLvH+WEq6Eo/l3n3mFATayqR+kEMSphrtMW6Uh/eEMx1Gk2Jnf82zmj3VLRq7dnmPx72JLcBYkQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.6", + "@vue/shared": "3.2.6", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + }, + "dependencies": { + "@babel/parser": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "dev": true + } } }, "@vue/runtime-core": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.2.tgz", - "integrity": "sha512-/aUk1+GO/VPX0oVxhbzSWE1zrf3/wGCsO1ALNisVokYftKqfqLDjbJHE6mrI2hx3MiuwbHrWjJClkGUVTIOPEQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.6.tgz", + "integrity": "sha512-3mqtgpj/YSGFxtvTufSERRApo92B16JNNxz9p+5eG6PPuqTmuRJz214MqhKBEgLEAIQ6R6YCbd83ZDtjQnyw2g==", "requires": { - "@vue/reactivity": "3.2.2", - "@vue/shared": "3.2.2" + "@vue/reactivity": "3.2.6", + "@vue/shared": "3.2.6" } }, "@vue/runtime-dom": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.2.tgz", - "integrity": "sha512-1Le/NpCfawCOfePfJezvWUF+oCVLU8N+IHN4oFDOxRe6/PgHNJ+yT+YdxFifBfI+TIAoXI/9PsnqzmJZV+xsmw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.6.tgz", + "integrity": "sha512-fq33urnP0BNCGm2O3KCzkJlKIHI80C94HJ4qDZbjsTtxyOn5IHqwKSqXVN3RQvO6epcQH+sWS+JNwcNDPzoasg==", "requires": { - "@vue/runtime-core": "3.2.2", - "@vue/shared": "3.2.2", + "@vue/runtime-core": "3.2.6", + "@vue/shared": "3.2.6", "csstype": "^2.6.8" } }, "@vue/shared": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.2.tgz", - "integrity": "sha512-dvYb318tk9uOzHtSaT3WII/HscQSIRzoCZ5GyxEb3JlkEXASpAUAQwKnvSe2CudnF8XHFRTB7VITWSnWNLZUtA==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.6.tgz", + "integrity": "sha512-uwX0Qs2e6kdF+WmxwuxJxOnKs/wEkMArtYpHSm7W+VY/23Tl8syMRyjnzEeXrNCAP0/8HZxEGkHJsjPEDNRuHw==" }, "@vue/web-component-wrapper": { "version": "1.3.0", @@ -3086,6 +3173,12 @@ "es-abstract": "^1.18.0-next.1" } }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3142,6 +3235,12 @@ } } }, + "assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", + "dev": true + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -3337,6 +3436,15 @@ "@babel/helper-define-polyfill-provider": "^0.2.2" } }, + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "requires": { + "@babel/types": "^7.9.6" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3891,6 +3999,15 @@ "supports-color": "^5.3.0" } }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "dev": true, + "requires": { + "is-regex": "^1.0.3" + } + }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -4359,6 +4476,16 @@ "bluebird": "^3.1.1" } }, + "constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "requires": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -4580,9 +4707,9 @@ } }, "core-js": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.1.tgz", - "integrity": "sha512-AAkP8i35EbefU+JddyWi12AWE9f2N/qr/pwnDtWz4nyUIBGMJPX99ANFFRSw6FefM374lDujdtLDyhN2A/btHw==" + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.3.tgz", + "integrity": "sha512-lM3GftxzHNtPNUJg0v4pC2RC6puwMd6VZA7vXUczi+SKmCWSf4JwO89VJGMqbzmB7jlK7B5hr3S64PqwFL49cA==" }, "core-js-compat": { "version": "3.15.2", @@ -5351,6 +5478,12 @@ "esutils": "^2.0.2" } }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", + "dev": true + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -5407,6 +5540,11 @@ } } }, + "dompurify": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.1.tgz", + "integrity": "sha512-xGWt+NHAQS+4tpgbOAI08yxW0Pr256Gu/FNE2frZVTbgrBUn8M7tz7/ktS/LZ2MHeGqz6topj0/xY+y8R5FBFw==" + }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -6118,26 +6256,26 @@ } }, "eslint-plugin-import": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.0.tgz", - "integrity": "sha512-Kc6xqT9hiYi2cgybOc0I2vC9OgAYga5o/rAFinam/yF/t5uBqxQbauNPMC6fgb640T/89P0gFoO27FOilJ/Cqg==", + "version": "2.24.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", + "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", "dev": true, "requires": { "array-includes": "^3.1.3", "array.prototype.flat": "^1.2.4", "debug": "^2.6.9", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.5", + "eslint-import-resolver-node": "^0.3.6", "eslint-module-utils": "^2.6.2", "find-up": "^2.0.0", "has": "^1.0.3", - "is-core-module": "^2.4.0", + "is-core-module": "^2.6.0", "minimatch": "^3.0.4", - "object.values": "^1.1.3", + "object.values": "^1.1.4", "pkg-up": "^2.0.0", "read-pkg-up": "^3.0.0", "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" + "tsconfig-paths": "^3.11.0" }, "dependencies": { "debug": { @@ -6158,33 +6296,6 @@ "esutils": "^2.0.2" } }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - } - } - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -6194,6 +6305,15 @@ "locate-path": "^2.0.0" } }, + "is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -6292,9 +6412,9 @@ "dev": true }, "eslint-plugin-vue": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.16.0.tgz", - "integrity": "sha512-0E2dVvVC7I2Xm1HXyx+ZwPj9CNX4NJjs4K4r+GVsHWyt5Pew3JLD4fI7A91b2jeL0TXE7LlszrwLSTJU9eqehw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.17.0.tgz", + "integrity": "sha512-Rq5R2QetDCgC+kBFQw1+aJ5B93tQ4xqZvoCUxuIzwTonngNArsdP8ChM8PowIzsJvRtWl4ltGh/bZcN3xhFWSw==", "dev": true, "requires": { "eslint-utils": "^2.1.0", @@ -6786,9 +6906,9 @@ "dev": true }, "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -8179,6 +8299,24 @@ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, + "is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -8283,6 +8421,12 @@ "isobject": "^3.0.1" } }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, "is-regex": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", @@ -8383,6 +8527,12 @@ "easy-stack": "^1.0.1" } }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8485,6 +8635,16 @@ "verror": "1.10.0" } }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "dev": true, + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -10647,6 +10807,15 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -10703,6 +10872,139 @@ } } }, + "pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dev": true, + "requires": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "dev": true + }, + "pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "requires": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "requires": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "requires": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "pug-plain-loader": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pug-plain-loader/-/pug-plain-loader-1.1.0.tgz", + "integrity": "sha512-1nYgIJLaahRuHJHhzSPODV44aZfb00bO7kiJiMkke6Hj4SVZftuvx6shZ4BOokk50dJc2RSFqNUBOlus0dniFQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true + }, + "pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "requires": { + "pug-error": "^2.0.0" + } + }, + "pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10825,6 +11127,40 @@ "unpipe": "1.0.0" } }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -12606,6 +12942,12 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, + "token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", + "dev": true + }, "toposort": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", @@ -12693,14 +13035,26 @@ "dev": true }, "tsconfig-paths": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", - "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, "requires": { - "json5": "^2.2.0", + "@types/json5": "^0.0.29", + "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "tslib": { @@ -13140,14 +13494,31 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", + "dev": true + }, "vue": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.2.tgz", - "integrity": "sha512-D/LuzAV30CgNJYGyNheE/VUs5N4toL2IgmS6c9qeOxvyh0xyn4exyRqizpXIrsvfx34zG9x5gCI2tdRHCGvF9w==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.6.tgz", + "integrity": "sha512-Zlb3LMemQS3Xxa6xPsecu45bNjr1hxO8Bh5FUmE0Dr6Ot0znZBKiM47rK6O7FTcakxOnvVN+NTXWJF6u8ajpCQ==", "requires": { - "@vue/compiler-dom": "3.2.2", - "@vue/runtime-dom": "3.2.2", - "@vue/shared": "3.2.2" + "@vue/compiler-dom": "3.2.6", + "@vue/runtime-dom": "3.2.6", + "@vue/shared": "3.2.6" + } + }, + "vue-cli-plugin-pug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-pug/-/vue-cli-plugin-pug-2.0.0.tgz", + "integrity": "sha512-Nnl5pkHqNDMkPTvOX4iidFSUs0sn2A5JGsQBVZ70Wm2aXqbK/B3jvEFOWok5/y9U/aWeZLU05PwYVYc7nTUK2Q==", + "dev": true, + "requires": { + "pug": "^3.0.0", + "pug-plain-loader": "^1.0.0", + "raw-loader": "^4.0.2" } }, "vue-demi": { @@ -13941,6 +14312,18 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "requires": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/src/JobsJobsJobs/App/package.json b/src/JobsJobsJobs/App/package.json index 6914c67..7023022 100644 --- a/src/JobsJobsJobs/App/package.json +++ b/src/JobsJobsJobs/App/package.json @@ -13,34 +13,36 @@ "@vuelidate/core": "^2.0.0-alpha.24", "@vuelidate/validators": "^2.0.0-alpha.21", "bootstrap": "^5.1.0", - "core-js": "^3.16.1", + "core-js": "^3.16.3", "date-fns": "^2.23.0", "date-fns-tz": "^1.1.6", + "dompurify": "^2.3.1", "marked": "^2.1.3", - "vue": "^3.2.2", + "vue": "^3.2.6", "vue-router": "^4.0.11", "vuex": "^4.0.0-0" }, "devDependencies": { - "@types/bootstrap": "^5.1.1", - "@types/marked": "^2.0.4", - "@typescript-eslint/eslint-plugin": "^4.29.1", - "@typescript-eslint/parser": "^4.29.1", + "@types/bootstrap": "^5.1.2", + "@types/dompurify": "^2.2.3", + "@types/marked": "^2.0.5", + "@typescript-eslint/eslint-plugin": "^4.29.3", + "@typescript-eslint/parser": "^4.29.3", "@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-eslint": "~4.5.0", "@vue/cli-plugin-router": "~4.5.0", "@vue/cli-plugin-typescript": "~4.5.0", "@vue/cli-plugin-vuex": "~4.5.0", "@vue/cli-service": "~4.5.0", - "@vue/compiler-sfc": "^3.2.2", + "@vue/compiler-sfc": "^3.2.6", "@vue/eslint-config-standard": "^6.1.0", "@vue/eslint-config-typescript": "^7.0.0", "eslint": "^7.32.0", - "eslint-plugin-import": "^2.24.0", + "eslint-plugin-import": "^2.24.2", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^5.0.0", "eslint-plugin-standard": "^5.0.0", - "eslint-plugin-vue": "^7.16.0", + "eslint-plugin-vue": "^7.17.0", "sass": "~1.37.0", "sass-loader": "^10.0.0", "typescript": "~4.3.5", diff --git a/src/JobsJobsJobs/App/src/App.vue b/src/JobsJobsJobs/App/src/App.vue index 835d9a4..272dac7 100644 --- a/src/JobsJobsJobs/App/src/App.vue +++ b/src/JobsJobsJobs/App/src/App.vue @@ -10,18 +10,18 @@ diff --git a/src/JobsJobsJobs/App/src/api/index.ts b/src/JobsJobsJobs/App/src/api/index.ts index 0198e50..3ee02a1 100644 --- a/src/JobsJobsJobs/App/src/api/index.ts +++ b/src/JobsJobsJobs/App/src/api/index.ts @@ -1,4 +1,3 @@ -import { MarkedOptions } from 'marked' import { Citizen, Continent, @@ -18,7 +17,7 @@ import { StoryEntry, StoryForm, Success -} from './types' +} from "./types" /** * Create a URL that will access the API @@ -37,13 +36,13 @@ const apiUrl = (url : string) : string => `http://localhost:5000/api/${url}` // eslint-disable-next-line const reqInit = (method : string, user : LogOnSuccess, body : any | undefined = undefined) : RequestInit => { const headers = new Headers() - headers.append('Authorization', `Bearer ${user.jwt}`) + headers.append("Authorization", `Bearer ${user.jwt}`) if (body) { - headers.append('Content-Type', 'application/json') + headers.append("Content-Type", "application/json") return { headers, method, - cache: 'no-cache', + cache: "no-cache", body: JSON.stringify(body) } } @@ -104,7 +103,7 @@ export default { * @returns The user result, or an error */ logOn: async (code : string) : Promise => { - const resp = await fetch(apiUrl(`citizen/log-on/${code}`), { method: 'GET', mode: 'cors' }) + const resp = await fetch(apiUrl(`citizen/log-on/${code}`), { method: "GET", mode: "cors" }) if (resp.status === 200) return await resp.json() as LogOnSuccess return `Error logging on - ${await resp.text()}` }, @@ -117,7 +116,7 @@ export default { * @returns The citizen, or an error */ retrieve: async (id : string, user : LogOnSuccess) : Promise => - apiResult(await fetch(apiUrl(`citizen/${id}`), reqInit('GET', user)), `retrieving citizen ${id}`), + apiResult(await fetch(apiUrl(`citizen/${id}`), reqInit("GET", user)), `retrieving citizen ${id}`), /** * Delete the current citizen's entire Jobs, Jobs, Jobs record @@ -126,7 +125,7 @@ export default { * @returns Undefined if successful, an error if not */ delete: async (user : LogOnSuccess) : Promise => - apiAction(await fetch(apiUrl('citizen'), reqInit('DELETE', user)), 'deleting citizen') + apiAction(await fetch(apiUrl("citizen"), reqInit("DELETE", user)), "deleting citizen") }, /** API functions for continents */ @@ -138,7 +137,7 @@ export default { * @returns All continents, or an error */ all: async () : Promise => - apiResult(await fetch(apiUrl('continents'), { method: 'GET' }), 'retrieving continents') + apiResult(await fetch(apiUrl("continents"), { method: "GET" }), "retrieving continents") }, /** API functions for job listings */ @@ -152,7 +151,7 @@ export default { * @returns True if the addition was successful, an error string if not */ add: async (listing : ListingForm, user : LogOnSuccess) : Promise => - apiSend(await fetch(apiUrl('listings'), reqInit('POST', user, listing)), 'adding job listing'), + apiSend(await fetch(apiUrl("listings"), reqInit("POST", user, listing)), "adding job listing"), /** * Retrieve the job listings posted by the current citizen @@ -161,8 +160,8 @@ export default { * @returns The job listings the user has posted, or an error string */ mine: async (user : LogOnSuccess) : Promise => - apiResult(await fetch(apiUrl('listings/mine'), reqInit('GET', user)), - 'retrieving your job listings'), + apiResult(await fetch(apiUrl("listings/mine"), reqInit("GET", user)), + "retrieving your job listings"), /** * Retrieve a job listing @@ -172,7 +171,7 @@ export default { * @returns The job listing (if found), undefined (if not found), or an error string */ retreive: async (id : string, user : LogOnSuccess) : Promise => - apiResult(await fetch(apiUrl(`listing/${id}`), reqInit('GET', user)), 'retrieving job listing'), + apiResult(await fetch(apiUrl(`listing/${id}`), reqInit("GET", user)), "retrieving job listing"), /** * Retrieve a job listing for viewing (also contains continent information) @@ -182,8 +181,8 @@ export default { * @returns The job listing (if found), undefined (if not found), or an error string */ retreiveForView: async (id : string, user : LogOnSuccess) : Promise => - apiResult(await fetch(apiUrl(`listing/${id}/view`), reqInit('GET', user)), - 'retrieving job listing'), + apiResult(await fetch(apiUrl(`listing/${id}/view`), reqInit("GET", user)), + "retrieving job listing"), /** * Search for job listings using the given parameters @@ -194,12 +193,12 @@ export default { */ search: async (query : ListingSearch, user : LogOnSuccess) : Promise => { const params = new URLSearchParams() - if (query.continentId) params.append('continentId', query.continentId) - if (query.region) params.append('region', query.region) - params.append('remoteWork', query.remoteWork) - if (query.text) params.append('text', query.text) + if (query.continentId) params.append("continentId", query.continentId) + if (query.region) params.append("region", query.region) + params.append("remoteWork", query.remoteWork) + if (query.text) params.append("text", query.text) return apiResult(await fetch(apiUrl(`listing/search?${params.toString()}`), - reqInit('GET', user)), 'searching job listings') + reqInit("GET", user)), "searching job listings") }, /** @@ -210,7 +209,7 @@ export default { * @returns True if the update was successful, an error string if not */ update: async (listing : ListingForm, user : LogOnSuccess) : Promise => - apiSend(await fetch(apiUrl(`listing/${listing.id}`), reqInit('PUT', user, listing)), 'updating job listing') + apiSend(await fetch(apiUrl(`listing/${listing.id}`), reqInit("PUT", user, listing)), "updating job listing") }, /** API functions for profiles */ @@ -223,7 +222,7 @@ export default { * @returns True if the action was successful, or an error string if not */ markEmploymentFound: async (user : LogOnSuccess) : Promise => { - const result = await fetch(apiUrl('profile/employment-found'), reqInit('PATCH', user)) + const result = await fetch(apiUrl("profile/employment-found"), reqInit("PATCH", user)) if (result.ok) return true return `${result.status} - ${result.statusText} (${await result.text()})` }, @@ -236,13 +235,13 @@ export default { */ publicSearch: async (query : PublicSearch) : Promise => { const params = new URLSearchParams() - if (query.continentId) params.append('continentId', query.continentId) - if (query.region) params.append('region', query.region) - if (query.skill) params.append('skill', query.skill) - params.append('remoteWork', query.remoteWork) + if (query.continentId) params.append("continentId", query.continentId) + if (query.region) params.append("region", query.region) + if (query.skill) params.append("skill", query.skill) + params.append("remoteWork", query.remoteWork) return apiResult( - await fetch(apiUrl(`profile/public-search?${params.toString()}`), { method: 'GET' }), - 'searching public profile data') + await fetch(apiUrl(`profile/public-search?${params.toString()}`), { method: "GET" }), + "searching public profile data") }, /** @@ -253,8 +252,8 @@ export default { * @returns The profile (if found), undefined (if not found), or an error string */ retreive: async (id : string | undefined, user : LogOnSuccess) : Promise => { - const url = id ? `profile/${id}` : 'profile' - const resp = await fetch(apiUrl(url), reqInit('GET', user)) + const url = id ? `profile/${id}` : "profile" + const resp = await fetch(apiUrl(url), reqInit("GET", user)) if (resp.status === 200) return await resp.json() as Profile if (resp.status !== 204) return `Error retrieving profile - ${await resp.text()}` }, @@ -267,7 +266,7 @@ export default { * @returns The profile (if found), undefined (if not found), or an error string */ retreiveForView: async (id : string, user : LogOnSuccess) : Promise => - apiResult(await fetch(apiUrl(`profile/${id}/view`), reqInit('GET', user)), 'retrieving profile'), + apiResult(await fetch(apiUrl(`profile/${id}/view`), reqInit("GET", user)), "retrieving profile"), /** * Save a user's profile data @@ -277,7 +276,7 @@ export default { * @returns True if the save was successful, an error string if not */ save: async (data : ProfileForm, user : LogOnSuccess) : Promise => - apiSend(await fetch(apiUrl('profile'), reqInit('POST', user, data)), 'saving profile'), + apiSend(await fetch(apiUrl("profile"), reqInit("POST", user, data)), "saving profile"), /** * Search for profiles using the given parameters @@ -288,12 +287,12 @@ export default { */ search: async (query : ProfileSearch, user : LogOnSuccess) : Promise => { const params = new URLSearchParams() - if (query.continentId) params.append('continentId', query.continentId) - if (query.skill) params.append('skill', query.skill) - if (query.bioExperience) params.append('bioExperience', query.bioExperience) - params.append('remoteWork', query.remoteWork) + if (query.continentId) params.append("continentId", query.continentId) + if (query.skill) params.append("skill", query.skill) + if (query.bioExperience) params.append("bioExperience", query.bioExperience) + params.append("remoteWork", query.remoteWork) return apiResult(await fetch(apiUrl(`profile/search?${params.toString()}`), - reqInit('GET', user)), 'searching profiles') + reqInit("GET", user)), "searching profiles") }, /** @@ -303,7 +302,7 @@ export default { * @returns A count of profiles within the entire system */ count: async (user : LogOnSuccess) : Promise => { - const resp = await fetch(apiUrl('profile/count'), reqInit('GET', user)) + const resp = await fetch(apiUrl("profile/count"), reqInit("GET", user)) if (resp.status === 200) { const result = await resp.json() as Count return result.count @@ -318,7 +317,7 @@ export default { * @returns Undefined if successful, an error if not */ delete: async (user : LogOnSuccess) : Promise => - apiAction(await fetch(apiUrl('profile'), reqInit('DELETE', user)), 'deleting profile') + apiAction(await fetch(apiUrl("profile"), reqInit("DELETE", user)), "deleting profile") }, /** API functions for success stories */ @@ -331,7 +330,7 @@ export default { * @returns All success stories (if any exist), undefined (if none exist), or an error */ list: async (user : LogOnSuccess) : Promise => - apiResult(await fetch(apiUrl('successes'), reqInit('GET', user)), 'retrieving success stories'), + apiResult(await fetch(apiUrl("successes"), reqInit("GET", user)), "retrieving success stories"), /** * Retrieve a success story by its ID @@ -341,7 +340,7 @@ export default { * @returns The success story, or an error */ retrieve: async (id : string, user : LogOnSuccess) : Promise => - apiResult(await fetch(apiUrl(`success/${id}`), reqInit('GET', user)), `retrieving success story ${id}`), + apiResult(await fetch(apiUrl(`success/${id}`), reqInit("GET", user)), `retrieving success story ${id}`), /** * Save a success story @@ -351,14 +350,8 @@ export default { * @returns True if successful, an error string if not */ save: async (data : StoryForm, user : LogOnSuccess) : Promise => - apiSend(await fetch(apiUrl('success'), reqInit('POST', user, data)), 'saving success story') + apiSend(await fetch(apiUrl("success"), reqInit("POST", user, data)), "saving success story") } } -/** The standard Jobs, Jobs, Jobs options for `marked` (GitHub-Flavo(u)red Markdown (GFM) with smart quotes) */ -export const markedOptions : MarkedOptions = { - gfm: true, - smartypants: true -} - -export * from './types' +export * from "./types" diff --git a/src/JobsJobsJobs/App/src/api/types.ts b/src/JobsJobsJobs/App/src/api/types.ts index 2c2d312..0f465aa 100644 --- a/src/JobsJobsJobs/App/src/api/types.ts +++ b/src/JobsJobsJobs/App/src/api/types.ts @@ -62,17 +62,17 @@ export interface Listing { /** The data required to add or edit a job listing */ export class ListingForm { /** The ID of the listing */ - id = '' + id = "" /** The listing title */ - title = '' + title = "" /** The ID of the continent on which this opportunity exists */ - continentId = '' + continentId = "" /** The region in which this opportunity exists */ - region = '' + region = "" /** Whether this is a remote work opportunity */ remoteWork = false /** The text of the job listing */ - text = '' + text = "" /** The date by which this job listing is needed */ neededBy : string | undefined } @@ -150,17 +150,17 @@ export class ProfileForm { /** Whether this profile should appear in the public search */ isPublic = false /** The user's real name */ - realName = '' + realName = "" /** The ID of the continent on which the citizen is located */ - continentId = '' + continentId = "" /** The area within that continent where the citizen is located */ - region = '' + region = "" /** If the citizen is available for remote work */ remoteWork = false /** If the citizen is seeking full-time employment */ fullTime = false /** The user's professional biography */ - biography = '' + biography = "" /** The user's past experience */ experience : string | undefined /** The skills for the user */ @@ -248,11 +248,11 @@ export interface StoryEntry { /** The data required to provide a success story */ export class StoryForm { /** The ID of this story */ - id = '' + id = "" /** Whether the employment was obtained from Jobs, Jobs, Jobs */ fromHere = false /** The success story */ - story = '' + story = "" } /** A record of success finding employment */ diff --git a/src/JobsJobsJobs/App/src/components/AudioClip.vue b/src/JobsJobsJobs/App/src/components/AudioClip.vue index a597836..aa5971e 100644 --- a/src/JobsJobsJobs/App/src/components/AudioClip.vue +++ b/src/JobsJobsJobs/App/src/components/AudioClip.vue @@ -1,34 +1,20 @@ -