Skip to content

Commit f758359

Browse files
author
Emil Andersson
committed
decrease monaco bundle size
1 parent 350f60a commit f758359

File tree

5 files changed

+82
-34
lines changed

5 files changed

+82
-34
lines changed

build_scripts/webpack-plugins.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,38 @@ module.exports = () => {
9393
title: 'TypeScript',
9494
excludeWarnings: false
9595
}),
96-
new MonacoWebpackPlugin()
96+
new MonacoWebpackPlugin({
97+
features: [
98+
'!accessibilityHelp',
99+
'!anchorSelect',
100+
'!caretOperations',
101+
'!clipboard',
102+
'!codeAction',
103+
'!codelens',
104+
'!colorDetector',
105+
'!contextmenu',
106+
'!coreCommands',
107+
'!cursorUndo',
108+
'!dnd',
109+
'!fontZoom',
110+
'!gotoError',
111+
'!gotoLine',
112+
'!gotoSymbol',
113+
'!iPadShowKeyboard',
114+
'!inspectTokens',
115+
'!links',
116+
'!parameterHints',
117+
'!quickHelp',
118+
'!referenceSearch',
119+
'!snippets',
120+
'!toggleHighContrast',
121+
'!toggleTabFocusMode',
122+
'!transpose',
123+
'!unusualLineTerminators',
124+
'!viewportSemanticTokens'
125+
],
126+
languages: []
127+
})
97128
]
98129

