Skip to content

Commit a2a4aed

Browse files
committed
initial autotyping work
1 parent 72f98b2 commit a2a4aed

File tree

6 files changed

+51
-63
lines changed

6 files changed

+51
-63
lines changed

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,11 @@
4545
"jszip": "^3.7.1",
4646
"mitt": "^3.0.0",
4747
"monaco-editor": "^0.31.1",
48+
"monaco-editor-auto-typings": "^0.1.1",
4849
"monaco-editor-textmate": "^3.0.0",
4950
"monaco-textmate": "^3.0.1",
5051
"onigasm": "^2.2.5",
52+
"path": "^0.12.7",
5153
"prettier": "^2.5.1",
5254
"register-service-worker": "^1.7.2",
5355
"rollup": "^2.62.0",

pnpm-lock.yaml

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

src/components/editor/index.tsx

+10-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
interface Props {
@@ -80,23 +81,27 @@ const Editor: Component<Props> = (props) => {
8081

8182
props.ref?.(editor);
8283
};
84+
const autoTyper = () => {
85+
const autoTypings = AutoTypings.create(editor, {
86+
sourceCache: new LocalStorageCache(),
87+
fileRootPath: 'file:///',
88+
});
89+
editor.onDidDispose(() => autoTypings.dispose());
90+
};
8391

8492
// Initialize Monaco
8593
onMount(() => setupEditor());
8694
onCleanup(() => editor?.dispose());
87-
8895
createEffect(() => {
8996
editor.setModel(model());
9097
liftOff();
9198
});
92-
99+
onMount(() => autoTyper());
93100
createEffect(() => {
94101
mEditor.setTheme(props.isDark ? 'vs-dark-plus' : 'vs-light-plus');
95102
});
96-
97103
createEffect(() => {
98-
const fontSize = zoomState.fontSize;
99-
editor.updateOptions({ fontSize });
104+
editor.updateOptions({ fontSize: zoomState.fontSize });
100105
});
101106

102107
return (

src/components/editor/setupSolid.ts

+5-52
Original file line numberDiff line numberDiff line change
@@ -7,60 +7,13 @@ 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(
13+
sJsxRuntime,
14+
'typescript',
15+
Uri.parse('file:///node_modules/solid-js/jsx-runtime.d.ts'),
16+
);
6417

6518
languages.typescript.typescriptDefaults.setEagerModelSync(true);
6619

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
@@ -4,9 +4,9 @@ import solidPlugin from 'vite-plugin-solid';
44
export default defineConfig((env) => ({
55
plugins: [solidPlugin()],
66
define: {
7-
'process.env.BABEL_TYPES_8_BREAKING': 'true',
8-
'process.env.NODE_DEBUG': 'false',
9-
...(env.command == 'build' ? {} : { global: 'globalThis' }),
7+
...(env.command == 'build'
8+
? { 'process.env.': '({}).', 'process.platform': '""' }
9+
: { global: 'globalThis', process: JSON.stringify({ env: {} }) }),
1010
},
1111
build: {
1212
target: 'esnext',

0 commit comments

Comments
 (0)