52 | An unhandled error has occurred.
53 |
Reload
54 |
🗙
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/src/App/wwwroot/js/BlazorMonacoInterop.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {string} language
3 | * @param {string[] | undefined} triggerCharacters
4 | */
5 | export function registerCompletionProvider(language, triggerCharacters, completionItemProvider) {
6 | return monaco.languages.registerCompletionItemProvider(JSON.parse(language), {
7 | triggerCharacters: triggerCharacters,
8 | provideCompletionItems: async (model, position, context, token) => {
9 | /** @type {monaco.languages.CompletionList} */
10 | const result = JSON.parse(await globalThis.DotNetLab.BlazorMonacoInterop.ProvideCompletionItemsAsync(
11 | completionItemProvider, decodeURI(model.uri.toString()), JSON.stringify(position), JSON.stringify(context), token));
12 |
13 | for (const item of result.suggestions) {
14 | // `insertText` is missing if it's equal to `label` to save bandwidth
15 | // but monaco editor expects it to be always present.
16 | item.insertText ??= item.label;
17 |
18 | // These are the same for all completion items.
19 | item.range = result.range;
20 | item.commitCharacters = result.commitCharacters;
21 | }
22 |
23 | return result;
24 | },
25 | resolveCompletionItem: async (completionItem, token) => {
26 | const json = await globalThis.DotNetLab.BlazorMonacoInterop.ResolveCompletionItemAsync(
27 | completionItemProvider, JSON.stringify(completionItem), token);
28 | return json ? JSON.parse(json) : completionItem;
29 | },
30 | });
31 | }
32 |
33 | /**
34 | * @param {monaco.IDisposable} disposable
35 | */
36 | export function dispose(disposable) {
37 | disposable.dispose();
38 | }
39 |
40 | /**
41 | * @param {monaco.CancellationToken} token
42 | * @param {() => void} callback
43 | */
44 | export function onCancellationRequested(token, callback) {
45 | token.onCancellationRequested(callback);
46 | }
47 |
--------------------------------------------------------------------------------
/src/App/wwwroot/js/WorkerController.js:
--------------------------------------------------------------------------------
1 | export function createWorker(scriptUrl, messageHandler, errorHandler) {
2 | const worker = new Worker(scriptUrl, { type: 'module' });
3 | worker.addEventListener('message', (e) => { messageHandler(e.data); });
4 | worker.addEventListener('error', (e) => { console.error(e); errorHandler(e.message ?? `${e.error ?? e}`); });
5 | worker.addEventListener('messageerror', () => { errorHandler('message error'); });
6 | return worker;
7 | }
8 |
9 | /**
10 | * @param {Worker} worker
11 | * @param {string} message
12 | */
13 | export function postMessage(worker, message) {
14 | worker.postMessage(message);
15 | }
16 |
17 | /**
18 | * @param {Worker} worker
19 | */
20 | export function disposeWorker(worker) {
21 | worker.terminate();
22 | }
23 |
--------------------------------------------------------------------------------
/src/App/wwwroot/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": ".NET Lab",
3 | "short_name": ".NET Lab",
4 | "id": "./",
5 | "start_url": "./",
6 | "display": "standalone",
7 | "background_color": "#ffffff",
8 | "theme_color": "#03173d",
9 | "prefer_related_applications": false,
10 | "icons": [
11 | {
12 | "src": "favicon.png",
13 | "type": "image/png",
14 | "sizes": "512x512"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/src/App/wwwroot/service-worker.js:
--------------------------------------------------------------------------------
1 | // In development, always fetch from the network and do not enable offline support.
2 | // This is because caching would make development more difficult (changes would not
3 | // be reflected on the first load after each change).
4 | self.addEventListener('fetch', () => { });
5 |
--------------------------------------------------------------------------------
/src/App/wwwroot/service-worker.published.js:
--------------------------------------------------------------------------------
1 | // Caution! Be sure you understand the caveats before publishing an application with
2 | // offline support. See https://aka.ms/blazor-offline-considerations
3 |
4 | // Some reload logic inspired by https://stackoverflow.com/a/50535316.
5 |
6 | ///