From 216df863c9ed99169dd18325d1bcfcd20835131c Mon Sep 17 00:00:00 2001 From: Kai Salmen Date: Wed, 29 May 2024 17:08:59 +0200 Subject: [PATCH] WIP: Transform generated project to npm workspace - Align template structure with target structure - Integrate a global tsconfig.build.json - Unify how build and compile is done --- packages/generator-langium/src/index.ts | 179 +++++++++++------- .../templates/{core => }/.eslintrc.json | 0 .../{core => }/.vscode/extensions.json | 0 .../{vscode => }/.vscode/launch.json | 0 .../templates/{core => }/.vscode/tasks.json | 0 .../templates/cli/.package.json | 17 -- .../templates/core/.package.json | 32 ---- .../templates/core/tsconfig.json | 24 --- .../generator-langium/templates/package.json | 34 ++++ .../templates/{ => packages}/cli/bin/cli.js | 0 .../templates/packages/cli/package.json | 31 +++ .../src/cli => packages/cli/src}/cli-util.ts | 0 .../src/cli => packages/cli/src}/generator.ts | 0 .../{cli/src/cli => packages/cli/src}/main.ts | 0 .../templates/packages/cli/tsconfig.json | 16 ++ .../extension}/.vscodeignore | 0 .../extension}/esbuild.mjs | 0 .../extension}/language-configuration.json | 0 .../extension/package.json} | 8 +- .../extension}/src/extension/main.ts | 0 .../extension}/src/language/main.ts | 0 .../packages/extension/tsconfig.json | 15 ++ .../language}/.vscode-extensions.json | 3 +- .../language}/langium-config.json | 4 +- .../language}/langium-quickstart.md | 0 .../templates/packages/language/package.json | 29 +++ .../language/src}/language-id-module.ts | 0 .../language/src}/language-id-validator.ts | 0 .../language/src}/language-id.langium | 0 .../language}/test/linking/linking.test.ts | 0 .../language}/test/parsing/parsing.test.ts | 0 .../test/validating/validating.test.ts | 0 .../templates/packages/language/tsconfig.json | 12 ++ .../packages/language/tsconfig.src.json | 12 ++ .../packages/language/tsconfig.test.json | 14 ++ .../language}/vitest.config.ts | 6 - .../templates/{ => packages}/web/index.html | 0 .../{ => packages}/web/langium-config.json | 0 .../web/language-configuration.json | 0 .../web/package.json} | 19 +- .../web/src}/main-browser.ts | 0 .../{ => packages}/web/src/setupClassic.ts | 0 .../{ => packages}/web/src/setupCommon.ts | 0 .../{ => packages}/web/src/setupExtended.ts | 0 .../web/static/monacoClassic.html | 0 .../web/static/monacoExtended.html | 0 .../{ => packages}/web/static/styles.css | 0 .../templates/packages/web/tsconfig.json | 16 ++ .../{ => packages}/web/vite.config.ts | 0 .../templates/test/.package.json | 8 - .../templates/test/.tsconfig.json | 11 -- .../templates/test/tsconfig.src.json | 11 -- .../templates/tsconfig.build.json | 10 + .../templates/{web => }/tsconfig.json | 19 +- 54 files changed, 336 insertions(+), 194 deletions(-) rename packages/generator-langium/templates/{core => }/.eslintrc.json (100%) rename packages/generator-langium/templates/{core => }/.vscode/extensions.json (100%) rename packages/generator-langium/templates/{vscode => }/.vscode/launch.json (100%) rename packages/generator-langium/templates/{core => }/.vscode/tasks.json (100%) delete mode 100644 packages/generator-langium/templates/cli/.package.json delete mode 100644 packages/generator-langium/templates/core/.package.json delete mode 100644 packages/generator-langium/templates/core/tsconfig.json create mode 100644 packages/generator-langium/templates/package.json rename packages/generator-langium/templates/{ => packages}/cli/bin/cli.js (100%) create mode 100644 packages/generator-langium/templates/packages/cli/package.json rename packages/generator-langium/templates/{cli/src/cli => packages/cli/src}/cli-util.ts (100%) rename packages/generator-langium/templates/{cli/src/cli => packages/cli/src}/generator.ts (100%) rename packages/generator-langium/templates/{cli/src/cli => packages/cli/src}/main.ts (100%) create mode 100644 packages/generator-langium/templates/packages/cli/tsconfig.json rename packages/generator-langium/templates/{vscode => packages/extension}/.vscodeignore (100%) rename packages/generator-langium/templates/{vscode => packages/extension}/esbuild.mjs (100%) rename packages/generator-langium/templates/{vscode => packages/extension}/language-configuration.json (100%) rename packages/generator-langium/templates/{vscode/.package.json => packages/extension/package.json} (79%) rename packages/generator-langium/templates/{vscode => packages/extension}/src/extension/main.ts (100%) rename packages/generator-langium/templates/{vscode => packages/extension}/src/language/main.ts (100%) create mode 100644 packages/generator-langium/templates/packages/extension/tsconfig.json rename packages/generator-langium/templates/{test => packages/language}/.vscode-extensions.json (81%) rename packages/generator-langium/templates/{core => packages/language}/langium-config.json (72%) rename packages/generator-langium/templates/{core => packages/language}/langium-quickstart.md (100%) create mode 100644 packages/generator-langium/templates/packages/language/package.json rename packages/generator-langium/templates/{core/src/language => packages/language/src}/language-id-module.ts (100%) rename packages/generator-langium/templates/{core/src/language => packages/language/src}/language-id-validator.ts (100%) rename packages/generator-langium/templates/{core/src/language => packages/language/src}/language-id.langium (100%) rename packages/generator-langium/templates/{test => packages/language}/test/linking/linking.test.ts (100%) rename packages/generator-langium/templates/{test => packages/language}/test/parsing/parsing.test.ts (100%) rename packages/generator-langium/templates/{test => packages/language}/test/validating/validating.test.ts (100%) create mode 100644 packages/generator-langium/templates/packages/language/tsconfig.json create mode 100644 packages/generator-langium/templates/packages/language/tsconfig.src.json create mode 100644 packages/generator-langium/templates/packages/language/tsconfig.test.json rename packages/generator-langium/templates/{test => packages/language}/vitest.config.ts (63%) rename packages/generator-langium/templates/{ => packages}/web/index.html (100%) rename packages/generator-langium/templates/{ => packages}/web/langium-config.json (100%) rename packages/generator-langium/templates/{ => packages}/web/language-configuration.json (100%) rename packages/generator-langium/templates/{web/.package.json => packages/web/package.json} (66%) rename packages/generator-langium/templates/{web/src/language => packages/web/src}/main-browser.ts (100%) rename packages/generator-langium/templates/{ => packages}/web/src/setupClassic.ts (100%) rename packages/generator-langium/templates/{ => packages}/web/src/setupCommon.ts (100%) rename packages/generator-langium/templates/{ => packages}/web/src/setupExtended.ts (100%) rename packages/generator-langium/templates/{ => packages}/web/static/monacoClassic.html (100%) rename packages/generator-langium/templates/{ => packages}/web/static/monacoExtended.html (100%) rename packages/generator-langium/templates/{ => packages}/web/static/styles.css (100%) create mode 100644 packages/generator-langium/templates/packages/web/tsconfig.json rename packages/generator-langium/templates/{ => packages}/web/vite.config.ts (100%) delete mode 100644 packages/generator-langium/templates/test/.package.json delete mode 100644 packages/generator-langium/templates/test/.tsconfig.json delete mode 100644 packages/generator-langium/templates/test/tsconfig.src.json create mode 100644 packages/generator-langium/templates/tsconfig.build.json rename packages/generator-langium/templates/{web => }/tsconfig.json (53%) diff --git a/packages/generator-langium/src/index.ts b/packages/generator-langium/src/index.ts index 932f46135..5e5698e94 100644 --- a/packages/generator-langium/src/index.ts +++ b/packages/generator-langium/src/index.ts @@ -15,18 +15,18 @@ import * as url from 'node:url'; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); -const TEMPLATE_CORE_DIR = '../templates/core'; -const TEMPLATE_VSCODE_DIR = '../templates/vscode'; -const TEMPLATE_CLI_DIR = '../templates/cli'; -const TEMPLATE_WEB_DIR = '../templates/web'; -const TEMPLATE_TEST_DIR = '../templates/test'; +const BASE_DIR = '../templates'; +const PACKAGE_LANGUAGE = 'packages/language'; +const PACKAGE_CLI = 'packages/cli'; +const PACKAGE_WEB = 'packages/web'; +const PACKAGE_EXTENSION = 'packages/extension'; +// const TEMPLATE_TEST_DIR = '../templates/packages/language/test'; const USER_DIR = '.'; const EXTENSION_NAME = /<%= extension-name %>/g; const RAW_LANGUAGE_NAME = /<%= RawLanguageName %>/g; const FILE_EXTENSION = /"?<%= file-extension %>"?/g; const FILE_EXTENSION_GLOB = /<%= file-glob-extension %>/g; -const TSCONFIG_BASE_NAME = /<%= tsconfig %>/g; const LANGUAGE_NAME = /<%= LanguageName %>/g; const LANGUAGE_ID = /<%= language-id %>/g; @@ -171,96 +171,145 @@ export class LangiumGenerator extends Generator { ); const languageId = _.kebabCase(this.answers.rawLanguageName); - const referencedTsconfigBaseName = this.answers.includeTest ? 'tsconfig.src.json' : 'tsconfig.json'; const templateCopyOptions: CopyOptions = { - process: content => this._replaceTemplateWords(fileExtensionGlob, languageName, languageId, referencedTsconfigBaseName, content), + process: content => this._replaceTemplateWords(fileExtensionGlob, languageName, languageId, content), processDestinationPath: path => this._replaceTemplateNames(languageId, path) }; - this.sourceRoot(path.join(__dirname, TEMPLATE_CORE_DIR)); - const pkgJson = this.fs.readJSON(path.join(this.sourceRoot(), '.package.json')); - this.fs.extendJSON(this._extensionPath('package-template.json'), pkgJson, undefined, 4); - - for (const path of ['.', '.vscode', '.eslintrc.json']) { + const pathBase = path.join(__dirname, BASE_DIR); + this.sourceRoot(pathBase); + const mainPackageJson = this.fs.readJSON(path.join(this.sourceRoot(), 'package.json')); + + const baseFiles = [ + '.eslintrc.json', + 'tsconfig.json', + 'tsconfig.build.json', + '.vscode' + ]; + for (const path of baseFiles) { this.fs.copy( this.templatePath(path), this._extensionPath(path), templateCopyOptions ); } - // .gitignore files don't get published to npm, so we need to copy it under a different name - this.fs.copy(this.templatePath('../gitignore.txt'), this._extensionPath('.gitignore')); + this.fs.copy(this.templatePath('gitignore.txt'), this._extensionPath('.gitignore')); + + this.sourceRoot(path.join(__dirname, `${BASE_DIR}/${PACKAGE_LANGUAGE}`)); + // omit .vscode-extensions.json for now + const languageFiles = [ + 'package.json', + 'langium-config.json', + 'langium-quickstart.md', + 'tsconfig.json', + 'tsconfig.src.json', + 'tsconfig.test.json', + 'vitest.config.ts', + 'src', + 'test' + ]; + for (const path of languageFiles) { + this.fs.copy( + this.templatePath(path), + this._extensionPath(`${PACKAGE_LANGUAGE}/${path}`), + templateCopyOptions + ); + } - if (this.answers.includeVSCode) { - this.sourceRoot(path.join(__dirname, TEMPLATE_VSCODE_DIR)); - const pkgJson = this.fs.readJSON(path.join(this.sourceRoot(), '.package.json')); - this.fs.extendJSON(this._extensionPath('package-template.json'), pkgJson, undefined, 4); - this.sourceRoot(path.join(__dirname, TEMPLATE_VSCODE_DIR)); - for (const path of ['.', '.vscode', '.vscodeignore']) { + if (this.answers.includeCLI) { + this.sourceRoot(path.join(__dirname, `${BASE_DIR}/${PACKAGE_CLI}`)); + const cliFiles = [ + 'package.json', + 'tsconfig.json', + 'bin', + 'src' + ]; + for (const path of cliFiles) { this.fs.copy( this.templatePath(path), - this._extensionPath(path), + this._extensionPath(`${PACKAGE_CLI}/${path}`), templateCopyOptions ); } + mainPackageJson.workspaces.push('packages/cli'); } - if (this.answers.includeCLI) { - this.sourceRoot(path.join(__dirname, TEMPLATE_CLI_DIR)); - const pkgJson = this.fs.readJSON(path.join(this.sourceRoot(), '.package.json')); - this.fs.extendJSON(this._extensionPath('package-template.json'),pkgJson, undefined, 4); - for (const path of ['.']) { + if (this.answers.includeWeb) { + this.sourceRoot(path.join(__dirname, `${BASE_DIR}/${PACKAGE_WEB}`)); + const webFiles = [ + 'package.json', + 'langium-config.json', + 'language-configuration.json', + 'tsconfig.json', + 'vite.config.ts', + 'src', + 'static' + ]; + for (const path of webFiles) { this.fs.copy( this.templatePath(path), - this._extensionPath(path), + this._extensionPath(`${PACKAGE_WEB}/${path}`), templateCopyOptions ); } } - if (this.answers.includeWeb) { - this.sourceRoot(path.join(__dirname, TEMPLATE_WEB_DIR)); - const pkgJson = this.fs.readJSON(path.join(this.sourceRoot(), '.package.json')); - this.fs.extendJSON(this._extensionPath('package-template.json'), pkgJson, undefined, 4); - this.sourceRoot(path.join(__dirname, TEMPLATE_WEB_DIR)); - for (const path of ['.']) { + if (this.answers.includeVSCode) { + this.sourceRoot(path.join(__dirname, `${BASE_DIR}/${PACKAGE_EXTENSION}`)); + const extensionFiles = [ + '.vscodeignore', + 'esbuild.mjs', + 'language-configuration.json', + 'package.json', + 'tsconfig.json', + 'src' + ]; + for (const path of extensionFiles) { this.fs.copy( this.templatePath(path), - this._extensionPath(path), + this._extensionPath(`${PACKAGE_EXTENSION}/${path}`), templateCopyOptions ); } } - if (this.answers.includeTest) { - this.sourceRoot(path.join(__dirname, TEMPLATE_TEST_DIR)); - - this.fs.copy( - this.templatePath('.'), - this._extensionPath(), - templateCopyOptions - ); - - // update the scripts section in the package.json to use 'tsconfig.src.json' for building - const pkgJson = this.fs.readJSON(this.templatePath('.package.json')); - this.fs.extendJSON(this._extensionPath('package-template.json'), pkgJson, undefined, 4); - - // update the 'includes' property in the existing 'tsconfig.json' and adds '"noEmit": true' - const tsconfigJson = this.fs.readJSON(this.templatePath('.tsconfig.json')); - this.fs.extendJSON(this._extensionPath('tsconfig.json'), tsconfigJson, undefined, 4); - - // the initial '.vscode/extensions.json' can't be extended as above, as it contains comments, which is tolerated by vscode, - // but not by `this.fs.extendJSON(...)`, so - this.fs.copy(this.templatePath('.vscode-extensions.json'), this._extensionPath('.vscode/extensions.json'), templateCopyOptions); - } - + this.fs.writeJSON(this._extensionPath('.package.json'), mainPackageJson, undefined, 4); this.fs.copy( - this._extensionPath('package-template.json'), + this._extensionPath('.package.json'), this._extensionPath('package.json'), templateCopyOptions ); - this.fs.delete(this._extensionPath('package-template.json')); + this.fs.delete(this._extensionPath('.package.json')); + + // if (this.answers.includeTest) { + // this.sourceRoot(path.join(__dirname, TEMPLATE_TEST_DIR)); + + // this.fs.copy( + // this.templatePath('.'), + // this._extensionPath(), + // templateCopyOptions + // ); + + // // update the scripts section in the package.json to use 'tsconfig.src.json' for building + // const pkgJson = this.fs.readJSON(this.templatePath('.package.json')); + // this.fs.extendJSON(this._extensionPath('package-template.json'), pkgJson, undefined, 4); + + // // update the 'includes' property in the existing 'tsconfig.json' and adds '"noEmit": true' + // const tsconfigJson = this.fs.readJSON(this.templatePath('.tsconfig.json')); + // this.fs.extendJSON(this._extensionPath('tsconfig.json'), tsconfigJson, undefined, 4); + + // // the initial '.vscode/extensions.json' can't be extended as above, as it contains comments, which is tolerated by vscode, + // // but not by `this.fs.extendJSON(...)`, so + // this.fs.copy(this.templatePath('.vscode-extensions.json'), this._extensionPath('.vscode/extensions.json'), templateCopyOptions); + // } + + // this.fs.copy( + // this._extensionPath('package-template.json'), + // this._extensionPath('package.json'), + // templateCopyOptions + // ); + // this.fs.delete(this._extensionPath('package-template.json')); } async install(): Promise { @@ -271,14 +320,7 @@ export class LangiumGenerator extends Generator { this.spawnSync('npm', ['install'], opts); } this.spawnSync('npm', ['run', 'langium:generate'], opts); - - if (this.answers.includeVSCode || this.answers.includeCLI) { - this.spawnSync('npm', ['run', 'build'], opts); - } - - if (this.answers.includeWeb) { - this.spawnSync('npm', ['run', 'build:web'], opts); - } + this.spawnSync('npm', ['run', 'build'], opts); } async end(): Promise { @@ -310,7 +352,7 @@ export class LangiumGenerator extends Generator { return this.destinationPath(USER_DIR, this.answers.extensionName, ...path); } - _replaceTemplateWords(fileExtensionGlob: string, languageName: string, languageId: string, tsconfigBaseName: string, content: string | Buffer): string { + _replaceTemplateWords(fileExtensionGlob: string, languageName: string, languageId: string, content: string | Buffer): string { return content.toString() .replace(EXTENSION_NAME, this.answers.extensionName) .replace(RAW_LANGUAGE_NAME, this.answers.rawLanguageName) @@ -318,7 +360,6 @@ export class LangiumGenerator extends Generator { .replace(FILE_EXTENSION_GLOB, fileExtensionGlob) .replace(LANGUAGE_NAME, languageName) .replace(LANGUAGE_ID, languageId) - .replace(TSCONFIG_BASE_NAME, tsconfigBaseName) .replace(NEWLINES, EOL); } diff --git a/packages/generator-langium/templates/core/.eslintrc.json b/packages/generator-langium/templates/.eslintrc.json similarity index 100% rename from packages/generator-langium/templates/core/.eslintrc.json rename to packages/generator-langium/templates/.eslintrc.json diff --git a/packages/generator-langium/templates/core/.vscode/extensions.json b/packages/generator-langium/templates/.vscode/extensions.json similarity index 100% rename from packages/generator-langium/templates/core/.vscode/extensions.json rename to packages/generator-langium/templates/.vscode/extensions.json diff --git a/packages/generator-langium/templates/vscode/.vscode/launch.json b/packages/generator-langium/templates/.vscode/launch.json similarity index 100% rename from packages/generator-langium/templates/vscode/.vscode/launch.json rename to packages/generator-langium/templates/.vscode/launch.json diff --git a/packages/generator-langium/templates/core/.vscode/tasks.json b/packages/generator-langium/templates/.vscode/tasks.json similarity index 100% rename from packages/generator-langium/templates/core/.vscode/tasks.json rename to packages/generator-langium/templates/.vscode/tasks.json diff --git a/packages/generator-langium/templates/cli/.package.json b/packages/generator-langium/templates/cli/.package.json deleted file mode 100644 index 1317bf0ca..000000000 --- a/packages/generator-langium/templates/cli/.package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "engines": { - "node": ">=18.0.0" - }, - "files": [ - "bin", - "out", - "src" - ], - "bin": { - "<%= language-id %>-cli": "./bin/cli.js" - }, - "dependencies": { - "chalk": "~5.3.0", - "commander": "~11.0.0" - } -} diff --git a/packages/generator-langium/templates/core/.package.json b/packages/generator-langium/templates/core/.package.json deleted file mode 100644 index 0630a1a69..000000000 --- a/packages/generator-langium/templates/core/.package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "<%= extension-name %>", - "description": "Please enter a brief description here", - "version": "0.0.1", - "files": [ - "out", - "src" - ], - "type": "module", - "scripts": { - "build": "tsc -b <%= tsconfig %>", - "watch": "tsc -b <%= tsconfig %> --watch", - "lint": "eslint src --ext ts", - "langium:generate": "langium generate", - "langium:watch": "langium generate --watch" - }, - "dependencies": { - "langium": "~3.0.0" - }, - "devDependencies": { - "@types/node": "^18.0.0", - "@typescript-eslint/parser": "~7.3.1", - "@typescript-eslint/eslint-plugin": "~7.3.1", - "eslint": "~8.57.0", - "langium-cli": "~3.0.3", - "typescript": "~5.1.6" - }, - "volta": { - "node": "18.19.1", - "npm": "10.2.4" - } -} diff --git a/packages/generator-langium/templates/core/tsconfig.json b/packages/generator-langium/templates/core/tsconfig.json deleted file mode 100644 index 91e8763e4..000000000 --- a/packages/generator-langium/templates/core/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "module": "Node16", - "lib": ["ESNext"], - "sourceMap": true, - "outDir": "out", - "strict": true, - "noUnusedLocals": true, - "noImplicitReturns": true, - "noImplicitOverride": true, - "moduleResolution": "Node16", - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true - }, - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "out", - "node_modules" - ] -} diff --git a/packages/generator-langium/templates/package.json b/packages/generator-langium/templates/package.json new file mode 100644 index 000000000..66f6ed10a --- /dev/null +++ b/packages/generator-langium/templates/package.json @@ -0,0 +1,34 @@ +{ + "name": "<%= extension-name %>", + "description": "Base workspace package", + "version": "0.0.1", + "type": "module", + "private": true, + "files": [ + "out", + "src" + ], + "scripts": { + "compile": "tsc -b tsconfig.build.json", + "watch": "tsc -b tsconfig.build.json --watch", + "build": "npm run compile && npm run build --workspaces", + "lint": "eslint src --ext ts", + "langium:generate": "npm run --workspace packages/language langium:generate", + "langium:watch": "npm run --workspace packages/language langium:watch", + "test": "vitest run" + }, + "devDependencies": { + "@types/node": "^18.0.0", + "@typescript-eslint/parser": "~7.11.0", + "@typescript-eslint/eslint-plugin": "~7.11.0", + "eslint": "~8.57.0", + "typescript": "~5.4.5" + }, + "volta": { + "node": "18.20.3", + "npm": "10.7.0" + }, + "workspaces": [ + "packages/language" + ] +} diff --git a/packages/generator-langium/templates/cli/bin/cli.js b/packages/generator-langium/templates/packages/cli/bin/cli.js similarity index 100% rename from packages/generator-langium/templates/cli/bin/cli.js rename to packages/generator-langium/templates/packages/cli/bin/cli.js diff --git a/packages/generator-langium/templates/packages/cli/package.json b/packages/generator-langium/templates/packages/cli/package.json new file mode 100644 index 000000000..37787fc10 --- /dev/null +++ b/packages/generator-langium/templates/packages/cli/package.json @@ -0,0 +1,31 @@ +{ + "name": "<%= extension-name %>-cli", + "description": "The cli specific package", + "version": "0.0.1", + "type": "module", + "engines": { + "node": ">=18.0.0" + }, + "files": [ + "bin", + "out", + "src" + ], + "bin": { + "<%= language-id %>-cli": "./bin/cli.js" + }, + "scripts": { + "build": "echo 'No build step'" + }, + "dependencies": { + "<%= extension-name %>-language": "0.0.1", + "chalk": "~5.3.0", + "commander": "~11.0.0" + }, + "devDependencies": { + }, + "volta": { + "node": "18.20.3", + "npm": "10.7.0" + } +} diff --git a/packages/generator-langium/templates/cli/src/cli/cli-util.ts b/packages/generator-langium/templates/packages/cli/src/cli-util.ts similarity index 100% rename from packages/generator-langium/templates/cli/src/cli/cli-util.ts rename to packages/generator-langium/templates/packages/cli/src/cli-util.ts diff --git a/packages/generator-langium/templates/cli/src/cli/generator.ts b/packages/generator-langium/templates/packages/cli/src/generator.ts similarity index 100% rename from packages/generator-langium/templates/cli/src/cli/generator.ts rename to packages/generator-langium/templates/packages/cli/src/generator.ts diff --git a/packages/generator-langium/templates/cli/src/cli/main.ts b/packages/generator-langium/templates/packages/cli/src/main.ts similarity index 100% rename from packages/generator-langium/templates/cli/src/cli/main.ts rename to packages/generator-langium/templates/packages/cli/src/main.ts diff --git a/packages/generator-langium/templates/packages/cli/tsconfig.json b/packages/generator-langium/templates/packages/cli/tsconfig.json new file mode 100644 index 000000000..eee8bb916 --- /dev/null +++ b/packages/generator-langium/templates/packages/cli/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "out", + "declarationDir": "out" + }, + "references": [ + { + "path": "../language/tsconfig.src.json" + } + ], + "include": [ + "src/**/*.ts" + ] +} diff --git a/packages/generator-langium/templates/vscode/.vscodeignore b/packages/generator-langium/templates/packages/extension/.vscodeignore similarity index 100% rename from packages/generator-langium/templates/vscode/.vscodeignore rename to packages/generator-langium/templates/packages/extension/.vscodeignore diff --git a/packages/generator-langium/templates/vscode/esbuild.mjs b/packages/generator-langium/templates/packages/extension/esbuild.mjs similarity index 100% rename from packages/generator-langium/templates/vscode/esbuild.mjs rename to packages/generator-langium/templates/packages/extension/esbuild.mjs diff --git a/packages/generator-langium/templates/vscode/language-configuration.json b/packages/generator-langium/templates/packages/extension/language-configuration.json similarity index 100% rename from packages/generator-langium/templates/vscode/language-configuration.json rename to packages/generator-langium/templates/packages/extension/language-configuration.json diff --git a/packages/generator-langium/templates/vscode/.package.json b/packages/generator-langium/templates/packages/extension/package.json similarity index 79% rename from packages/generator-langium/templates/vscode/.package.json rename to packages/generator-langium/templates/packages/extension/package.json index b6a438fb5..a7b91a12d 100644 --- a/packages/generator-langium/templates/vscode/.package.json +++ b/packages/generator-langium/templates/packages/extension/package.json @@ -1,4 +1,7 @@ { + "name": "<%= extension-name %>-extension", + "description": "The extension specific package", + "version": "0.0.1", "displayName": "<%= extension-name %>", "engines": { "vscode": "^1.67.0" @@ -25,10 +28,11 @@ "main": "./out/extension/main.cjs", "scripts": { "vscode:prepublish": "npm run build && npm run lint", - "build": "tsc -b <%= tsconfig %> && node esbuild.mjs", - "watch": "concurrently -n tsc,esbuild -c blue,yellow \"tsc -b <%= tsconfig %> --watch\" \"node esbuild.mjs --watch\"" + "build": "tsc -b tsconfig.json && node esbuild.mjs", + "watch": "concurrently -n tsc,esbuild -c blue,yellow \"tsc -b tsconfig.json --watch\" \"node esbuild.mjs --watch\"" }, "dependencies": { + "<%= extension-name %>-language": "0.0.1", "vscode-languageclient": "~9.0.1", "vscode-languageserver": "~9.0.1" }, diff --git a/packages/generator-langium/templates/vscode/src/extension/main.ts b/packages/generator-langium/templates/packages/extension/src/extension/main.ts similarity index 100% rename from packages/generator-langium/templates/vscode/src/extension/main.ts rename to packages/generator-langium/templates/packages/extension/src/extension/main.ts diff --git a/packages/generator-langium/templates/vscode/src/language/main.ts b/packages/generator-langium/templates/packages/extension/src/language/main.ts similarity index 100% rename from packages/generator-langium/templates/vscode/src/language/main.ts rename to packages/generator-langium/templates/packages/extension/src/language/main.ts diff --git a/packages/generator-langium/templates/packages/extension/tsconfig.json b/packages/generator-langium/templates/packages/extension/tsconfig.json new file mode 100644 index 000000000..b9db194e8 --- /dev/null +++ b/packages/generator-langium/templates/packages/extension/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "." + }, + "references": [ + { + "path": "../language/tsconfig.src.json" + } + ], + "include": [ + "src/**/*.ts" + ] +} diff --git a/packages/generator-langium/templates/test/.vscode-extensions.json b/packages/generator-langium/templates/packages/language/.vscode-extensions.json similarity index 81% rename from packages/generator-langium/templates/test/.vscode-extensions.json rename to packages/generator-langium/templates/packages/language/.vscode-extensions.json index 1252a6cd7..7f73a0a33 100644 --- a/packages/generator-langium/templates/test/.vscode-extensions.json +++ b/packages/generator-langium/templates/packages/language/.vscode-extensions.json @@ -5,7 +5,6 @@ // List of extensions which should be recommended for users of this workspace. "recommendations": [ "langium.langium-vscode", - "ZixuanChen.vitest-explorer", - "kingwl.vscode-vitest-runner" + "vitest.explorer" ] } diff --git a/packages/generator-langium/templates/core/langium-config.json b/packages/generator-langium/templates/packages/language/langium-config.json similarity index 72% rename from packages/generator-langium/templates/core/langium-config.json rename to packages/generator-langium/templates/packages/language/langium-config.json index f65bd3fd9..32006a2ee 100644 --- a/packages/generator-langium/templates/core/langium-config.json +++ b/packages/generator-langium/templates/packages/language/langium-config.json @@ -2,11 +2,11 @@ "projectName": "<%= LanguageName %>", "languages": [{ "id": "<%= language-id %>", - "grammar": "src/language/<%= language-id %>.langium", + "grammar": "src/<%= language-id %>.langium", "fileExtensions": <%= file-extension %>, "textMate": { "out": "syntaxes/<%= language-id %>.tmLanguage.json" } }], - "out": "src/language/generated" + "out": "src/generated" } diff --git a/packages/generator-langium/templates/core/langium-quickstart.md b/packages/generator-langium/templates/packages/language/langium-quickstart.md similarity index 100% rename from packages/generator-langium/templates/core/langium-quickstart.md rename to packages/generator-langium/templates/packages/language/langium-quickstart.md diff --git a/packages/generator-langium/templates/packages/language/package.json b/packages/generator-langium/templates/packages/language/package.json new file mode 100644 index 000000000..3473b94e5 --- /dev/null +++ b/packages/generator-langium/templates/packages/language/package.json @@ -0,0 +1,29 @@ +{ + "name": "<%= extension-name %>-language", + "description": "The language specific package", + "version": "0.0.1", + "type": "module", + "engines": { + "node": ">=18.0.0" + }, + "files": [ + "out", + "src" + ], + "scripts": { + "build": "echo 'No build step'", + "langium:generate": "langium generate", + "langium:watch": "langium generate --watch" + }, + "dependencies": { + "langium": "~3.0.0" + }, + "devDependencies": { + "langium-cli": "~3.0.3", + "vitest": "~1.6.0" + }, + "volta": { + "node": "18.20.3", + "npm": "10.7.0" + } +} diff --git a/packages/generator-langium/templates/core/src/language/language-id-module.ts b/packages/generator-langium/templates/packages/language/src/language-id-module.ts similarity index 100% rename from packages/generator-langium/templates/core/src/language/language-id-module.ts rename to packages/generator-langium/templates/packages/language/src/language-id-module.ts diff --git a/packages/generator-langium/templates/core/src/language/language-id-validator.ts b/packages/generator-langium/templates/packages/language/src/language-id-validator.ts similarity index 100% rename from packages/generator-langium/templates/core/src/language/language-id-validator.ts rename to packages/generator-langium/templates/packages/language/src/language-id-validator.ts diff --git a/packages/generator-langium/templates/core/src/language/language-id.langium b/packages/generator-langium/templates/packages/language/src/language-id.langium similarity index 100% rename from packages/generator-langium/templates/core/src/language/language-id.langium rename to packages/generator-langium/templates/packages/language/src/language-id.langium diff --git a/packages/generator-langium/templates/test/test/linking/linking.test.ts b/packages/generator-langium/templates/packages/language/test/linking/linking.test.ts similarity index 100% rename from packages/generator-langium/templates/test/test/linking/linking.test.ts rename to packages/generator-langium/templates/packages/language/test/linking/linking.test.ts diff --git a/packages/generator-langium/templates/test/test/parsing/parsing.test.ts b/packages/generator-langium/templates/packages/language/test/parsing/parsing.test.ts similarity index 100% rename from packages/generator-langium/templates/test/test/parsing/parsing.test.ts rename to packages/generator-langium/templates/packages/language/test/parsing/parsing.test.ts diff --git a/packages/generator-langium/templates/test/test/validating/validating.test.ts b/packages/generator-langium/templates/packages/language/test/validating/validating.test.ts similarity index 100% rename from packages/generator-langium/templates/test/test/validating/validating.test.ts rename to packages/generator-langium/templates/packages/language/test/validating/validating.test.ts diff --git a/packages/generator-langium/templates/packages/language/tsconfig.json b/packages/generator-langium/templates/packages/language/tsconfig.json new file mode 100644 index 000000000..25c9de527 --- /dev/null +++ b/packages/generator-langium/templates/packages/language/tsconfig.json @@ -0,0 +1,12 @@ +// this file is required for VSCode to work properly +{ + "extends": "./tsconfig.src.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "." + }, + "include": [ + "src/**/*", + "test/**/*" + ] +} diff --git a/packages/generator-langium/templates/packages/language/tsconfig.src.json b/packages/generator-langium/templates/packages/language/tsconfig.src.json new file mode 100644 index 000000000..87e2fcdc6 --- /dev/null +++ b/packages/generator-langium/templates/packages/language/tsconfig.src.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "out", + "declarationDir": "out", + }, + "include": [ + "src/**/*.ts", + ] + } + \ No newline at end of file diff --git a/packages/generator-langium/templates/packages/language/tsconfig.test.json b/packages/generator-langium/templates/packages/language/tsconfig.test.json new file mode 100644 index 000000000..d13f58d67 --- /dev/null +++ b/packages/generator-langium/templates/packages/language/tsconfig.test.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.src.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "test" + }, + "references": [{ + "path": "./tsconfig.src.json" + }], + "include": [ + "test/**/*.ts", + ] + } + \ No newline at end of file diff --git a/packages/generator-langium/templates/test/vitest.config.ts b/packages/generator-langium/templates/packages/language/vitest.config.ts similarity index 63% rename from packages/generator-langium/templates/test/vitest.config.ts rename to packages/generator-langium/templates/packages/language/vitest.config.ts index 47173bfcf..190a23850 100644 --- a/packages/generator-langium/templates/test/vitest.config.ts +++ b/packages/generator-langium/templates/packages/language/vitest.config.ts @@ -6,12 +6,6 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { - // coverage: { - // provider: 'v8', - // reporter: ['text', 'html'], - // include: ['src'], - // exclude: ['**/generated'], - // }, deps: { interopDefault: true }, diff --git a/packages/generator-langium/templates/web/index.html b/packages/generator-langium/templates/packages/web/index.html similarity index 100% rename from packages/generator-langium/templates/web/index.html rename to packages/generator-langium/templates/packages/web/index.html diff --git a/packages/generator-langium/templates/web/langium-config.json b/packages/generator-langium/templates/packages/web/langium-config.json similarity index 100% rename from packages/generator-langium/templates/web/langium-config.json rename to packages/generator-langium/templates/packages/web/langium-config.json diff --git a/packages/generator-langium/templates/web/language-configuration.json b/packages/generator-langium/templates/packages/web/language-configuration.json similarity index 100% rename from packages/generator-langium/templates/web/language-configuration.json rename to packages/generator-langium/templates/packages/web/language-configuration.json diff --git a/packages/generator-langium/templates/web/.package.json b/packages/generator-langium/templates/packages/web/package.json similarity index 66% rename from packages/generator-langium/templates/web/.package.json rename to packages/generator-langium/templates/packages/web/package.json index f39476261..16b93c9f7 100644 --- a/packages/generator-langium/templates/web/.package.json +++ b/packages/generator-langium/templates/packages/web/package.json @@ -1,6 +1,17 @@ { + "name": "<%= extension-name %>-web", + "description": "The web specific package", + "version": "0.0.1", + "type": "module", + "engines": { + "node": ">=18.0.0" + }, + "files": [ + "out", + "src" + ], "scripts": { - "build:web": "npm run build", + "build": "npm run build", "bundle": "vite build", "bundle:serve": "http-server ./dist --port 5175", "dev": "vite", @@ -17,7 +28,11 @@ }, "devDependencies": { "@codingame/esbuild-import-meta-url-plugin": "~1.0.2", - "vite": "~5.2.7", + "vite": "~5.2.12", "http-server": "~14.1.1" + }, + "volta": { + "node": "18.20.3", + "npm": "10.7.0" } } diff --git a/packages/generator-langium/templates/web/src/language/main-browser.ts b/packages/generator-langium/templates/packages/web/src/main-browser.ts similarity index 100% rename from packages/generator-langium/templates/web/src/language/main-browser.ts rename to packages/generator-langium/templates/packages/web/src/main-browser.ts diff --git a/packages/generator-langium/templates/web/src/setupClassic.ts b/packages/generator-langium/templates/packages/web/src/setupClassic.ts similarity index 100% rename from packages/generator-langium/templates/web/src/setupClassic.ts rename to packages/generator-langium/templates/packages/web/src/setupClassic.ts diff --git a/packages/generator-langium/templates/web/src/setupCommon.ts b/packages/generator-langium/templates/packages/web/src/setupCommon.ts similarity index 100% rename from packages/generator-langium/templates/web/src/setupCommon.ts rename to packages/generator-langium/templates/packages/web/src/setupCommon.ts diff --git a/packages/generator-langium/templates/web/src/setupExtended.ts b/packages/generator-langium/templates/packages/web/src/setupExtended.ts similarity index 100% rename from packages/generator-langium/templates/web/src/setupExtended.ts rename to packages/generator-langium/templates/packages/web/src/setupExtended.ts diff --git a/packages/generator-langium/templates/web/static/monacoClassic.html b/packages/generator-langium/templates/packages/web/static/monacoClassic.html similarity index 100% rename from packages/generator-langium/templates/web/static/monacoClassic.html rename to packages/generator-langium/templates/packages/web/static/monacoClassic.html diff --git a/packages/generator-langium/templates/web/static/monacoExtended.html b/packages/generator-langium/templates/packages/web/static/monacoExtended.html similarity index 100% rename from packages/generator-langium/templates/web/static/monacoExtended.html rename to packages/generator-langium/templates/packages/web/static/monacoExtended.html diff --git a/packages/generator-langium/templates/web/static/styles.css b/packages/generator-langium/templates/packages/web/static/styles.css similarity index 100% rename from packages/generator-langium/templates/web/static/styles.css rename to packages/generator-langium/templates/packages/web/static/styles.css diff --git a/packages/generator-langium/templates/packages/web/tsconfig.json b/packages/generator-langium/templates/packages/web/tsconfig.json new file mode 100644 index 000000000..ba2175fbe --- /dev/null +++ b/packages/generator-langium/templates/packages/web/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "out", + "declarationDir": "out", + }, + "references": [ + { + "path": "../language/tsconfig.src.json" + } + ], + "include": [ + "src/**/*.ts" + ] +} diff --git a/packages/generator-langium/templates/web/vite.config.ts b/packages/generator-langium/templates/packages/web/vite.config.ts similarity index 100% rename from packages/generator-langium/templates/web/vite.config.ts rename to packages/generator-langium/templates/packages/web/vite.config.ts diff --git a/packages/generator-langium/templates/test/.package.json b/packages/generator-langium/templates/test/.package.json deleted file mode 100644 index 87d788f21..000000000 --- a/packages/generator-langium/templates/test/.package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "devDependencies": { - "vitest": "~1.4.0" - }, - "scripts": { - "test": "vitest run" - } -} diff --git a/packages/generator-langium/templates/test/.tsconfig.json b/packages/generator-langium/templates/test/.tsconfig.json deleted file mode 100644 index 626da1c99..000000000 --- a/packages/generator-langium/templates/test/.tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "rootDir": ".", - "noEmit": true - }, - "include": [ - "src/**/*.ts", - "test/**/*.ts" - ] - } - \ No newline at end of file diff --git a/packages/generator-langium/templates/test/tsconfig.src.json b/packages/generator-langium/templates/test/tsconfig.src.json deleted file mode 100644 index 928fe6d89..000000000 --- a/packages/generator-langium/templates/test/tsconfig.src.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": false, - "rootDir": "src", - }, - "include": [ - "src/**/*.ts" - ] - } - \ No newline at end of file diff --git a/packages/generator-langium/templates/tsconfig.build.json b/packages/generator-langium/templates/tsconfig.build.json new file mode 100644 index 000000000..c7a88d536 --- /dev/null +++ b/packages/generator-langium/templates/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "files": [], + "references": [ + { "path": "./packages/language/tsconfig.src.json" }, + { "path": "./packages/language/tsconfig.test.json" }, + { "path": "./packages/cli/tsconfig.json" }, + { "path": "./packages/web/tsconfig.json" }, + { "path": "./packages/extension/tsconfig.json" } + ] + } diff --git a/packages/generator-langium/templates/web/tsconfig.json b/packages/generator-langium/templates/tsconfig.json similarity index 53% rename from packages/generator-langium/templates/web/tsconfig.json rename to packages/generator-langium/templates/tsconfig.json index 5f1d245d9..8c7ada131 100644 --- a/packages/generator-langium/templates/web/tsconfig.json +++ b/packages/generator-langium/templates/tsconfig.json @@ -1,24 +1,27 @@ { "compilerOptions": { - "target": "ES2017", - "module": "Node16", - "lib": ["ESNext", "DOM", "WebWorker"], + "target": "ES2020", + "module": "ES2020", + "moduleResolution": "Bundler", + "lib": ["ES2020"], "sourceMap": true, - "outDir": "out", "strict": true, "noUnusedLocals": true, "noImplicitReturns": true, "noImplicitOverride": true, - "moduleResolution": "Node16", "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "rootDir": "src" + "declaration": true, + "composite": true }, "include": [ - "src/**/*.ts" + "**/src/**/*", + "**/test/**/*" ], "exclude": [ - "node_modules" + "**/lib/**/*", + "**/out/**/*", + "**/node_modules/**/*" ] }