diff --git a/package.json b/package.json index c42cf827a..45ee09b48 100644 --- a/package.json +++ b/package.json @@ -32,38 +32,37 @@ "devDependencies": { "@types/autocannon": "^7.6.1", "@types/cross-spawn": "^6.0.2", - "@types/mocha": "^9.1.0", - "@types/node": "^17.0.23", + "@types/mocha": "^9.1.1", + "@types/node": "^17.0.32", "@types/semver": "^7.3.9", "@types/supertest": "^2.0.12", - "@typescript-eslint/eslint-plugin": "5.14.0", - "@typescript-eslint/parser": "5.14.0", - "autocannon": "^7.8.1", + "@typescript-eslint/eslint-plugin": "^5.23.0", + "@typescript-eslint/parser": "^5.23.0", + "autocannon": "^7.9.0", "cac": "^6.7.12", "cross-env": "^7.0.3", "cross-spawn": "^7.0.3", "esbuild": "0.14.3", - "eslint": "^8.12.0", + "eslint": "^8.15.0", "eslint-config-airbnb": "^19.0.4", - "eslint-config-airbnb-typescript": "16.1.1", - "eslint-import-resolver-typescript": "2.5.0", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-import-resolver-typescript": "^2.7.1", "eslint-import-resolver-webpack": "^0.13.2", - "eslint-plugin-import": "2.25.4", + "eslint-plugin-import": "2.26.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.29.4", "eslint-plugin-simple-import-sort": "7.0.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "globby": "11.1.0", "latest-version": "^6.0.0", - "mocha": "^9.2.2", - "mongo-mock": "^4.1.0", + "mocha": "^10.0.0", "mongodb": "^3.7.3", - "mongodb-memory-server": "^8.4.2", + "mongodb-memory-server": "^8.5.2", "ora": "5.4.1", - "semver": "^7.3.5", - "supertest": "^6.2.2", - "typedoc": "^0.22.13", - "typescript": "4.6.2" + "semver": "^7.3.7", + "supertest": "^6.2.3", + "typedoc": "^0.22.15", + "typescript": "^4.6.4" }, "resolutions": { "esbuild": "0.14.3" diff --git a/packages/center/package.json b/packages/center/package.json index f259298d9..c4a01711f 100644 --- a/packages/center/package.json +++ b/packages/center/package.json @@ -8,7 +8,7 @@ "preferUnplugged": true, "dependencies": { "js-yaml": "^4.1.0", - "superagent": "^7.1.2" + "superagent": "^7.1.3" }, "devDependencies": { "@types/js-yaml": "^4.0.5" diff --git a/packages/elastic/package.json b/packages/elastic/package.json index 3ecf7f1e1..2cf9545e4 100644 --- a/packages/elastic/package.json +++ b/packages/elastic/package.json @@ -1,11 +1,11 @@ { "name": "@hydrooj/elastic-search", - "version": "1.0.2", + "version": "1.0.3", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro", "author": "undefined ", "license": "AGPL-3.0-or-later", "dependencies": { - "@elastic/elasticsearch": "^8.1.0" + "@elastic/elasticsearch": "^8.2.0-patch.1" } } diff --git a/packages/fps-importer/package.json b/packages/fps-importer/package.json index c6cd48c0c..88220fb23 100644 --- a/packages/fps-importer/package.json +++ b/packages/fps-importer/package.json @@ -10,12 +10,12 @@ "dependencies": { "adm-zip": "0.5.5", "decode-html": "^2.0.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "mongodb": "^3.7.3", "xml2js": "^0.4.23" }, "devDependencies": { - "@types/xml2js": "^0.4.9" + "@types/xml2js": "^0.4.11" }, "peerDependencies": { "hydrooj": "*" diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index ba3dc5db6..1977f1c36 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,29 +1,29 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "2.19.1", + "version": "2.19.2", "main": "package.json", "author": "undefined ", "repository": "https://github.com/hydro-dev/Hydro.git", "dependencies": { "@hydrooj/utils": "workspace:*", - "axios": "^0.26.1", + "axios": "^0.27.2", "cac": "^6.7.12", "esbuild": "0.14.3", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "mongodb": "^3.7.3", "p-queue": "^7.2.0", "shell-quote": "^1.7.3", - "ws": "^8.5.0" + "ws": "^8.6.0" }, "preferUnplugged": true, "license": "AGPL-3.0-or-later", "devDependencies": { "@types/fs-extra": "^9.0.13", "@types/js-yaml": "^4.0.5", - "@types/lodash": "^4.14.181", + "@types/lodash": "^4.14.182", "@types/shell-quote": "^1.7.1", "@types/ws": "^8.5.3" }, diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 7ef3f4f6c..3fe7846ee 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.13.2", + "version": "3.13.3", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", @@ -12,7 +12,7 @@ }, "preferUnplugged": true, "dependencies": { - "@graphql-tools/schema": "^8.3.6", + "@graphql-tools/schema": "^8.3.11", "@hydrooj/utils": "workspace:*", "adm-zip": "0.5.5", "ajv": "^8.11.0", @@ -23,32 +23,32 @@ "emoji-regex": "^10.1.0", "emojis-list": "2.1.0", "esbuild": "0.14.3", - "fs-extra": "^10.0.1", - "graphql": "^16.3.0", + "fs-extra": "^10.1.0", + "graphql": "^16.5.0", "graphql-scalars": "1.17.0", "isbinaryfile": "^5.0.0", "js-yaml": "^4.1.0", "koa": "^2.13.4", - "koa-body": "^4.2.0", + "koa-body": "^5.0.0", "koa-compress": "^5.1.0", "koa-proxies": "^0.12.2", "koa-router": "^10.1.1", "koa-static-cache": "^5.1.4", "lodash": "^4.17.21", - "lru-cache": "7.7.3", + "lru-cache": "7.9.0", "mime-types": "^2.1.35", "minio": "7.0.25", "moment-timezone": "^0.5.34", "mongodb": "^3.7.3", - "nanoid": "^3.3.2", - "nodemailer": "^6.7.3", + "nanoid": "^3.3.4", + "nodemailer": "^6.7.5", "notp": "^2.0.3", "p-queue": "^7.2.0", "require-resolve-hook": "^1.1.0", - "semver": "^7.3.6", + "semver": "^7.3.7", "serialize-javascript": "^6.0.0", "source-map-support": "^0.5.21", - "superagent": "^7.1.2", + "superagent": "^7.1.3", "thirty-two": "^1.0.2", "tx2": "^1.0.5" }, @@ -60,7 +60,7 @@ "@types/koa-compress": "^4.0.3", "@types/koa-router": "^7.4.4", "@types/koa-static-cache": "^5.1.1", - "@types/lodash": "^4.14.181", + "@types/lodash": "^4.14.182", "@types/lru-cache": "^7.6.1", "@types/mime-types": "^2.1.1", "@types/minio": "^7.0.12", @@ -71,7 +71,7 @@ "@types/serialize-javascript": "^5.0.2", "@types/source-map-support": "^0.5.4", "@types/superagent": "^4.1.15", - "moment": "^2.29.2", + "moment": "^2.29.3", "pm2": "^5.2.0" }, "peerDependencies": { diff --git a/packages/import-qduoj/package.json b/packages/import-qduoj/package.json index cd260cd91..cfaca9770 100644 --- a/packages/import-qduoj/package.json +++ b/packages/import-qduoj/package.json @@ -10,6 +10,6 @@ "dependencies": { "adm-zip": "0.5.5", "decode-html": "^2.0.0", - "fs-extra": "^10.0.1" + "fs-extra": "^10.1.0" } } diff --git a/packages/login-with-github/package.json b/packages/login-with-github/package.json index 2e5bbcca4..7df12780e 100644 --- a/packages/login-with-github/package.json +++ b/packages/login-with-github/package.json @@ -13,6 +13,6 @@ "hydrooj": "*" }, "dependencies": { - "superagent": "^7.1.2" + "superagent": "^7.1.3" } } diff --git a/packages/login-with-google/package.json b/packages/login-with-google/package.json index e951bdd1c..c4e588642 100644 --- a/packages/login-with-google/package.json +++ b/packages/login-with-google/package.json @@ -13,6 +13,6 @@ "hydrooj": "*" }, "dependencies": { - "superagent": "^7.1.2" + "superagent": "^7.1.3" } } diff --git a/packages/recaptcha/package.json b/packages/recaptcha/package.json index aae34fa89..daefa1486 100644 --- a/packages/recaptcha/package.json +++ b/packages/recaptcha/package.json @@ -8,6 +8,6 @@ "license": "AGPL-3.0-or-later", "preferUnplugged": true, "dependencies": { - "superagent": "^7.1.2" + "superagent": "^7.1.3" } } diff --git a/packages/ui-default/build/config/webpack.js b/packages/ui-default/build/config/webpack.js index e55cf2877..cdafc825a 100644 --- a/packages/ui-default/build/config/webpack.js +++ b/packages/ui-default/build/config/webpack.js @@ -81,7 +81,7 @@ export default function (env = {}) { mode: (env.production || env.measure) ? 'production' : 'development', profile: true, context: root(), - devtool: env.production ? 'source-map' : 'eval-source-map', + devtool: env.production ? 'source-map' : false, entry: { hydro: './entry.js', polyfill: './polyfill.ts', @@ -101,8 +101,6 @@ export default function (env = {}) { extensions: ['.js', '.jsx', '.ts', '.tsx'], alias: { vj: root(), - 'js-yaml': root('utils/yamlCompact'), - 'real-js-yaml': require.resolve('js-yaml'), }, }, module: { @@ -226,10 +224,10 @@ export default function (env = {}) { filename: '[name].[hash:10].worker.js', customLanguages: [{ label: 'yaml', - entry: require.resolve('@undefined-moe/monaco-yaml/lib/esm/monaco.contribution'), + entry: require.resolve('monaco-yaml/index.js'), worker: { id: 'vs/language/yaml/yamlWorker', - entry: require.resolve('@undefined-moe/monaco-yaml/lib/esm/yaml.worker.js'), + entry: require.resolve('monaco-yaml/yaml.worker.js'), }, }], }), diff --git a/packages/ui-default/components/autocomplete/DomainSelectAutoComplete.tsx b/packages/ui-default/components/autocomplete/DomainSelectAutoComplete.tsx index ca54c1b3b..9b2987419 100644 --- a/packages/ui-default/components/autocomplete/DomainSelectAutoComplete.tsx +++ b/packages/ui-default/components/autocomplete/DomainSelectAutoComplete.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import { assign } from 'lodash'; import DOMAttachedObject from 'vj/components/DOMAttachedObject'; import AutoComplete from '.'; @@ -33,15 +33,12 @@ export default class DomainSelectAutoComplete extends AutoComplete { attach() { const value = this.$dom.val(); - ReactDOM.render( - { this.ref = ref; }} - value={value} - onChange={this.onChange} - multi={this.options.multi} - />, - this.container, - ); + ReactDOM.createRoot(this.container).render( { this.ref = ref; }} + value={value} + onChange={this.onChange} + multi={this.options.multi} + />); } } diff --git a/packages/ui-default/components/autocomplete/ProblemSelectAutoComplete.tsx b/packages/ui-default/components/autocomplete/ProblemSelectAutoComplete.tsx index 8d5500960..b50261df1 100644 --- a/packages/ui-default/components/autocomplete/ProblemSelectAutoComplete.tsx +++ b/packages/ui-default/components/autocomplete/ProblemSelectAutoComplete.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import { assign } from 'lodash'; import DOMAttachedObject from 'vj/components/DOMAttachedObject'; import AutoComplete from '.'; @@ -33,14 +33,13 @@ export default class ProblemSelectAutoComplete extends AutoComplete { attach() { const value = this.$dom.val(); - ReactDOM.render( + ReactDOM.createRoot(this.container).render( { this.ref = ref; }} value={value} multi={this.options.multi} onChange={this.onChange} />, - this.container, ); } } diff --git a/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx b/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx index 7fd6c1ca7..01652016a 100644 --- a/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx +++ b/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import { assign } from 'lodash'; import DOMAttachedObject from 'vj/components/DOMAttachedObject'; import AutoComplete, { AutoCompleteOptions } from '.'; @@ -38,14 +38,13 @@ export default class UserSelectAutoComplete extends AutoC attach() { const value = this.$dom.val(); - ReactDOM.render( + ReactDOM.createRoot(this.container).render( { this.ref = ref; }} value={value} multi={this.options.multi} onChange={this.onChange} />, - this.container, ); } } diff --git a/packages/ui-default/components/autocomplete/index.tsx b/packages/ui-default/components/autocomplete/index.tsx index bee7074a1..1e1ad8361 100644 --- a/packages/ui-default/components/autocomplete/index.tsx +++ b/packages/ui-default/components/autocomplete/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import { assign } from 'lodash'; import DOMAttachedObject from 'vj/components/DOMAttachedObject'; import AutoCompleteFC from './components/AutoComplete'; @@ -64,7 +64,7 @@ export default class AutoComplete extends DOMAttachedObject { attach() { const value = this.$dom.val(); - ReactDOM.render( + ReactDOM.createRoot(this.container).render( { this.ref = ref; }} height="34px" @@ -76,7 +76,6 @@ export default class AutoComplete extends DOMAttachedObject { multi={this.options.multi} freeSolo={this.options.multi} />, - this.container, ); } diff --git a/packages/ui-default/components/discussion/comments.page.tsx b/packages/ui-default/components/discussion/comments.page.tsx index 2cd6cc709..2ca04b4a0 100644 --- a/packages/ui-default/components/discussion/comments.page.tsx +++ b/packages/ui-default/components/discussion/comments.page.tsx @@ -1,7 +1,7 @@ import 'jquery.easing'; import * as React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import { Popover } from '@blueprintjs/core'; import { AutoloadPage } from 'vj/misc/Page'; import CommentBox from 'vj/components/discussion/CommentBox'; @@ -256,7 +256,7 @@ const commentsPage = new AutoloadPage('commentsPage', () => { const canUseReaction = $('[data-op="react"]').length > 0; $('[data-op="react"]').each((i, e) => { - ReactDOM.render(, e); + ReactDOM.createRoot(e).render(); }); $(document).on('click', '.reaction', async (e) => { if (!canUseReaction) { diff --git a/packages/ui-default/components/monaco/languages/yaml.ts b/packages/ui-default/components/monaco/languages/yaml.ts index 783524435..84a576182 100644 --- a/packages/ui-default/components/monaco/languages/yaml.ts +++ b/packages/ui-default/components/monaco/languages/yaml.ts @@ -1,4 +1,4 @@ -import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; +import { setDiagnosticsOptions } from 'monaco-yaml'; /** @type {Record} */ const problemConfigSchemaDef = { @@ -78,8 +78,7 @@ const problemConfigSchema = { additionalProperties: false, }; -// @ts-ignore -monaco.languages.yaml.yamlDefaults.setDiagnosticsOptions({ +setDiagnosticsOptions({ validate: true, enableSchemaRequest: true, hover: true, @@ -89,7 +88,7 @@ monaco.languages.yaml.yamlDefaults.setDiagnosticsOptions({ { uri: 'https://hydro.js.org/schema/problemConfig.json', fileMatch: ['hydro://problem/file/config.yaml'], - schema: problemConfigSchema, + schema: problemConfigSchema as any, }, { uri: `${UiContext.cdn_prefix}manage/setting/schema.json`, diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 948b62655..fba90f57a 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.36.2", + "version": "4.37.0", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", @@ -10,23 +10,23 @@ "lint": "eslint ." }, "devDependencies": { - "@blueprintjs/core": "^4.2.1", - "@fontsource/dm-mono": "^4.5.7", - "@fontsource/fira-code": "^4.5.8", - "@fontsource/inconsolata": "^4.5.4", - "@fontsource/jetbrains-mono": "^4.5.5", - "@fontsource/pt-mono": "^4.5.5", - "@fontsource/roboto-mono": "^4.5.5", - "@fontsource/source-code-pro": "^4.5.6", - "@fontsource/ubuntu-mono": "^4.5.6", + "@blueprintjs/core": "^4.3.0", + "@fontsource/dm-mono": "^4.5.8", + "@fontsource/fira-code": "^4.5.9", + "@fontsource/inconsolata": "^4.5.6", + "@fontsource/jetbrains-mono": "^4.5.8", + "@fontsource/pt-mono": "^4.5.8", + "@fontsource/roboto-mono": "^4.5.7", + "@fontsource/source-code-pro": "^4.5.9", + "@fontsource/ubuntu-mono": "^4.5.9", "@hydrooj/utils": "workspace:*", "@types/gulp-if": "^0.0.34", "@types/jquery": "^3.5.14", "@types/json-schema": "^7.0.11", "@types/katex": "^0.14.0", "@types/qrcode": "^1.4.2", + "@types/react-dom": "^18.0.3", "@types/redux-logger": "^3.0.9", - "@undefined-moe/monaco-yaml": "^2.5.1", "ansi_up": "^5.1.0", "autoprefixer": "^9.8.8", "browser-update": "^3.3.38", @@ -34,7 +34,7 @@ "chunk-progress-webpack-plugin": "^2.0.1", "classnames": "^2.3.1", "clean-webpack-plugin": "^4.0.0", - "clipboard": "^2.0.10", + "clipboard": "^2.0.11", "copy-webpack-plugin": "^6.4.1", "css-loader": "^4.3.0", "diff": "^5.0.0", @@ -43,11 +43,10 @@ "emojis-keywords": "2.0.0", "emojis-list": "2.1.0", "esbuild-loader": "^2.18.0", - "eslint": "^8.12.0", "fancy-log": "^2.0.0", "file-loader": "^6.2.0", "friendly-errors-webpack-plugin": "^1.7.0", - "graphiql": "^1.8.3", + "graphiql": "^1.8.9", "gulp": "^4.0.2", "gulp-cli": "^2.3.0", "gulp-iconfont": "^11.0.1", @@ -59,31 +58,32 @@ "jquery.easing": "^1.4.1", "jquery.transit": "^0.9.12", "mini-css-extract-plugin": "^1.6.2", - "moment": "^2.29.1", - "monaco-editor": "^0.31.1", + "moment": "^2.29.3", + "monaco-editor": "^0.33.0", "monaco-editor-nls": "^2.0.0", "monaco-editor-webpack-plugin": "^7.0.1", - "monaco-themes": "^0.4.0", - "nanoid": "^3.3.2", + "monaco-themes": "^0.4.2", + "monaco-yaml": "^4.0.0-alpha.3", + "nanoid": "^3.3.4", "normalize.css": "^8.0.1", "nprogress": "^0.2.0", "pickadate": "^3.6.4", "plugin-error": "^1.0.1", "postcss-loader": "^3.0.0", "prism-themes": "^1.9.0", - "prismjs": "^1.27.0", + "prismjs": "^1.28.0", "prop-types": "^15.8.1", "qrcode": "^1.5.0", "queue-microtask": "^1.2.3", "raw-loader": "^4.0.2", - "react": "^17.0.2", - "react-dnd": "^16.0.0", - "react-dnd-html5-backend": "^16.0.0", - "react-dom": "^17.0.2", - "react-redux": "^7.2.8", + "react": "^18.1.0", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dom": "^18.1.0", + "react-redux": "^8.0.1", "react-split-pane": "^0.1.92", "reconnecting-websocket": "^4.4.0", - "redux": "^4.1.2", + "redux": "^4.2.0", "redux-logger": "^3.0.6", "redux-promise-middleware": "^6.1.2", "redux-thunk": "^2.4.1", @@ -102,7 +102,7 @@ "timeago.js": "^4.0.2", "vditor": "^3.8.13", "vinyl-buffer": "^1.0.1", - "web-streams-polyfill": "^3.2.0", + "web-streams-polyfill": "^3.2.1", "webpack": "^4.46.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-dev-server": "^3.11.3", @@ -110,13 +110,13 @@ }, "dependencies": { "esbuild": "0.14.3", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "jsesc": "^3.0.2", "katex": "^0.15.3", "lodash": "^4.17.21", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", + "markdown-it": "^13.0.1", + "markdown-it-anchor": "^8.6.4", "markdown-it-footnote": "^3.0.3", "markdown-it-imsize": "^2.0.1", "markdown-it-mark": "^3.0.1", diff --git a/packages/ui-default/pages/api.page.tsx b/packages/ui-default/pages/api.page.tsx index e2fcef103..87f5ab589 100644 --- a/packages/ui-default/pages/api.page.tsx +++ b/packages/ui-default/pages/api.page.tsx @@ -2,7 +2,7 @@ import { NamedPage } from 'vj/misc/Page'; import request from 'vj/utils/request'; import React from 'react'; -import { render } from 'react-dom'; +import ReactDOM from 'react-dom/client'; const Logo = () => Hydro API Console ; const defaultQuery = `\ @@ -43,7 +43,7 @@ const page = new NamedPage('api', async () => { /> ); - render(, document.getElementById('graphiql')); + ReactDOM.createRoot(document.getElementById('graphiql')).render(); }); export default page; diff --git a/packages/ui-default/pages/home_messages.page.jsx b/packages/ui-default/pages/home_messages.page.jsx index 698492aea..d6b2258f4 100644 --- a/packages/ui-default/pages/home_messages.page.jsx +++ b/packages/ui-default/pages/home_messages.page.jsx @@ -1,4 +1,6 @@ import { NamedPage } from 'vj/misc/Page'; +import React from 'react'; +import { createRoot } from 'react-dom/client'; import api, { gql } from 'vj/utils/api'; import loadReactRedux from 'vj/utils/loadReactRedux'; import parseQueryString from 'vj/utils/parseQueryString'; @@ -26,9 +28,7 @@ const page = new NamedPage('home_messages', () => { const { default: WebSocket } = await import('../components/socket'); const { default: MessagePadApp } = await import('../components/messagepad'); const { default: MessagePadReducer } = await import('../components/messagepad/reducers'); - const { - React, render, Provider, store, - } = await loadReactRedux(MessagePadReducer); + const { Provider, store } = await loadReactRedux(MessagePadReducer); reduxStore = store; @@ -71,7 +71,7 @@ const page = new NamedPage('home_messages', () => { return this; }; - render( + createRoot($('#messagePad').get(0)).render( { @@ -84,7 +84,6 @@ const page = new NamedPage('home_messages', () => { }} /> , - $('#messagePad').get(0), ); } diff --git a/packages/ui-default/pages/problem_config.page.tsx b/packages/ui-default/pages/problem_config.page.tsx index 43d7eed60..7b6a40a53 100644 --- a/packages/ui-default/pages/problem_config.page.tsx +++ b/packages/ui-default/pages/problem_config.page.tsx @@ -1,5 +1,7 @@ import { NamedPage } from 'vj/misc/Page'; import request from 'vj/utils/request'; +import React from 'react'; +import { createRoot } from 'react-dom/client'; import loadReactRedux from 'vj/utils/loadReactRedux'; import i18n from 'vj/utils/i18n'; import yaml from 'js-yaml'; @@ -149,9 +151,7 @@ const page = new NamedPage('problem_config', () => { import('vj/components/problemconfig/reducer'), ]); - const { - React, render, Provider, store, - } = await loadReactRedux(ProblemConfigReducer); + const { Provider, store } = await loadReactRedux(ProblemConfigReducer); reduxStore = store; @@ -179,7 +179,7 @@ const page = new NamedPage('problem_config', () => { subtasks: normalizeSubtasks(subtasks, (i) => i, state.config.time, state.config.memory, true), }); }); - render( + createRoot($('#ProblemConfig').get(0)).render(
@@ -191,7 +191,6 @@ const page = new NamedPage('problem_config', () => {
, - $('#ProblemConfig').get(0), ); } diff --git a/packages/ui-default/pages/problem_detail.page.jsx b/packages/ui-default/pages/problem_detail.page.jsx index 4d2890a8d..49fc75686 100644 --- a/packages/ui-default/pages/problem_detail.page.jsx +++ b/packages/ui-default/pages/problem_detail.page.jsx @@ -1,4 +1,6 @@ import yaml from 'js-yaml'; +import ReactDOM, { createRoot } from 'react-dom/client'; +import React from 'react'; import { getScoreColor } from '@hydrooj/utils/lib/status'; import { NamedPage } from 'vj/misc/Page'; import { downloadProblemSet } from 'vj/components/zipDownloader'; @@ -132,9 +134,7 @@ const page = new NamedPage(['problem_detail', 'contest_detail_problem', 'homewor const { default: WebSocket } = await import('../components/socket'); const { default: ScratchpadApp } = await import('../components/scratchpad'); const { default: ScratchpadReducer } = await import('../components/scratchpad/reducers'); - const { - React, render, unmountComponentAtNode, Provider, store, - } = await loadReactRedux(ScratchpadReducer); + const { Provider, store } = await loadReactRedux(ScratchpadReducer); const sock = new WebSocket(UiContext.pretestConnUrl); sock.onmessage = (message) => { @@ -145,17 +145,15 @@ const page = new NamedPage(['problem_detail', 'contest_detail_problem', 'homewor }); }; + const root = createRoot($('#scratchpad').get(0)); renderReact = () => { - render( + root.render( , - $('#scratchpad').get(0), ); }; - unmountReact = () => { - unmountComponentAtNode($('#scratchpad').get(0)); - }; + unmountReact = () => root.unmount(); reactLoaded = true; $('.loader-container').hide(); } @@ -192,17 +190,12 @@ const page = new NamedPage(['problem_detail', 'contest_detail_problem', 'homewor const props = yaml.load(s); if (!(props instanceof Array)) return; $('.outer-loader-container').show(); - const [{ default: Objective }, React, ReactDOM] = await Promise.all([ - import('vj/components/objective-question/index'), - import('react'), - import('react-dom'), - ]); + const { default: Objective } = await import('vj/components/objective-question/index'); - ReactDOM.render( + ReactDOM.createRoot($('.problem-content').get(0)).render(
, - $('.problem-content').get(0), ); $('.outer-loader-container').hide(); } catch (e) { } diff --git a/packages/ui-default/utils/loadReactRedux.ts b/packages/ui-default/utils/loadReactRedux.ts index 468b9f85e..467234576 100644 --- a/packages/ui-default/utils/loadReactRedux.ts +++ b/packages/ui-default/utils/loadReactRedux.ts @@ -2,7 +2,7 @@ import { Action, AnyAction, Reducer } from 'redux'; export default async function loadReactRedux(storeReducer: Reducer) { const React = await import('react'); - const { render, unmountComponentAtNode } = await import('react-dom'); + const { createRoot } = await import('react-dom/client'); const { Provider } = await import('react-redux'); const { createStore, applyMiddleware } = await import('redux'); const { default: reduxThunk } = await import('redux-thunk'); @@ -24,8 +24,7 @@ export default async function loadReactRedux(st return { React, - render, - unmountComponentAtNode, + createRoot, Provider, store, }; diff --git a/packages/ui-default/utils/yamlCompact.js b/packages/ui-default/utils/yamlCompact.js deleted file mode 100644 index 2d68eab7c..000000000 --- a/packages/ui-default/utils/yamlCompact.js +++ /dev/null @@ -1,8 +0,0 @@ -// eslint-disable-next-line import/no-unresolved -import yaml, { Schema } from 'real-js-yaml'; - -Schema.create = (arg1, arg2) => new Schema(arg1, arg2); - -// eslint-disable-next-line import/no-unresolved -export * from 'real-js-yaml'; -export default yaml; diff --git a/packages/utils/package.json b/packages/utils/package.json index 9ebc0bb7b..72e45a397 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/utils", - "version": "1.2.1", + "version": "1.2.2", "description": "hydrooj utils", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro.git", @@ -8,14 +8,13 @@ "license": "AGPL-3.0-or-later", "preferUnplugged": true, "dependencies": { - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", - "moment": "^2.29.1", + "moment-timezone": "^0.5.34", "mongodb": "^3.7.3", - "systeminformation": "^5.11.9" + "systeminformation": "^5.11.14" }, "devDependencies": { - "@types/fs-extra": "^9.0.13", - "moment-timezone": "^0.5.34" + "@types/fs-extra": "^9.0.13" } } diff --git a/packages/vjudge/package.json b/packages/vjudge/package.json index 654118a1a..4f27f158b 100644 --- a/packages/vjudge/package.json +++ b/packages/vjudge/package.json @@ -12,16 +12,16 @@ "chrome-finder": "^1.0.7", "jsdom": "^19.0.0", "lodash": "^4.17.21", - "puppeteer-core": "^13.5.2", + "puppeteer-core": "^14.0.0", "puppeteer-extra": "^3.2.3", "puppeteer-extra-plugin-portal": "^3.0.1", "puppeteer-extra-plugin-stealth": "^2.9.0", - "superagent": "^7.1.2", + "superagent": "^7.1.3", "superagent-proxy": "^3.0.0" }, "devDependencies": { "@types/jsdom": "^16.2.14", - "@types/lodash": "^4.14.181", + "@types/lodash": "^4.14.182", "@types/superagent": "^4.1.15", "@types/superagent-proxy": "^3.0.0" }