From 68d4522e49d7d7f1fc0b4e27fb2a83ed1b8cce10 Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 19 Jan 2022 19:59:24 +0800 Subject: [PATCH] ui: handle typings for NodeRequire --- .../autocomplete/UserSelectAutoComplete.tsx | 2 +- .../components/monaco/languages/typescript.ts | 14 ++++++++++++-- packages/ui-default/package.json | 3 ++- .../{contest_edit.page.js => contest_edit.page.ts} | 0 4 files changed, 15 insertions(+), 4 deletions(-) rename packages/ui-default/pages/{contest_edit.page.js => contest_edit.page.ts} (100%) diff --git a/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx b/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx index 7f5aa5591..817c79b8b 100644 --- a/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx +++ b/packages/ui-default/components/autocomplete/UserSelectAutoComplete.tsx @@ -38,7 +38,7 @@ export default class UserSelectAutoComplete extends AutoC { this.ref = ref; }} - height={this.options.height || "34px"} + height={this.options.height || '34px'} defaultItems={value} onChange={this.onChange} multi={this.options.multi} diff --git a/packages/ui-default/components/monaco/languages/typescript.ts b/packages/ui-default/components/monaco/languages/typescript.ts index c4f2d062c..a2da14831 100644 --- a/packages/ui-default/components/monaco/languages/typescript.ts +++ b/packages/ui-default/components/monaco/languages/typescript.ts @@ -2,9 +2,10 @@ import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; const types = require.context('!!raw-loader!@types/node/', true, /\.d\.ts$/); -const diagnosticsOptions = { +const diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions = { noSemanticValidation: false, noSyntaxValidation: false, + noSuggestionDiagnostics: true, }; const compilerOptions = { target: monaco.languages.typescript.ScriptTarget.ES2020, @@ -22,9 +23,18 @@ const libSource = [ const libUri = 'ts:filename/basic.d.ts'; monaco.languages.typescript.javascriptDefaults.addExtraLib(libSource, libUri); monaco.editor.createModel(libSource, 'typescript', monaco.Uri.parse(libUri)); +const modules = []; for (const key of types.keys()) { - const val = types(key).default; + const val = types(key).default.replace('declare var require: NodeRequire;', ''); + if (val.includes('declare module ')) { + modules.push(val.toString().split('declare module \'')[1].split('\'')[0]); + } const uri = `ts:node/${key.split('./')[1]}`; monaco.languages.typescript.javascriptDefaults.addExtraLib(val, uri); monaco.editor.createModel(val, 'typescript', monaco.Uri.parse(uri)); } +let val = 'declare var require:'; +for (const m of modules) val += `((id:'${m}')=>(typeof import('${m}')))&`; +val += '((id:string)=>any)'; +monaco.languages.typescript.javascriptDefaults.addExtraLib(val, 'ts:node/require.d.ts'); +monaco.editor.createModel(val, 'typescript', monaco.Uri.parse('ts:node/require.d.ts')); diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index cbebb87e0..de41d365d 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.30.0", + "version": "4.30.1", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", @@ -17,6 +17,7 @@ "@types/json-schema": "^7.0.9", "@types/katex": "^0.11.1", "@types/qrcode": "^1.4.2", + "@types/redux-logger": "^3.0.9", "@types/sockjs-client": "^1.5.1", "@undefined-moe/monaco-yaml": "^2.5.0", "ansi_up": "^5.1.0", diff --git a/packages/ui-default/pages/contest_edit.page.js b/packages/ui-default/pages/contest_edit.page.ts similarity index 100% rename from packages/ui-default/pages/contest_edit.page.js rename to packages/ui-default/pages/contest_edit.page.ts