Skip to content

Commit 30a24bb

Browse files
committed
initial autotyping work
1 parent 74c9905 commit 30a24bb

File tree

6 files changed

+64
-62
lines changed

6 files changed

+64
-62
lines changed

package.json

+10
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,25 @@
6363
"babel-preset-solid": "1.4.6",
6464
"dedent": "^0.7.0",
6565
"jszip": "^3.10.0",
66+
"monaco-editor-auto-typings": "^0.4.2",
6667
"monaco-editor-textmate": "^3.0.0",
6768
"monaco-textmate": "^3.0.1",
6869
"onigasm": "^2.2.5",
70+
"path": "^0.12.7",
6971
"prettier": "^2.7.1",
7072
"rollup": "^2.75.7",
7173
"solid-dismiss": "^1.2.1",
7274
"solid-heroicons": "^2.0.3",
7375
"solid-js": "1.4.6",
7476
"y-webrtc": "^10.2.3",
7577
"yjs": "^13.5.39"
78+
},
79+
"overrides": {
80+
"monaco-editor": "~0.33.0"
81+
},
82+
"pnpm": {
83+
"overrides": {
84+
"monaco-editor": "~0.33.0"
85+
}
7686
}
7787
}

pnpm-lock.yaml

+38-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/editor/index.tsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Component, createEffect, onMount, onCleanup } from 'solid-js';
22
import { Uri, languages, editor as mEditor } from 'monaco-editor';
33
import { liftOff } from './setupSolid';
4+
import { AutoTypings, LocalStorageCache } from 'monaco-editor-auto-typings';
45
import { useZoom } from '../../hooks/useZoom';
56

67
const Editor: Component<{
@@ -64,23 +65,28 @@ const Editor: Component<{
6465
props.onDocChange?.(editor.getValue());
6566
});
6667
};
68+
const autoTyper = async () => {
69+
const autoTypings = await AutoTypings.create(editor, {
70+
sourceCache: new LocalStorageCache(),
71+
fileRootPath: 'file:///',
72+
monaco: { languages, Uri, editor: mEditor } as any,
73+
});
74+
editor.onDidDispose(() => autoTypings.dispose());
75+
};
6776

6877
// Initialize Monaco
6978
onMount(() => setupEditor());
7079
onCleanup(() => editor?.dispose());
71-
7280
createEffect(() => {
7381
editor.setModel(model());
7482
liftOff();
7583
});
76-
84+
onMount(() => autoTyper());
7785
createEffect(() => {
7886
mEditor.setTheme(props.isDark ? 'vs-dark-plus' : 'vs-light-plus');
7987
});
80-
8188
createEffect(() => {
82-
const fontSize = zoomState.fontSize;
83-
editor.updateOptions({ fontSize });
89+
editor.updateOptions({ fontSize: zoomState.fontSize });
8490
});
8591

