From c6485c536e3563de34a9c7ee0404404c7218d11e Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 15 Mar 2022 10:24:24 +0800 Subject: [PATCH] ui: polyfill queueMicrotask --- packages/ui-default/build/config/webpack.js | 1 + packages/ui-default/build/index.js | 10 +--------- packages/ui-default/build/{main.js => main.ts} | 4 ++++ packages/ui-default/components/monaco/loader.ts | 12 ++++++++---- packages/ui-default/package.json | 3 ++- packages/ui-default/polyfill.ts | 11 +++++++++++ packages/ui-default/templates/layout/html5.html | 11 ++++++++++- 7 files changed, 37 insertions(+), 15 deletions(-) rename packages/ui-default/build/{main.js => main.ts} (94%) create mode 100644 packages/ui-default/polyfill.ts diff --git a/packages/ui-default/build/config/webpack.js b/packages/ui-default/build/config/webpack.js index 67e6b6bbe..b955a82b2 100644 --- a/packages/ui-default/build/config/webpack.js +++ b/packages/ui-default/build/config/webpack.js @@ -83,6 +83,7 @@ export default function (env = {}) { context: root(), entry: { hydro: './entry.js', + polyfill: './polyfill.ts', 'default.theme': './theme/default.js', }, output: { diff --git a/packages/ui-default/build/index.js b/packages/ui-default/build/index.js index 544c9bce6..45fc5a398 100644 --- a/packages/ui-default/build/index.js +++ b/packages/ui-default/build/index.js @@ -1,11 +1,7 @@ const esbuild = require('esbuild'); const fs = require('fs'); -let transformTimeUsage = 0; -let transformCount = 0; -let displayTimeout; function transform(filename) { - const start = new Date(); const result = esbuild.buildSync({ entryPoints: [filename], sourcemap: 'inline', @@ -16,10 +12,6 @@ function transform(filename) { write: false, }); if (result.warnings.length) console.warn(result.warnings); - transformTimeUsage += new Date().getTime() - start.getTime(); - transformCount++; - if (displayTimeout) clearTimeout(displayTimeout); - displayTimeout = setTimeout(() => console.log(`Transformed ${transformCount} files. (${transformTimeUsage}ms)`), 1000); return result.outputFiles[0].text; } require.extensions['.js'] = function loader(module, filename) { @@ -32,6 +24,6 @@ require.extensions['.js'] = function loader(module, filename) { require.extensions['.ts'] = function loader(module, filename) { return module._compile(transform(filename), filename); }; -const main = require('./main.js'); +const main = require('./main'); if (!module.parent) main(); diff --git a/packages/ui-default/build/main.js b/packages/ui-default/build/main.ts similarity index 94% rename from packages/ui-default/build/main.js rename to packages/ui-default/build/main.ts index 3e05740a3..6b88a16c4 100644 --- a/packages/ui-default/build/main.js +++ b/packages/ui-default/build/main.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-import-module-exports */ /* eslint-disable import/no-extraneous-dependencies */ import cac from 'cac'; import fs from 'fs-extra'; @@ -90,6 +91,9 @@ async function main() { if (fs.existsSync('public/hydro.js')) { fs.copyFileSync('public/hydro.js', `public/hydro-${pkg.version}.js`); } + if (fs.existsSync('public/polyfill.js')) { + fs.copyFileSync('public/polyfill.js', `public/polyfill-${pkg.version}.js`); + } if (fs.existsSync('public/default.theme.css')) { fs.copyFileSync('public/default.theme.css', `public/default-${pkg.version}.theme.css`); } diff --git a/packages/ui-default/components/monaco/loader.ts b/packages/ui-default/components/monaco/loader.ts index 8ddabdd14..076240328 100644 --- a/packages/ui-default/components/monaco/loader.ts +++ b/packages/ui-default/components/monaco/loader.ts @@ -44,10 +44,14 @@ export async function load(features = ['markdown']) { } s = Date.now(); console.log('Loading monaco feature:', feat); - if (loaders[feat]) await loaders[feat](); - else await loaders.external(res.default, feat); - console.log('Loaded monaco feature:', feat, 'in', Date.now() - s, 'ms'); - loaded.push(feat); + try { + if (loaders[feat]) await loaders[feat](); + else await loaders.external(res.default, feat); + console.log('Loaded monaco feature:', feat, 'in', Date.now() - s, 'ms'); + loaded.push(feat); + } catch (e) { + console.log('Monaco feat', feat, 'failed to load:', e); + } } await res.loadThemePromise; return { monaco: res.default, registerAction: res.registerAction }; diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index bcb86f2da..36348762f 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.34.3", + "version": "4.34.4", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", @@ -72,6 +72,7 @@ "prismjs": "^1.27.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-dom": "^17.0.2", diff --git a/packages/ui-default/polyfill.ts b/packages/ui-default/polyfill.ts new file mode 100644 index 000000000..142b1b466 --- /dev/null +++ b/packages/ui-default/polyfill.ts @@ -0,0 +1,11 @@ +import queueMicrotask from 'queue-microtask'; +import browserUpdate from 'browser-update'; + +window.queueMicrotask = queueMicrotask; +browserUpdate({ + required: { + e: -10, f: -10, o: -3, s: -1, c: -10, + }, + insecure: true, + api: 2022.03, +}); diff --git a/packages/ui-default/templates/layout/html5.html b/packages/ui-default/templates/layout/html5.html index 7814ffd5a..8aaee7ef9 100644 --- a/packages/ui-default/templates/layout/html5.html +++ b/packages/ui-default/templates/layout/html5.html @@ -5,7 +5,7 @@ {% import "components/noscript_note.html" as noscript_note with context %} {% import "components/user.html" as user with context %} - + @@ -29,6 +29,7 @@ body { --font-family: "{{ UserContext.fontFamily }}", "Open Sans", "Seravek", "Segoe UI", "Verdana", "PingFang SC", "Hiragino Sans GB", "Lantinghei SC", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans"; --code-font-family: "{{ UserContext.codeFontFamily }}", "monaco", "Source Code Pro", "Consolas", "Lucida Console", "monospace"; + --font-ligatures: {{ "normal" if UserContext.codeFontLigatures else "none" }} !important; } {% if process.env.DEV %} @@ -40,6 +41,14 @@ {% endif %}