Basic webpack setup
This commit is contained in:
Generated
+6624
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "browser-playground",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"private": true,
|
||||||
|
"main": "index.js",
|
||||||
|
"type": "module",
|
||||||
|
"dependencies": {
|
||||||
|
"monaco-editor-webpack-plugin": "^7.0.1",
|
||||||
|
"monaco-editor-workers": "^0.34.2",
|
||||||
|
"monaco-languageclient": "^4.0.3",
|
||||||
|
"path-browserify": "^1.0.1",
|
||||||
|
"vscode-languageserver": "^8.0.2",
|
||||||
|
"vscode-languageserver-protocol": "^3.17.2"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "webpack-dev-server --mode development --open",
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"watch": "webpack --watch --mode development --env esbuild"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"css-loader": "^6.7.2",
|
||||||
|
"style-loader": "^3.3.1",
|
||||||
|
"ts-loader": "^9.4.2",
|
||||||
|
"webpack": "^5.75.0",
|
||||||
|
"webpack-cli": "^5.0.1",
|
||||||
|
"webpack-dev-server": "^4.11.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>GitHub Actions Language Services</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<script defer type="module" src="./index.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="container" style="width:1024x;height:768px;border:1px solid gray"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import * as monaco from "monaco-editor";
|
||||||
|
|
||||||
|
import { buildWorkerDefinition } from "monaco-editor-workers";
|
||||||
|
|
||||||
|
import { MonacoServices } from "monaco-languageclient";
|
||||||
|
import getMessageServiceOverride from "vscode/service-override/messages";
|
||||||
|
import { StandaloneServices } from "vscode/services";
|
||||||
|
|
||||||
|
StandaloneServices.initialize({
|
||||||
|
...getMessageServiceOverride(document.body),
|
||||||
|
});
|
||||||
|
|
||||||
|
buildWorkerDefinition("dist", new URL("", window.location.href).href, false);
|
||||||
|
|
||||||
|
// register Monaco languages
|
||||||
|
monaco.languages.register({
|
||||||
|
id: "plaintext",
|
||||||
|
extensions: [".txt"],
|
||||||
|
aliases: ["PLAINTEXT", "plaintext"],
|
||||||
|
mimetypes: ["text/plain"],
|
||||||
|
});
|
||||||
|
|
||||||
|
// or import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
|
||||||
|
// if shipping only a subset of the features & languages is desired
|
||||||
|
|
||||||
|
monaco.editor.create(document.getElementById("container")!, {
|
||||||
|
value: 'console.log("Hello, world")',
|
||||||
|
language: "yaml",
|
||||||
|
});
|
||||||
|
|
||||||
|
// function createLanguageClient(
|
||||||
|
// transports: MessageTransports
|
||||||
|
// ): MonacoLanguageClient {
|
||||||
|
// return new MonacoLanguageClient({
|
||||||
|
// name: "Sample Language Client",
|
||||||
|
// clientOptions: {
|
||||||
|
// // use a language id as a document selector
|
||||||
|
// documentSelector: [{ language: "plaintext" }],
|
||||||
|
// // disable the default error handler
|
||||||
|
// errorHandler: {
|
||||||
|
// error: () => ({ action: ErrorAction.Continue }),
|
||||||
|
// closed: () => ({ action: CloseAction.DoNotRestart }),
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// // create a language client connection to the server running in the web worker
|
||||||
|
// connectionProvider: {
|
||||||
|
// get: () => {
|
||||||
|
// return Promise.resolve(transports);
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// install Monaco language client services
|
||||||
|
MonacoServices.install();
|
||||||
|
|
||||||
|
// const worker = new Worker(
|
||||||
|
// new URL("./src/serverWorker.ts", window.location.href).href,
|
||||||
|
// { type: "module" }
|
||||||
|
// );
|
||||||
|
// const reader = new BrowserMessageReader(worker);
|
||||||
|
// const writer = new BrowserMessageWriter(worker);
|
||||||
|
// const languageClient = createLanguageClient({ reader, writer });
|
||||||
|
// languageClient.start();
|
||||||
|
|
||||||
|
// reader.onClose(() => languageClient.stop());
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"lib": ["ES2022", "dom"]
|
||||||
|
},
|
||||||
|
"references": [
|
||||||
|
{ "path": "../service-worker" }
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
// import {
|
||||||
|
// BrowserMessageReader,
|
||||||
|
// BrowserMessageWriter,
|
||||||
|
// createConnection,
|
||||||
|
// } from "vscode-languageserver/browser.js";
|
||||||
|
|
||||||
|
// // work around typing issues
|
||||||
|
// declare const self: any;
|
||||||
|
|
||||||
|
// const messageReader = new BrowserMessageReader(self);
|
||||||
|
// const messageWriter = new BrowserMessageWriter(self);
|
||||||
|
|
||||||
|
// // const connection = createConnection(messageReader, messageWriter);
|
||||||
|
|
||||||
|
// // TODO: Setup lang server
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"lib": ["ES2022", "WebWorker"],
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2022",
|
||||||
|
"module": "ES2022",
|
||||||
|
"moduleResolution": "Node16",
|
||||||
|
"lib": ["ES2022", "dom"],
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"declaration": true,
|
||||||
|
"declarationMap": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"inlineSources": false,
|
||||||
|
"stripInternal": true,
|
||||||
|
"strict": true,
|
||||||
|
"strictPropertyInitialization": false,
|
||||||
|
"importHelpers": true,
|
||||||
|
"downlevelIteration": false,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
// Disallow inconsistently-cased references to the same file
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"noImplicitOverride": true,
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "dist"
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
const MonacoWebpackPlugin = require("monaco-editor-webpack-plugin");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: "./src/client/client.ts",
|
||||||
|
output: {
|
||||||
|
path: path.resolve(__dirname, "dist"),
|
||||||
|
filename: "./index.js",
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
fallback: {
|
||||||
|
path: require.resolve("path-browserify"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.ts$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: [
|
||||||
|
{
|
||||||
|
loader: "ts-loader",
|
||||||
|
options: {
|
||||||
|
compilerOptions: {
|
||||||
|
sourceMap: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.css$/,
|
||||||
|
use: ["style-loader", "css-loader"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.ttf$/,
|
||||||
|
type: "asset/resource",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
devServer: {
|
||||||
|
static: {
|
||||||
|
directory: path.join(__dirname, "public"),
|
||||||
|
},
|
||||||
|
compress: true,
|
||||||
|
port: 3000,
|
||||||
|
},
|
||||||
|
plugins: [new MonacoWebpackPlugin()],
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user