diff --git a/packages/generator-langium/src/index.ts b/packages/generator-langium/src/index.ts index 5e5698e94..6b41c889d 100644 --- a/packages/generator-langium/src/index.ts +++ b/packages/generator-langium/src/index.ts @@ -239,9 +239,9 @@ export class LangiumGenerator extends Generator { this.sourceRoot(path.join(__dirname, `${BASE_DIR}/${PACKAGE_WEB}`)); const webFiles = [ 'package.json', - 'langium-config.json', 'language-configuration.json', 'tsconfig.json', + 'index.html', 'vite.config.ts', 'src', 'static' @@ -253,6 +253,7 @@ export class LangiumGenerator extends Generator { templateCopyOptions ); } + mainPackageJson.workspaces.push('packages/web'); } if (this.answers.includeVSCode) { @@ -272,6 +273,7 @@ export class LangiumGenerator extends Generator { templateCopyOptions ); } + mainPackageJson.workspaces.push('packages/extension'); } this.fs.writeJSON(this._extensionPath('.package.json'), mainPackageJson, undefined, 4); diff --git a/packages/generator-langium/templates/packages/cli/src/generator.ts b/packages/generator-langium/templates/packages/cli/src/generator.ts index 93036c17f..fe6c8f973 100644 --- a/packages/generator-langium/templates/packages/cli/src/generator.ts +++ b/packages/generator-langium/templates/packages/cli/src/generator.ts @@ -1,4 +1,4 @@ -import type { Model } from '../language/generated/ast.js'; +import type { Model } from '<%= language-id %>-language'; import { expandToNode, joinToNode, toString } from 'langium/generate'; import * as fs from 'node:fs'; import * as path from 'node:path'; diff --git a/packages/generator-langium/templates/packages/cli/src/main.ts b/packages/generator-langium/templates/packages/cli/src/main.ts index 996c9b481..4dbd61697 100644 --- a/packages/generator-langium/templates/packages/cli/src/main.ts +++ b/packages/generator-langium/templates/packages/cli/src/main.ts @@ -1,8 +1,7 @@ -import type { Model } from '../language/generated/ast.js'; +import type { Model } from '<%= language-id %>-language'; +import { create<%= LanguageName %>Services, <%= LanguageName %>LanguageMetaData } from '<%= language-id %>-language'; import chalk from 'chalk'; import { Command } from 'commander'; -import { <%= LanguageName %>LanguageMetaData } from '../language/generated/module.js'; -import { create<%= LanguageName %>Services } from '../language/<%= language-id %>-module.js'; import { extractAstNode } from './cli-util.js'; import { generateJavaScript } from './generator.js'; import { NodeFileSystem } from 'langium/node'; diff --git a/packages/generator-langium/templates/packages/extension/src/language/main.ts b/packages/generator-langium/templates/packages/extension/src/language/main.ts index 90f7d48eb..bc3c5b5dc 100644 --- a/packages/generator-langium/templates/packages/extension/src/language/main.ts +++ b/packages/generator-langium/templates/packages/extension/src/language/main.ts @@ -1,7 +1,7 @@ import { startLanguageServer } from 'langium/lsp'; import { NodeFileSystem } from 'langium/node'; import { createConnection, ProposedFeatures } from 'vscode-languageserver/node.js'; -import { create<%= LanguageName %>Services } from './<%= language-id %>-module.js'; +import { create<%= LanguageName %>Services } from '<%= language-id %>-language'; // Create a connection to the client const connection = createConnection(ProposedFeatures.all); diff --git a/packages/generator-langium/templates/packages/language/langium-config.json b/packages/generator-langium/templates/packages/language/langium-config.json index 32006a2ee..8326d9efe 100644 --- a/packages/generator-langium/templates/packages/language/langium-config.json +++ b/packages/generator-langium/templates/packages/language/langium-config.json @@ -6,6 +6,9 @@ "fileExtensions": <%= file-extension %>, "textMate": { "out": "syntaxes/<%= language-id %>.tmLanguage.json" + }, + "monarch": { + "out": "src/syntaxes/<%= language-id %>.monarch.ts" } }], "out": "src/generated" diff --git a/packages/generator-langium/templates/packages/language/package.json b/packages/generator-langium/templates/packages/language/package.json index 3473b94e5..1016b0aa8 100644 --- a/packages/generator-langium/templates/packages/language/package.json +++ b/packages/generator-langium/templates/packages/language/package.json @@ -10,6 +10,21 @@ "out", "src" ], + "main": "./out/index.js", + "module": "./out/index.js", + "exports": { + ".": { + "types": "./out/index.d.ts", + "default": "./out/index.js" + } + }, + "typesVersions": { + "*": { + ".": [ + "out/index" + ] + } + }, "scripts": { "build": "echo 'No build step'", "langium:generate": "langium generate", diff --git a/packages/generator-langium/templates/packages/language/src/index.ts b/packages/generator-langium/templates/packages/language/src/index.ts new file mode 100644 index 000000000..32a299ef0 --- /dev/null +++ b/packages/generator-langium/templates/packages/language/src/index.ts @@ -0,0 +1,6 @@ +export * from './<%= language-id %>-module.js'; +export * from './<%= language-id %>-validator.js'; +export * from './generated/ast.js'; +export * from './generated/grammar.js'; +export * from './generated/module.js'; +export { default as monarchSyntax } from './syntaxes/<%= language-id %>.monarch.js'; diff --git a/packages/generator-langium/templates/packages/language/test/linking/linking.test.ts b/packages/generator-langium/templates/packages/language/test/linking/linking.test.ts index fa3aeac23..89f12495a 100644 --- a/packages/generator-langium/templates/packages/language/test/linking/linking.test.ts +++ b/packages/generator-langium/templates/packages/language/test/linking/linking.test.ts @@ -2,8 +2,7 @@ import { afterEach, beforeAll, describe, expect, test } from "vitest"; import { EmptyFileSystem, type LangiumDocument } from "langium"; import { expandToString as s } from "langium/generate"; import { clearDocuments, parseHelper } from "langium/test"; -import { create<%= LanguageName %>Services } from "../../src/language/<%= language-id %>-module.js"; -import { Model, isModel } from "../../src/language/generated/ast.js"; +import { create<%= LanguageName %>Services, isModel, Model } from "<%= language-id %>-language"; let services: ReturnTypeServices>; let parse: ReturnType>; diff --git a/packages/generator-langium/templates/packages/language/test/parsing/parsing.test.ts b/packages/generator-langium/templates/packages/language/test/parsing/parsing.test.ts index 27810096a..f27815ed5 100644 --- a/packages/generator-langium/templates/packages/language/test/parsing/parsing.test.ts +++ b/packages/generator-langium/templates/packages/language/test/parsing/parsing.test.ts @@ -2,8 +2,7 @@ import { beforeAll, describe, expect, test } from "vitest"; import { EmptyFileSystem, type LangiumDocument } from "langium"; import { expandToString as s } from "langium/generate"; import { parseHelper } from "langium/test"; -import { create<%= LanguageName %>Services } from "../../src/language/<%= language-id %>-module.js"; -import { Model, isModel } from "../../src/language/generated/ast.js"; +import { create<%= LanguageName %>Services, isModel, Model } from "<%= language-id %>-language"; let services: ReturnTypeServices>; let parse: ReturnType>; diff --git a/packages/generator-langium/templates/packages/language/test/validating/validating.test.ts b/packages/generator-langium/templates/packages/language/test/validating/validating.test.ts index 1a33aeb4d..fe8ac1c22 100644 --- a/packages/generator-langium/templates/packages/language/test/validating/validating.test.ts +++ b/packages/generator-langium/templates/packages/language/test/validating/validating.test.ts @@ -3,8 +3,7 @@ import { EmptyFileSystem, type LangiumDocument } from "langium"; import { expandToString as s } from "langium/generate"; import { parseHelper } from "langium/test"; import type { Diagnostic } from "vscode-languageserver-types"; -import { create<%= LanguageName %>Services } from "../../src/language/<%= language-id %>-module.js"; -import { Model, isModel } from "../../src/language/generated/ast.js"; +import { create<%= LanguageName %>Services, isModel, Model } from "<%= language-id %>-language"; let services: ReturnTypeServices>; let parse: ReturnType>; diff --git a/packages/generator-langium/templates/packages/web/langium-config.json b/packages/generator-langium/templates/packages/web/langium-config.json deleted file mode 100644 index aef528417..000000000 --- a/packages/generator-langium/templates/packages/web/langium-config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "projectName": "<%= LanguageName %>", - "languages": [{ - "id": "<%= language-id %>", - "grammar": "src/language/<%= language-id %>.langium", - "fileExtensions": <%= file-extension %>, - "textMate": { - "out": "syntaxes/<%= language-id %>.tmLanguage.json" - }, - "monarch": { - "out": "src/syntaxes/<%= language-id %>.monarch.ts" - } - }], - "out": "src/language/generated" -} diff --git a/packages/generator-langium/templates/packages/web/package.json b/packages/generator-langium/templates/packages/web/package.json index 16b93c9f7..cf0dc52c4 100644 --- a/packages/generator-langium/templates/packages/web/package.json +++ b/packages/generator-langium/templates/packages/web/package.json @@ -11,20 +11,19 @@ "src" ], "scripts": { - "build": "npm run build", - "bundle": "vite build", + "build": "vite build", "bundle:serve": "http-server ./dist --port 5175", "dev": "vite", "dev:debug": "vite --debug --force", "serve": "npm run dev" }, "dependencies": { - "@codingame/monaco-vscode-editor-service-override": "~3.2.3", - "@codingame/monaco-vscode-keybindings-service-override": "~3.2.3", - "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~3.2.3", - "monaco-editor-wrapper": "~4.0.2", - "monaco-languageclient": "~8.1.1", - "vscode": "npm:@codingame/monaco-vscode-api@~3.2.3" + "@codingame/monaco-vscode-editor-service-override": "~5.2.0", + "@codingame/monaco-vscode-keybindings-service-override": "~5.2.0", + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~5.2.0", + "monaco-editor-wrapper": "~5.2.0", + "monaco-languageclient": "~8.5.0", + "vscode": "npm:@codingame/monaco-vscode-api@~5.2.0" }, "devDependencies": { "@codingame/esbuild-import-meta-url-plugin": "~1.0.2", diff --git a/packages/generator-langium/templates/packages/web/src/main-browser.ts b/packages/generator-langium/templates/packages/web/src/main-browser.ts index 73a3350d4..d7f2b0059 100644 --- a/packages/generator-langium/templates/packages/web/src/main-browser.ts +++ b/packages/generator-langium/templates/packages/web/src/main-browser.ts @@ -1,7 +1,9 @@ +/// + import { EmptyFileSystem } from 'langium'; import { startLanguageServer } from 'langium/lsp'; import { BrowserMessageReader, BrowserMessageWriter, createConnection } from 'vscode-languageserver/browser.js'; -import { create<%= LanguageName %>Services } from './<%= language-id %>-module.js'; +import { create<%= LanguageName %>Services } from '<%= language-id %>-language'; declare const self: DedicatedWorkerGlobalScope; diff --git a/packages/generator-langium/templates/packages/web/src/setupClassic.ts b/packages/generator-langium/templates/packages/web/src/setupClassic.ts index abc5d0a50..722c33fe1 100644 --- a/packages/generator-langium/templates/packages/web/src/setupClassic.ts +++ b/packages/generator-langium/templates/packages/web/src/setupClassic.ts @@ -1,6 +1,6 @@ import { MonacoEditorLanguageClientWrapper, UserConfig } from 'monaco-editor-wrapper'; import { configureWorker, defineUserServices } from './setupCommon.js'; -import monarchSyntax from "./syntaxes/<%= language-id %>.monarch.js"; +import { monarchSyntax } from '<%= language-id %>-language'; export const setupConfigClassic = (): UserConfig => { return { @@ -8,11 +8,16 @@ export const setupConfigClassic = (): UserConfig => { serviceConfig: defineUserServices(), editorAppConfig: { $type: 'classic', - languageId: '<%= language-id %>', - code: `// <%= RawLanguageName %> is running in the web!`, - useDiffEditor: false, - languageExtensionConfig: { id: 'langium' }, - languageDef: monarchSyntax, + codeResources: { + main: { + text: '// <%= RawLanguageName %> is running in the web!', + uri: '/workspace/hello-world.<%= file-extension %>', + } + }, + languageDef: { + languageExtensionConfig: { id: '<%= language-id %>' }, + monarchLanguage: monarchSyntax + }, editorOptions: { 'semanticHighlighting.enabled': true, theme: 'vs-dark' diff --git a/packages/generator-langium/templates/packages/web/src/setupCommon.ts b/packages/generator-langium/templates/packages/web/src/setupCommon.ts index 01b35c510..9ea24b57d 100644 --- a/packages/generator-langium/templates/packages/web/src/setupCommon.ts +++ b/packages/generator-langium/templates/packages/web/src/setupCommon.ts @@ -26,12 +26,13 @@ export const configureMonacoWorkers = () => { export const configureWorker = (): LanguageClientConfig => { // vite does not extract the worker properly if it is URL is a variable - const lsWorker = new Worker(new URL('./language/main-browser', import.meta.url), { + const lsWorker = new Worker(new URL('./main-browser', import.meta.url), { type: 'module', name: '<%= LanguageName %> Language Server' }); return { + languageId: '<%= language-id %>', options: { $type: 'WorkerDirect', worker: lsWorker diff --git a/packages/generator-langium/templates/packages/web/src/setupExtended.ts b/packages/generator-langium/templates/packages/web/src/setupExtended.ts index 27976b8c3..080894440 100644 --- a/packages/generator-langium/templates/packages/web/src/setupExtended.ts +++ b/packages/generator-langium/templates/packages/web/src/setupExtended.ts @@ -4,16 +4,19 @@ import { configureWorker, defineUserServices } from './setupCommon.js'; export const setupConfigExtended = (): UserConfig => { const extensionFilesOrContents = new Map(); extensionFilesOrContents.set('/language-configuration.json', new URL('../language-configuration.json', import.meta.url)); - extensionFilesOrContents.set('/<%= language-id %>-grammar.json', new URL('../syntaxes/<%= language-id %>.tmLanguage.json', import.meta.url)); + extensionFilesOrContents.set('/<%= language-id %>-grammar.json', new URL('../../language/syntaxes/<%= language-id %>.tmLanguage.json', import.meta.url)); return { wrapperConfig: { serviceConfig: defineUserServices(), editorAppConfig: { $type: 'extended', - languageId: '<%= language-id %>', - code: `// <%= RawLanguageName %> is running in the web!`, - useDiffEditor: false, + codeResources: { + main: { + text: '// <%= RawLanguageName %> is running in the web!', + uri: '/workspace/hello-world.<%= file-extension %>', + } + }, extensions: [{ config: { name: '<%= language-id %>-web', diff --git a/packages/generator-langium/templates/packages/web/tsconfig.json b/packages/generator-langium/templates/packages/web/tsconfig.json index ba2175fbe..7f2fb0c6e 100644 --- a/packages/generator-langium/templates/packages/web/tsconfig.json +++ b/packages/generator-langium/templates/packages/web/tsconfig.json @@ -4,6 +4,7 @@ "rootDir": "src", "outDir": "out", "declarationDir": "out", + "lib": ["ES2022", "dom"] }, "references": [ { diff --git a/packages/generator-langium/templates/tsconfig.json b/packages/generator-langium/templates/tsconfig.json index 8c7ada131..a423856e4 100644 --- a/packages/generator-langium/templates/tsconfig.json +++ b/packages/generator-langium/templates/tsconfig.json @@ -1,9 +1,9 @@ { "compilerOptions": { "target": "ES2020", - "module": "ES2020", + "module": "ES2022", "moduleResolution": "Bundler", - "lib": ["ES2020"], + "lib": ["ES2022"], "sourceMap": true, "strict": true, "noUnusedLocals": true,