99130
if (!helpers.isProduction) {

build_scripts/webpack.config.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,32 @@ module.exports = {
6262
splitChunks: {
6363
cacheGroups: {
6464
vendor: {
65-
test: /[\\/]node_modules[\\/](react|react-dom|@firebase|d3|codemirror|faker|remark-mdx|@mdx-js)[\\/]/,
65+
test: /[\\/]node_modules[\\/](react|react-dom|@firebase|d3)[\\/]/,
6666
name: 'vendor',
67-
chunks: 'all'
67+
chunks: 'all',
68+
enforce: true
69+
},
70+
'cypher-editor': {
71+
test: /[\\/]node_modules[\\/](antlr4|codemirror|cypher-codemirror|cypher-editor-support)[\\/]/,
72+
name: 'cypher-editor',
73+
chunks: 'all',
74+
enforce: true
75+
},
76+
mdx: {
77+
test: /[\\/]node_modules[\\/](@babel|@literal-jsx|@mdx-js|acorn|acorn-jsx|hast-util-raw|mdast-util-to-hast|remark-mdx|remark-parse)[\\/]/,
78+
name: 'mdx',
79+
chunks: 'all',
80+
enforce: true
6881
},
69-
'cypher-codemirror': {
70-
test: /[\\/]node_modules[\\/](cypher-codemirror|cypher-editor-support)[\\/]/,
71-
name: 'cypher-codemirror',
82+
monaco: {
83+
test: /[\\/]node_modules[\\/](monaco-editor)[\\/]/,
84+
name: 'monaco',
7285
chunks: 'all',
7386
enforce: true
7487
},
75-
ui: {
88+
'relate-by-ui': {
7689
test: /[\\/]node_modules[\\/](@relate-by-ui|semantic-ui-react)[\\/]/,
77-
name: 'ui',
90+
name: 'relate-by-ui',
7891
chunks: 'all',
7992
enforce: true
8093
},

src/browser/modules/Editor/CypherMonacoThemes.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
2020

21-
import * as monaco from 'monaco-editor'
21+
import { editor } from 'monaco-editor/esm/vs/editor/editor.api'
2222
import { base } from 'browser-styles/themes'
2323
import {
2424
LIGHT_THEME,
@@ -224,7 +224,7 @@ const tokensWithoutSyntaxHighlighting: string[] = [
224224
]
225225

226226
// syntax highlighting from cypher-editor/cypher-codemirror/src/css/syntax.css
227-
const sharedRules: monaco.editor.ITokenThemeRule[] = [
227+
const sharedRules: editor.ITokenThemeRule[] = [
228228
...strings.map(token => makeCypherTokenThemeRule(token, CypherColor.yellow)),
229229
...numbers.map(token => makeCypherTokenThemeRule(token, CypherColor.cyan)),
230230

@@ -279,7 +279,7 @@ const lightThemeRules = [
279279
)
280280
]
281281

282-
export const monacoDarkTheme: monaco.editor.IStandaloneThemeData = {
282+
export const monacoDarkTheme: editor.IStandaloneThemeData = {
283283
base: 'vs-dark',
284284
inherit: false,
285285
rules: darkThemeRules,
@@ -288,7 +288,7 @@ export const monacoDarkTheme: monaco.editor.IStandaloneThemeData = {
288288
foreground: CypherColor.white
289289
}
290290
}
291-
export const monacoLightTheme: monaco.editor.IStandaloneThemeData = {
291+
export const monacoLightTheme: editor.IStandaloneThemeData = {
292292
base: 'vs',
293293
inherit: false,
294294
rules: lightThemeRules,

src/browser/modules/Editor/CypherTokensProvider.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
import { InputStream } from 'antlr4/index.js'
2222
import { CypherLexer } from 'cypher-editor-support/src/_generated/CypherLexer'
23-
import * as monaco from 'monaco-editor'
23+
import { languages } from 'monaco-editor/esm/vs/editor/editor.api'
2424

25-
class CypherState implements monaco.languages.IState {
25+
class CypherState implements languages.IState {
2626
clone() {
2727
return new CypherState()
2828
}
@@ -32,12 +32,12 @@ class CypherState implements monaco.languages.IState {
3232
}
3333
}
3434

35-
export class CypherTokensProvider implements monaco.languages.TokensProvider {
35+
export class CypherTokensProvider implements languages.TokensProvider {
3636
getInitialState(): CypherState {
3737
return new CypherState()
3838
}
3939

40-
tokenize(line: string): monaco.languages.ILineTokens {
40+
tokenize(line: string): languages.ILineTokens {
4141
const lexer = new CypherLexer(new InputStream(line))
4242

4343
return {

src/browser/modules/Editor/Monaco.tsx

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020

2121
import { parse } from 'cypher-editor-support'
2222
import { debounce } from 'lodash-es'
23-
import * as monaco from 'monaco-editor'
23+
import {
24+
editor,
25+
languages,
26+
MarkerSeverity
27+
} from 'monaco-editor/esm/vs/editor/editor.api'
2428
import React, { useEffect, useRef } from 'react'
2529
import { withBus } from 'react-suber'
2630
import { Bus } from 'suber'
@@ -45,7 +49,7 @@ interface MonacoProps {
4549
id: string
4650
value?: string
4751
onChange?: (value: string) => void
48-
options?: monaco.editor.IGlobalEditorOptions
52+
options?: editor.IGlobalEditorOptions
4953
theme?: BrowserTheme
5054
}
5155

@@ -57,19 +61,19 @@ const Monaco = ({
5761
onChange = () => undefined,
5862
theme = LIGHT_THEME
5963
}: MonacoProps): JSX.Element => {
60-
const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null)
64+
const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null)
6165
const monacoId = `monaco-${id}`
6266

6367
// Create monaco instance, listen to text changes and destroy
6468
useEffect(() => {
65-
monaco.languages.register({ id: 'cypher' })
66-
monaco.languages.setTokensProvider('cypher', new CypherTokensProvider())
69+
languages.register({ id: 'cypher' })
70+
languages.setTokensProvider('cypher', new CypherTokensProvider())
6771

68-
monaco.editor.defineTheme(DARK_THEME, monacoDarkTheme)
69-
monaco.editor.defineTheme(LIGHT_THEME, monacoLightTheme)
70-
monaco.editor.defineTheme(OUTLINE_THEME, monacoLightTheme)
72+
editor.defineTheme(DARK_THEME, monacoDarkTheme)
73+
editor.defineTheme(LIGHT_THEME, monacoLightTheme)
74+
editor.defineTheme(OUTLINE_THEME, monacoLightTheme)
7175

72-
editorRef.current = monaco.editor.create(
76+
editorRef.current = editor.create(
7377
document.getElementById(monacoId) as HTMLElement,
7478
{
7579
automaticLayout: true,
@@ -102,7 +106,7 @@ const Monaco = ({
102106

103107
// Update theme when setting is changed
104108
useEffect(() => {
105-
monaco.editor.setTheme(theme)
109+
editor.setTheme(theme)
106110
}, [theme])
107111

108112
// Trigger update when multi statement setting is changed to update warnings
@@ -126,8 +130,8 @@ const Monaco = ({
126130

127131
// On each text change, clear warnings and reset countdown to adding warnings
128132
const onContentUpdate = () => {
129-
monaco.editor.setModelMarkers(
130-
editorRef.current?.getModel() as monaco.editor.ITextModel,
133+
editor.setModelMarkers(
134+
editorRef.current?.getModel() as editor.ITextModel,
131135
monacoId,
132136
[]
133137
)
@@ -139,20 +143,20 @@ const Monaco = ({
139143
) => {
140144
if (!statements.length) return
141145

142-
const model = editorRef.current?.getModel() as monaco.editor.ITextModel
146+
const model = editorRef.current?.getModel() as editor.ITextModel
143147

144148
// add multi statement warning if multi setting is off
145149
if (statements.length > 1 && !enableMultiStatementMode) {
146150
const secondStatementLine = statements[1].start.line
147-
monaco.editor.setModelMarkers(model, monacoId, [
151+
editor.setModelMarkers(model, monacoId, [
148152
{
149153
startLineNumber: secondStatementLine,
150154
startColumn: 1,
151155
endLineNumber: secondStatementLine,
152156
endColumn: 1000,
153157
message:
154158
'To use multi statement queries, please enable multi statement in the settings panel.',
155-
severity: monaco.MarkerSeverity.Warning
159+
severity: MarkerSeverity.Warning
156160
}
157161
])
158162
}
@@ -176,8 +180,8 @@ const Monaco = ({
176180
response.success === true &&
177181
response.result.summary.notifications.length > 0
178182
) {
179-
monaco.editor.setModelMarkers(model, monacoId, [
180-
...monaco.editor.getModelMarkers({ owner: monacoId }),
183+
editor.setModelMarkers(model, monacoId, [
184+
...editor.getModelMarkers({ owner: monacoId }),
181185
...response.result.summary.notifications.map(
182186
({
183187
description,
@@ -193,7 +197,7 @@ const Monaco = ({
193197
endLineNumber: statementLineNumber + line,
194198
endColumn: 1000,
195199
message: title + '\n\n' + description,
196-
severity: monaco.MarkerSeverity.Warning
200+
severity: MarkerSeverity.Warning
197201
})
198202
)
199203
])

0 commit comments

Comments
 (0)