8692
createEffect(() => {

src/components/editor/setupSolid.ts

+1-52
Original file line numberDiff line numberDiff line change
@@ -7,60 +7,9 @@ import { wireTmGrammars } from 'monaco-editor-textmate';
77
import onigasm from 'onigasm/lib/onigasm.wasm?url';
88
import typescriptReactTM from './TypeScriptReact.tmLanguage.json';
99
import cssTM from './css.tmLanguage.json';
10-
import sPackageJson from '/node_modules/solid-js/package.json?raw';
11-
import sWebPackageJson from '/node_modules/solid-js/web/package.json?raw';
1210
import sJsxRuntime from '/node_modules/solid-js/jsx-runtime.d.ts?raw';
13-
import sIndex from '/node_modules/solid-js/types/index.d.ts?raw';
14-
import sJsx from '/node_modules/solid-js/types/jsx.d.ts?raw';
15-
import sArray from '/node_modules/solid-js/types/reactive/array.d.ts?raw';
16-
import sObservable from '/node_modules/solid-js/types/reactive/observable.d.ts?raw';
17-
import sScheduler from '/node_modules/solid-js/types/reactive/scheduler.d.ts?raw';
18-
import sSignal from '/node_modules/solid-js/types/reactive/signal.d.ts?raw';
19-
import sComponent from '/node_modules/solid-js/types/render/component.d.ts?raw';
20-
import sFlow from '/node_modules/solid-js/types/render/flow.d.ts?raw';
21-
import sHydration from '/node_modules/solid-js/types/render/hydration.d.ts?raw';
22-
import sRenderIndex from '/node_modules/solid-js/types/render/index.d.ts?raw';
23-
import sSuspense from '/node_modules/solid-js/types/render/Suspense.d.ts?raw';
24-
import sClient from '/node_modules/solid-js/web/types/client.d.ts?raw';
25-
import sCore from '/node_modules/solid-js/web/types/core.d.ts?raw';
26-
import sWebIndex from '/node_modules/solid-js/web/types/index.d.ts?raw';
27-
import sWebJsx from '/node_modules/solid-js/web/types/jsx.d.ts?raw';
28-
import sServerMock from '/node_modules/solid-js/web/types/server-mock.d.ts?raw';
29-
import sStoreIndex from '/node_modules/solid-js/store/types/index.d.ts?raw';
30-
import sStateModifier from '/node_modules/solid-js/store/types/modifiers.d.ts?raw';
31-
import sMutable from '/node_modules/solid-js/store/types/mutable.d.ts?raw';
32-
import sServer from '/node_modules/solid-js/store/types/server.d.ts?raw';
33-
import sStore from '/node_modules/solid-js/store/types/store.d.ts?raw';
3411

35-
// Tell monaco about the file from solid-js
36-
function cm(source: string, path: string) {
37-
editor.createModel(source, 'typescript', Uri.parse(`file:///node_modules/solid-js/${path}`));
38-
}
39-
40-
cm(sPackageJson, 'package.json');
41-
cm(sWebPackageJson, 'web/package.json');
42-
cm(sJsxRuntime, 'jsx-runtime.d.ts');
43-
cm(sIndex, 'types/index.d.ts');
44-
cm(sJsx, 'types/jsx.d.ts');
45-
cm(sArray, 'types/reactive/array.d.ts');
46-
cm(sObservable, 'types/reactive/mutable.d.ts');
47-
cm(sScheduler, 'types/reactive/scheduler.d.ts');
48-
cm(sSignal, 'types/reactive/signal.d.ts');
49-
cm(sComponent, 'types/render/component.d.ts');
50-
cm(sFlow, 'types/render/flow.d.ts');
51-
cm(sHydration, 'types/render/hydration.d.ts');
52-
cm(sRenderIndex, 'types/render/index.d.ts');
53-
cm(sSuspense, 'types/render/Suspense.d.ts');
54-
cm(sClient, 'web/types/client.d.ts');
55-
cm(sCore, 'web/types/core.d.ts');
56-
cm(sWebIndex, 'web/types/index.d.ts');
57-
cm(sWebJsx, 'web/types/jsx.d.ts');
58-
cm(sServerMock, 'web/types/server-mock.d.ts');
59-
cm(sStoreIndex, 'store/types/index.d.ts');
60-
cm(sStateModifier, 'store/types/modifiers.d.ts');
61-
cm(sMutable, 'store/types/mutable.d.ts');
62-
cm(sServer, 'store/types/server.d.ts');
63-
cm(sStore, 'store/types/store.d.ts');
12+
editor.createModel(sJsxRuntime, 'typescript', Uri.parse('file:///node_modules/solid-js/jsx-runtime.d.ts'));
6413

6514
languages.typescript.typescriptDefaults.setEagerModelSync(true);
6615

tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"target": "ESNext",
44
"module": "ESNext",
5-
"lib": ["ESNext", "DOM", "DOM.Iterable"],
5+
"lib": ["ESNext", "DOM", "DOM.Iterable", "WebWorker"],
66
"allowSyntheticDefaultImports": true,
77
"isolatedModules": true,
88
"esModuleInterop": true,

vite.config.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import WindiCSS from 'vite-plugin-windicss';
55
export default defineConfig((env) => ({
66
plugins: [solidPlugin(), WindiCSS()],
77
define: {
8-
'process.env.BABEL_TYPES_8_BREAKING': 'true',
9-
'process.env.NODE_DEBUG': 'false',
10-
...(env.command == 'build' ? {} : { global: 'globalThis' }),
8+
...(env.command == 'build'
9+
? { 'process.env.': '({}).', 'process.platform': '""' }
10+
: { global: 'globalThis', process: JSON.stringify({ env: {} }) }),
1111
},
1212
build: {
1313
target: 'esnext',

0 commit comments

Comments
 (0)