Skip to content

Commit bf6f734

Browse files
committed
Use InMemoryFileSystemProvider in App Playground
1 parent abce1d2 commit bf6f734

File tree

6 files changed

+66
-61
lines changed

6 files changed

+66
-61
lines changed

packages/examples/src/appPlayground/config.ts

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,46 @@
33
* Licensed under the MIT License. See LICENSE in the package root for license information.
44
* ------------------------------------------------------------------------------------------ */
55

6-
import * as vscode from 'vscode';
76
import { LogLevel } from '@codingame/monaco-vscode-api';
8-
import { RegisteredFileSystemProvider, registerFileSystemOverlay, RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
7+
import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
8+
import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
9+
import { InMemoryFileSystemProvider, registerFileSystemOverlay, type IFileWriteOptions } from '@codingame/monaco-vscode-files-service-override';
910
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
1011
import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-service-override';
1112
import getLocalizationServiceOverride from '@codingame/monaco-vscode-localization-service-override';
12-
import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
13-
import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
14-
import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
15-
import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
1613
import getRemoteAgentServiceOverride from '@codingame/monaco-vscode-remote-agent-service-override';
17-
import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
14+
import getSearchServiceOverride from '@codingame/monaco-vscode-search-service-override';
1815
import getSecretStorageServiceOverride from '@codingame/monaco-vscode-secret-storage-service-override';
1916
import getStorageServiceOverride from '@codingame/monaco-vscode-storage-service-override';
20-
import getSearchServiceOverride from '@codingame/monaco-vscode-search-service-override';
17+
import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
18+
import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
19+
import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
20+
import * as vscode from 'vscode';
2121

2222
// this is required syntax highlighting
23+
import '@codingame/monaco-vscode-search-result-default-extension';
2324
import '@codingame/monaco-vscode-typescript-basics-default-extension';
2425
import '@codingame/monaco-vscode-typescript-language-features-default-extension';
25-
import '@codingame/monaco-vscode-search-result-default-extension';
2626

2727
import '../../resources/vsix/open-collaboration-tools.vsix';
2828

29-
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
29+
import type { WrapperConfig } from 'monaco-editor-wrapper';
3030
import { defaultHtmlAugmentationInstructions, defaultViewsInit } from 'monaco-editor-wrapper/vscode/services';
3131
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
32-
import { createDefaultWorkspaceFile } from '../common/client/utils.js';
32+
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
3333
import helloTsCode from '../../resources/appPlayground/hello.ts?raw';
3434
import testerTsCode from '../../resources/appPlayground/tester.ts?raw';
35-
import type { WrapperConfig } from 'monaco-editor-wrapper';
35+
import { createDefaultWorkspaceContent } from '../common/client/utils.js';
3636

3737
export type ConfigResult = {
3838
wrapperConfig: WrapperConfig
39-
workspaceFile: vscode.Uri;
39+
workspaceFileUri: vscode.Uri;
4040
helloTsUri: vscode.Uri;
4141
testerTsUri: vscode.Uri;
4242
};
4343

44-
export const configure = (htmlContainer?: HTMLElement): ConfigResult => {
45-
const workspaceFile = vscode.Uri.file('/workspace/.vscode/workspace.code-workspace');
44+
export const configure = async (htmlContainer?: HTMLElement): Promise<ConfigResult> => {
45+
const workspaceFileUri = vscode.Uri.file('/workspace.code-workspace');
4646

4747
const wrapperConfig: WrapperConfig = {
4848
$type: 'extended',
@@ -84,7 +84,7 @@ export const configure = (htmlContainer?: HTMLElement): ConfigResult => {
8484
return true;
8585
},
8686
workspace: {
87-
workspaceUri: workspaceFile
87+
workspaceUri: workspaceFileUri
8888
}
8989
},
9090
configurationDefaults: {
@@ -122,17 +122,27 @@ export const configure = (htmlContainer?: HTMLElement): ConfigResult => {
122122
}
123123
};
124124

125+
const workspaceUri = vscode.Uri.file('/workspace');
125126
const helloTsUri = vscode.Uri.file('/workspace/hello.ts');
126127
const testerTsUri = vscode.Uri.file('/workspace/tester.ts');
127-
const fileSystemProvider = new RegisteredFileSystemProvider(false);
128-
fileSystemProvider.registerFile(new RegisteredMemoryFile(helloTsUri, helloTsCode));
129-
fileSystemProvider.registerFile(new RegisteredMemoryFile(testerTsUri, testerTsCode));
130-
fileSystemProvider.registerFile(createDefaultWorkspaceFile(workspaceFile, '/workspace'));
128+
const fileSystemProvider = new InMemoryFileSystemProvider();
129+
const textEncoder = new TextEncoder();
130+
131+
const options: IFileWriteOptions = {
132+
atomic: false,
133+
unlock: false,
134+
create: true,
135+
overwrite: true
136+
};
137+
await fileSystemProvider.mkdir(workspaceUri);
138+
await fileSystemProvider.writeFile(helloTsUri, textEncoder.encode(helloTsCode), options);
139+
await fileSystemProvider.writeFile(testerTsUri, textEncoder.encode(testerTsCode), options);
140+
await fileSystemProvider.writeFile(workspaceFileUri, textEncoder.encode(createDefaultWorkspaceContent('/workspace')), options);
131141
registerFileSystemOverlay(1, fileSystemProvider);
132142

133143
return {
134144
wrapperConfig,
135-
workspaceFile,
145+
workspaceFileUri,
136146
helloTsUri,
137147
testerTsUri
138148
};

packages/examples/src/appPlayground/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const wrapper = new MonacoEditorLanguageClientWrapper();
1212

1313
export const runApplicationPlayground = async () => {
1414
disableElement('button-start', true);
15-
const configResult = configure(document.body);
15+
const configResult = await configure(document.body);
1616
await wrapper.init(configResult.wrapperConfig);
1717
await configurePostStart(wrapper, configResult);
1818
};

packages/examples/src/appPlayground/reactMain.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { configurePostStart } from './common.js';
1212

1313
export const runApplicationPlaygroundReact = async () => {
1414

15-
const configResult = configure();
15+
const configResult = await configure();
1616
const root = ReactDOM.createRoot(document.getElementById('react-root')!);
1717
const App = () => {
1818
return (

packages/examples/src/clangd/client/main.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
* ------------------------------------------------------------------------------------------ */
55

66
import * as vscode from 'vscode';
7-
import { RegisteredFileSystemProvider, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
7+
import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
88
// this is required syntax highlighting
99
import '@codingame/monaco-vscode-cpp-default-extension';
1010
import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
1111
import { createWrapperConfig } from './config.js';
1212
import { ClangdWorkerHandler } from './workerHandler.js';
1313
import { MainRemoteMessageChannelFs } from './mainRemoteMessageChannelFs.js';
14-
import { createDefaultWorkspaceFile, disableElement } from '../../common/client/utils.js';
14+
import { createDefaultWorkspaceContent, disableElement } from '../../common/client/utils.js';
1515
import { HOME_DIR, WORKSPACE_PATH } from '../definitions.js';
1616

1717
const wrapper = new MonacoEditorLanguageClientWrapper();
@@ -22,7 +22,7 @@ export const runClangdWrapper = async () => {
2222

2323
const fileSystemProvider = new RegisteredFileSystemProvider(false);
2424
const workspaceFileUri = vscode.Uri.file(`${HOME_DIR}/workspace.code-workspace`);
25-
fileSystemProvider.registerFile(createDefaultWorkspaceFile(workspaceFileUri, WORKSPACE_PATH));
25+
fileSystemProvider.registerFile(new RegisteredMemoryFile(workspaceFileUri, createDefaultWorkspaceContent(WORKSPACE_PATH)));
2626
registerFileSystemOverlay(1, fileSystemProvider);
2727

2828
const readiness = async () => {

packages/examples/src/common/client/utils.ts

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
* Licensed under the MIT License. See LICENSE in the package root for license information.
44
* ------------------------------------------------------------------------------------------ */
55

6-
import { RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
76
import type { IStoredWorkspace } from '@codingame/monaco-vscode-configuration-service-override';
8-
import type { Uri } from 'vscode';
97

108
export const disableElement = (id: string, disabled: boolean) => {
119
const button = document.getElementById(id) as HTMLButtonElement | HTMLInputElement | null;
@@ -14,20 +12,17 @@ export const disableElement = (id: string, disabled: boolean) => {
1412
}
1513
};
1614

17-
export const createDefaultWorkspaceFile = (workspaceFile: Uri, workspacePath: string) => {
18-
return new RegisteredMemoryFile(
19-
workspaceFile,
20-
JSON.stringify(
21-
<IStoredWorkspace>{
22-
folders: [
23-
{
24-
path: workspacePath
25-
}
26-
]
27-
},
28-
null,
29-
2
30-
)
15+
export const createDefaultWorkspaceContent = (workspacePath: string) => {
16+
return JSON.stringify(
17+
<IStoredWorkspace>{
18+
folders: [
19+
{
20+
path: workspacePath
21+
}
22+
]
23+
},
24+
null,
25+
2
3126
);
3227
};
3328

packages/examples/src/python/client/config.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,37 @@
33
* Licensed under the MIT License. See LICENSE in the package root for license information.
44
* ------------------------------------------------------------------------------------------ */
55

6-
import * as vscode from 'vscode';
6+
import { LogLevel } from '@codingame/monaco-vscode-api';
7+
import getDebugServiceOverride from '@codingame/monaco-vscode-debug-service-override';
8+
import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
9+
import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
10+
import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
711
import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
812
import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-service-override';
913
import getLocalizationServiceOverride from '@codingame/monaco-vscode-localization-service-override';
10-
import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
11-
import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
12-
import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
13-
import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
14+
import getPreferencesServiceOverride from '@codingame/monaco-vscode-preferences-service-override';
15+
import '@codingame/monaco-vscode-python-default-extension';
1416
import getRemoteAgentServiceOverride from '@codingame/monaco-vscode-remote-agent-service-override';
15-
import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
17+
import getSearchServiceOverride from '@codingame/monaco-vscode-search-service-override';
1618
import getSecretStorageServiceOverride from '@codingame/monaco-vscode-secret-storage-service-override';
1719
import getStorageServiceOverride from '@codingame/monaco-vscode-storage-service-override';
18-
import getSearchServiceOverride from '@codingame/monaco-vscode-search-service-override';
19-
import getDebugServiceOverride from '@codingame/monaco-vscode-debug-service-override';
2020
import getTestingServiceOverride from '@codingame/monaco-vscode-testing-service-override';
21-
import getPreferencesServiceOverride from '@codingame/monaco-vscode-preferences-service-override';
22-
import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
23-
import '@codingame/monaco-vscode-python-default-extension';
24-
import { LogLevel } from '@codingame/monaco-vscode-api';
21+
import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
22+
import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
23+
import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
24+
import type { WrapperConfig } from 'monaco-editor-wrapper';
25+
import { defaultHtmlAugmentationInstructions, defaultViewsInit } from 'monaco-editor-wrapper/vscode/services';
26+
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
2527
import { MonacoLanguageClient } from 'monaco-languageclient';
2628
import { createUrl } from 'monaco-languageclient/tools';
2729
import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
30+
import * as vscode from 'vscode';
2831
import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
29-
import type { WrapperConfig } from 'monaco-editor-wrapper';
30-
import { defaultHtmlAugmentationInstructions, defaultViewsInit } from 'monaco-editor-wrapper/vscode/services';
31-
import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
32-
import { createDefaultWorkspaceFile } from '../../common/client/utils.js';
33-
import { provideDebuggerExtensionConfig } from '../../debugger/client/debugger.js';
32+
import badPyCode from '../../../resources/python/bad.py?raw';
3433
import helloPyCode from '../../../resources/python/hello.py?raw';
3534
import hello2PyCode from '../../../resources/python/hello2.py?raw';
36-
import badPyCode from '../../../resources/python/bad.py?raw';
35+
import { createDefaultWorkspaceContent } from '../../common/client/utils.js';
36+
import { provideDebuggerExtensionConfig } from '../../debugger/client/debugger.js';
3737
import { createDebugLaunchConfigFile, type ConfigParams, type FileDefinition } from '../../debugger/common/definitions.js';
3838

3939
export const createDefaultConfigParams = (homeDir: string, htmlContainer?: HTMLElement): ConfigParams => {
@@ -67,7 +67,7 @@ export const createDefaultConfigParams = (homeDir: string, htmlContainer?: HTMLE
6767
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('hello.py')!.uri, helloPyCode));
6868
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('hello2.py')!.uri, hello2PyCode));
6969
fileSystemProvider.registerFile(new RegisteredMemoryFile(files.get('bad.py')!.uri, badPyCode));
70-
fileSystemProvider.registerFile(createDefaultWorkspaceFile(configParams.workspaceFile, workspaceRoot));
70+
fileSystemProvider.registerFile(new RegisteredMemoryFile(configParams.workspaceFile, createDefaultWorkspaceContent(configParams.workspaceRoot)));
7171
fileSystemProvider.registerFile(createDebugLaunchConfigFile(workspaceRoot, configParams.languageId));
7272
registerFileSystemOverlay(1, fileSystemProvider);
7373

0 commit comments

Comments
 (0)