Skip to content

Uncaught (in promise) Error: Unexpected usage #286

@MassMessage

Description

@MassMessage

I went to build the example folder, edited the files as below but at runtime, I'm getting this error:

Uncaught (in promise) Error: Unexpected usage
    at EditorSimpleWorker.loadForeignModule (editor.worker.bundle.js:8995)
    at SimpleWorkerServer._handleMessage (editor.worker.bundle.js:6629)
    at Object.handleMessage (editor.worker.bundle.js:6615)
    at SimpleWorkerProtocol._handleMessage (editor.worker.bundle.js:6484)
    at SimpleWorkerProtocol.handleMessage (editor.worker.bundle.js:6457)
    at SimpleWorkerServer.onmessage (editor.worker.bundle.js:6619)
    at self.onmessage (editor.worker.bundle.js:10166)

errors.js:8 Uncaught Error: Unexpected usage

Error: Unexpected usage
    at EditorSimpleWorker.loadForeignModule (editor.worker.bundle.js:8995)
    at SimpleWorkerServer._handleMessage (editor.worker.bundle.js:6629)
    at Object.handleMessage (editor.worker.bundle.js:6615)
    at SimpleWorkerProtocol._handleMessage (editor.worker.bundle.js:6484)
    at SimpleWorkerProtocol.handleMessage (editor.worker.bundle.js:6457)
    at SimpleWorkerServer.onmessage (editor.worker.bundle.js:6619)
    at self.onmessage (editor.worker.bundle.js:10166)

web config is basically unedited except to add the mode in exports:

/* --------------------------------------------------------------------------------------------
 * Copyright (c) 2018 TypeFox GmbH (http://www.typefox.io). All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for license information.
 * ------------------------------------------------------------------------------------------ */
const path = require('path');
const lib = path.resolve(__dirname, "lib");

const webpack = require('webpack');
const {merge} = require('webpack-merge');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');

const common = {
    entry: {
        "main": path.resolve(lib, "main.js"),
        "editor.worker": 'monaco-editor/esm/vs/editor/editor.worker.js'
    },
    output: {
        filename: '[name].bundle.js',
        path: lib
    },
    module: {
        rules: [{
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
        },
        {
            test: /\.ttf$/,
            use: ['file-loader']
        }]
    },
    target: 'web',
    node: {
        fs: 'empty',
        child_process: 'empty',
        net: 'empty',
        crypto: 'empty'
    },
    resolve: {
        alias: {
            'vscode': require.resolve('@codingame/monaco-languageclient/lib/vscode-compatibility')
        },
        extensions: ['.js', '.json', '.ttf']
    }
};

if (process.env['NODE_ENV'] === 'production')
{
    module.exports = merge(common, {
        plugins: [
            new UglifyJSPlugin(),
            new webpack.DefinePlugin({
                'process.env.NODE_ENV': JSON.stringify('production')
            })
        ],
        mode: 'production'
    });
}
else
{
    module.exports = merge(common, {
        devtool: 'source-map',
        mode: 'development',
        module: {
            rules: [{
                test: /\.js$/,
                enforce: 'pre',
                loader: 'source-map-loader',
                // These modules seems to have broken sourcemaps, exclude them to prevent an error flood in the logs
                exclude: [/vscode-jsonrpc/, /vscode-languageclient/, /vscode-languageserver-protocol/]
            }]
        }
    })
}

the moedified files from example folder goes as the following:

client.ts

import { MessageConnection } from 'vscode-jsonrpc';
import { listen } from '@codingame/monaco-jsonrpc';
import * as monaco from 'monaco-editor'
import {
    MonacoLanguageClient, CloseAction, ErrorAction,
    MonacoServices, createConnection
} from '@codingame/monaco-languageclient'
import normalizeUrl = require('normalize-url')
const ReconnectingWebSocket = require('reconnecting-websocket')

// register Monaco languages
monaco.languages.register({
    id: 'typescript',
    extensions: ['.ts'],
    aliases: ['TypeScript','ts','TS','Typescript','typescript']
})

// create Monaco editor
const value = `
let message:string = 'foo!'
`;

monaco.editor.create(document.getElementById("container")!, {
    model: monaco.editor.createModel(value, 'typescript', monaco.Uri.parse('file:///C:\\Users\\jackjj\\Desktop\\project\\demo\\ts\\file.ts')),
    glyphMargin: true,
    theme: "vs-dark",
    lightbulb: {
        enabled: true
    }
})

// install Monaco language client services
MonacoServices.install(monaco, {rootUri: "file:///C:\\Users\\jackjj\\Desktop\\project\\demo\\ts\\"})

// create the web socket
const url = createUrl('ws://localhost:3000/ts')
const webSocket = createWebSocket(url)

// listen when the web socket is opened
listen({
    webSocket,
    onConnection: connection => {
        // create and start the language client
        const languageClient = createLanguageClient(connection);
        const disposable = languageClient.start();
        connection.onClose(() => disposable.dispose());
    }
});

function createLanguageClient(connection: MessageConnection): MonacoLanguageClient {
    return new MonacoLanguageClient({
        name: "Sample Language Client",
        clientOptions: {
            // use a language id as a document selector
            documentSelector: ['typescript'],
            // disable the default error handler
            errorHandler: {
                error: () => ErrorAction.Continue,
                closed: () => CloseAction.DoNotRestart
            }
        },
        // create a language client connection from the JSON RPC connection on demand
        connectionProvider: {
            get: (errorHandler, closeHandler) => {
                return Promise.resolve(createConnection(connection, errorHandler, closeHandler))
            }
        }
    });
}

function createUrl(path: string): string {
    return normalizeUrl(path);
}

function createWebSocket(url: string): WebSocket {
    const socketOptions = {
        maxReconnectionDelay: 10000,
        minReconnectionDelay: 1000,
        reconnectionDelayGrowFactor: 1.3,
        connectionTimeout: 10000,
        maxRetries: Infinity,
        debug: false
    };
    return new ReconnectingWebSocket(url, [], socketOptions);
}

main.ts

/* --------------------------------------------------------------------------------------------
 * Copyright (c) 2018 TypeFox GmbH (http://www.typefox.io). All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for license information.
 * ------------------------------------------------------------------------------------------ */

export { }

require('monaco-editor');
(self as any).MonacoEnvironment = {
    getWorkerUrl: () => './editor.worker.bundle.js'
}
require('./client');

server.ts

import * as express from "express";

const app = express();
app.use(express.static(__dirname));
app.listen(4200);

What's that error and how can I fix it?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions