diff --git a/hydro/handler/judge.js b/hydro/handler/judge.js index 6d72bd3dd..4ef85a0a8 100644 --- a/hydro/handler/judge.js +++ b/hydro/handler/judge.js @@ -92,10 +92,11 @@ class JudgeHandler extends Handler { async get({ check = false }) { this.response.body = {}; if (check) return; - const rid = await queue.get('judge', false); - if (rid) { - const rdoc = await record.get(rid); - const pdoc = await problem.getById(rdoc.pid); + const tasks = []; + let rid = await queue.get('judge', false); + while (rid) { + const rdoc = await record.get(rid); // eslint-disable-line no-await-in-loop + const pdoc = await problem.getById(rdoc.pid); // eslint-disable-line no-await-in-loop const task = { event: 'judge', rid, @@ -105,7 +106,8 @@ class JudgeHandler extends Handler { lang: rdoc.lang, code: rdoc.code, }; - this.response.body = { task }; + tasks.push(task); + rid = await queue.get('judge', false); // eslint-disable-line no-await-in-loop } } diff --git a/hydro/handler/user.js b/hydro/handler/user.js index ae1ffa96d..e27fa6aa5 100644 --- a/hydro/handler/user.js +++ b/hydro/handler/user.js @@ -32,8 +32,7 @@ class UserLoginHandler extends Handler { } } class UserLogoutHandler extends Handler { - constructor(ctx) { - super(ctx); + async prepare() { this.checkPerm(PERM_LOGGEDIN); } @@ -47,8 +46,7 @@ class UserLogoutHandler extends Handler { } } class UserRegisterHandler extends Handler { - constructor(ctx) { - super(ctx); + async prepare() { this.checkPerm(PERM_REGISTER_USER); } @@ -76,8 +74,7 @@ class UserRegisterHandler extends Handler { } } class UserRegisterWithCodeHandler extends Handler { - constructor(ctx) { - super(ctx); + async prepare() { this.checkPerm(PERM_REGISTER_USER); } @@ -153,11 +150,11 @@ class UserDetailHandler extends Handler { } async get({ uid }) { - const isSelfProfile = this.ctx.state.user._id === uid; + const isSelfProfile = this.user._id === uid; const udoc = await user.getById(uid); if (!udoc) throw new UserNotFoundError(uid); const sdoc = await token.getMostRecentSessionByUid(uid); - this.ctx.body = { isSelfProfile, udoc, sdoc }; + this.response.body = { isSelfProfile, udoc, sdoc }; } } class UserSearchHandler extends Handler { @@ -176,7 +173,7 @@ class UserSearchHandler extends Handler { udocs[i].gravatar_url = misc.gravatar_url[udocs[i].gravatar]; } } - this.ctx.body = { udocs }; + this.response.body = { udocs }; } } diff --git a/hydro/lib/misc.js b/hydro/lib/misc.js index 78915eda7..1071f5c21 100644 --- a/hydro/lib/misc.js +++ b/hydro/lib/misc.js @@ -4,6 +4,7 @@ exports.gravatar_url = function gravatarUrl(email, size) { return `//gravatar.loli.net/avatar/${md5((email || '').toString().trim().toLowerCase())}?d=mm&s=${size}`; }; exports.datetime_span = function datetimeSpan(dt, relative = true, format = '%Y-%m-%d %H:%M:%S') { + if (!dt) return 'DATETIME_SPAN_ERROR'; if (dt.generationTime) dt = new Date(dt.generationTime * 1000); else if (typeof dt === 'number' || typeof dt === 'string') dt = new Date(dt); return '{2}'.format( diff --git a/hydro/lib/template.js b/hydro/lib/template.js index d60d57e28..65d72477c 100644 --- a/hydro/lib/template.js +++ b/hydro/lib/template.js @@ -16,6 +16,7 @@ class Nunjucks extends nunjucks.Environment { this.addFilter('json', (self) => JSON.stringify(self), false); this.addFilter('assign', (self, data) => Object.assign(self, data)); this.addFilter('markdown', (self) => markdown.render(self)); + this.addFilter('base64_encode', (s) => Buffer.from(s).toString('base64')); this.addFilter('gravatar_url', misc.gravatar_url); this.addFilter('format_size', misc.format_size); this.addGlobal('typeof', (o) => typeof o); diff --git a/hydro/model/token.js b/hydro/model/token.js index e3b34b352..8a0d59466 100644 --- a/hydro/model/token.js +++ b/hydro/model/token.js @@ -1,4 +1,5 @@ const db = require('../service/db.js'); +const { ValidationError } = require('../error'); const coll = db.collection('token'); @@ -33,8 +34,10 @@ module.exports = { * @param {number} tokenType type of the token. * @returns {object} The token document, or null. */ - get(tokenId, tokenType) { - return coll.findOne({ _id: tokenId, tokenType }); + async get(tokenId, tokenType) { + const res = await coll.findOne({ _id: tokenId, tokenType }); + if (!res) throw new ValidationError('token'); + return res; }, /** diff --git a/hydro/model/training.js b/hydro/model/training.js index 0cbf7b8f8..7d20936f7 100644 --- a/hydro/model/training.js +++ b/hydro/model/training.js @@ -13,9 +13,9 @@ function getMultiStatus(query) { return collStatus.find(query); } async function getListStatus(uid, tids) { - const psdocs = await getMultiStatus({ uid, pid: { $in: Array.from(new Set(tids)) } }).toArray(); + const tsdocs = await getMultiStatus({ uid, tid: { $in: Array.from(new Set(tids)) } }).toArray(); const r = {}; - for (const psdoc of psdocs) r[psdoc.pid] = psdoc; + for (const tsdoc of tsdocs) r[tsdoc.pid] = tsdoc; return r; } async function enroll(tid, uid) { @@ -104,6 +104,12 @@ module.exports = { if (!tdoc) throw new TrainingNotFoundError(tid); return tdoc; }, + async getList(tids) { + const tdocs = await this.getMulti({ _id: { $in: Array.from(new Set(tids)) } }).toArray(); + const r = {}; + for (const tdoc of tdocs) r[tdoc._id] = tdoc; + return r; + }, getMulti: (query) => coll.find(query), getMultiStatus, getStatus, diff --git a/templates/main.html b/templates/main.html index 77ab241dd..45fe6a152 100644 --- a/templates/main.html +++ b/templates/main.html @@ -23,7 +23,7 @@
    {% for tdoc in tdocs %} -
  1. +
  2. diff --git a/templates/user_register_with_code.html b/templates/user_register_with_code.html index 0388e5749..3d67139e2 100644 --- a/templates/user_register_with_code.html +++ b/templates/user_register_with_code.html @@ -7,7 +7,7 @@
    @@ -25,7 +25,7 @@
    diff --git a/ui/common/variables.inc.styl b/ui/common/variables.inc.styl index a587ba51a..4494d610d 100644 --- a/ui/common/variables.inc.styl +++ b/ui/common/variables.inc.styl @@ -254,4 +254,3 @@ $contest-color = { 'oi': #F5C735, 'homework': #FFCDCD, } - diff --git a/ui/package.json b/ui/package.json index 2bb09dd30..4b0bc509f 100644 --- a/ui/package.json +++ b/ui/package.json @@ -90,11 +90,11 @@ "react-codemirror": "^1.0.0", "react-dom": "^16.13.1", "react-monaco-editor": "^0.36.0", - "react-redux": "^7.2.0", + "react-redux": "^5.0.6", "react-split-pane": "^0.1.65", - "redux": "^4.0.5", + "redux": "^3.7.2", "redux-logger": "^3.0.6", - "redux-promise-middleware": "^6.1.2", + "redux-promise-middleware": "^4.3.0", "redux-thunk": "^2.2.0", "slideout": "^1.0.1", "sockjs-client": "^1.3.0", diff --git a/ui/pages/record_main.page.js b/ui/pages/record_main.page.js index 184ab3e2b..5e941abf6 100644 --- a/ui/pages/record_main.page.js +++ b/ui/pages/record_main.page.js @@ -11,7 +11,7 @@ const page = new NamedPage('record_main', async () => { sock.onopen = () => { sock.send(document.cookie); setTimeout(() => { - sock.send(JSON.stringify({ rdocs: Context.rids })); + sock.send(JSON.stringify({ rids: Context.rids })); }, 300); }; sock.onmessage = (message) => { diff --git a/ui/yarn.lock b/ui/yarn.lock index 564ddd0b4..4ae302d06 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -923,7 +923,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.8.4": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== @@ -3027,9 +3027,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.390: - version "1.3.407" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.407.tgz#361dbfc92a3d1b0b097b77221256271967e04c0e" - integrity sha512-ayDQgkwCLHq0AVmsU10t2H/8X9lq3nb1CRV9rWYsc2nTTbFMvh4Aaau48Ao0iW/L+Q8Y9bgbJ5iHyPse7DGMJw== + version "1.3.411" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.411.tgz#203a24482ac39b039cca0090f9ec05d79074f76d" + integrity sha512-TDDfkuSYEbknN0kRPSAD8WzB452pJ6EmIxGbI9yQHkDxUNbD6Educ10DxyA9r/DuLL4z255IO1OZIw+eFK6XUw== elliptic@^6.0.0: version "6.5.2" @@ -3420,11 +3420,11 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.0.tgz#e5e29a6f66a837840d34f68cb9ce355260d1128b" - integrity sha512-/5qB+Mb0m2bh86tjGbA8pB0qBfdmCIK6ZNPjcw4/TtEH0+tTf0wLA5HK4KMTweSMwLGHwBDWCBV+6+2+EuHmgg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -3438,10 +3438,10 @@ estraverse@^4.1.0, estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== estree-walker@^0.6.1: version "0.6.1" @@ -5298,6 +5298,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash-es@^4.2.1: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" @@ -5422,7 +5427,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5: +lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -6907,7 +6912,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.4, prop-types@^15.5.9, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.4, prop-types@^15.5.9, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -7078,12 +7083,12 @@ react-dom@^16.13.1: prop-types "^15.6.2" scheduler "^0.19.1" -react-is@^16.7.0, react-is@^16.8.1, react-is@^16.9.0: +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -7097,16 +7102,18 @@ react-monaco-editor@^0.36.0: monaco-editor "*" prop-types "^15.7.2" -react-redux@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" - integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== +react-redux@^5.0.6: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" + integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q== dependencies: - "@babel/runtime" "^7.5.5" + "@babel/runtime" "^7.1.2" hoist-non-react-statics "^3.3.0" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.9.0" + invariant "^2.2.4" + loose-envify "^1.1.0" + prop-types "^15.6.1" + react-is "^16.6.0" + react-lifecycles-compat "^3.0.0" react-split-pane@^0.1.65: version "0.1.91" @@ -7229,23 +7236,25 @@ redux-logger@^3.0.6: dependencies: deep-diff "^0.3.5" -redux-promise-middleware@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/redux-promise-middleware/-/redux-promise-middleware-6.1.2.tgz#1c14222686934be243cbb292e348ef7d5b20d6d2" - integrity sha512-ZqZu/nnSzGgwTtNbGoGVontpk7LjTOv0kigtt3CcgXI9gpq+8WlfXTXRZD0WTD5yaohRq0q2nYmJXSTjwXs83Q== +redux-promise-middleware@^4.3.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/redux-promise-middleware/-/redux-promise-middleware-4.4.2.tgz#8defa5d1384299b99a6d2a7b4f4c21b96b3dda39" + integrity sha512-PdBYebU+pstX2/CIrHiSD0meFetsFI0P/LrtsQLfhLPxU7zJASnMdO9KSrv1fHRh0fftYMtg8HfYiyVePBcDFg== redux-thunk@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== -redux@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" - integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" regenerate-unicode-properties@^8.2.0: version "8.2.0" @@ -7468,9 +7477,9 @@ resolve-url@^0.2.1: integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + version "1.16.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.16.0.tgz#063dc704fa3413e13ac1d0d1756a7cbfe95dd1a7" + integrity sha512-LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA== dependencies: path-parse "^1.0.6" @@ -7629,7 +7638,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.4, schema-utils@^2.6.5: +schema-utils@^2.6.5: version "2.6.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a" integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== @@ -8202,12 +8211,12 @@ strip-json-comments@~2.0.1: integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= style-loader@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.3.tgz#9e826e69c683c4d9bf9db924f85e9abb30d5e200" - integrity sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.4.tgz#1ad81283cefe51096756fd62697258edad933230" + integrity sha512-SbBHRD8fwK3pX+4UDF4ETxUF0+rCvk29LWTTI7Rt0cgsDjAj3SWM76ByTe6u2+4IlJ/WwluB7wuslWETCoPQdg== dependencies: - loader-utils "^1.2.3" - schema-utils "^2.6.4" + loader-utils "^2.0.0" + schema-utils "^2.6.5" stylehacks@^4.0.0: version "4.0.3" @@ -8334,7 +8343,7 @@ svgpath@^2.1.5: resolved "https://registry.yarnpkg.com/svgpath/-/svgpath-2.2.3.tgz#749c673899f92c3a4fc2d5415cf85dec349d9512" integrity sha512-xA0glXYpJ9SYT4JeMp3c0psbqdZsG1c0ywGvdJUPY2FKEgwJV7NgkeYuuQiOxMp+XsK9nCqjm3KDw0LkM1YLXw== -symbol-observable@^1.2.0: +symbol-observable@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -8649,9 +8658,9 @@ ua-parser-js@^0.7.18: integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== uglify-js@^3.6.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.9.0.tgz#037163a936992050ed5d14f5d5c4014126019661" - integrity sha512-j5wNQBWaql8gr06dOUrfaohHlscboQZ9B8sNsoK5o4sBjm7Ht9dxSbrMXyktQpA16Acaij8AcoozteaPYZON0g== + version "3.9.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.9.1.tgz#a56a71c8caa2d36b5556cc1fd57df01ae3491539" + integrity sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA== dependencies: commander "~2.20.3" @@ -9177,9 +9186,9 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yargs-parser@^18.1.1: - version "18.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" - integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0"