diff options
author | Kristóf Marussy <kristof@marussy.com> | 2021-12-13 02:07:04 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2021-12-14 02:14:23 +0100 |
commit | a96c52b21e7e590bbdd70b80896780a446fa2e8b (patch) | |
tree | 663619baa254577bb2f5342192e80bca692ad91d | |
parent | build: move modules into subproject directory (diff) | |
download | refinery-a96c52b21e7e590bbdd70b80896780a446fa2e8b.tar.gz refinery-a96c52b21e7e590bbdd70b80896780a446fa2e8b.tar.zst refinery-a96c52b21e7e590bbdd70b80896780a446fa2e8b.zip |
build: separate module for frontend
This allows us to simplify the webpack configuration and the gradle
build scripts.
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | settings.gradle | 1 | ||||
-rw-r--r-- | subprojects/frontend/.eslintrc.js (renamed from subprojects/language-web/.eslintrc.js) | 1 | ||||
-rw-r--r-- | subprojects/frontend/.stylelintrc.js (renamed from subprojects/language-web/.stylelintrc.js) | 0 | ||||
-rw-r--r-- | subprojects/frontend/build.gradle | 101 | ||||
-rw-r--r-- | subprojects/frontend/package.json (renamed from subprojects/language-web/package.json) | 17 | ||||
-rw-r--r-- | subprojects/frontend/src/App.tsx (renamed from subprojects/language-web/src/main/js/App.tsx) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/RootStore.tsx (renamed from subprojects/language-web/src/main/js/RootStore.tsx) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/EditorArea.tsx (renamed from subprojects/language-web/src/main/js/editor/EditorArea.tsx) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/EditorButtons.tsx (renamed from subprojects/language-web/src/main/js/editor/EditorButtons.tsx) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/EditorParent.ts (renamed from subprojects/language-web/src/main/js/editor/EditorParent.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/EditorStore.ts (renamed from subprojects/language-web/src/main/js/editor/EditorStore.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/GenerateButton.tsx (renamed from subprojects/language-web/src/main/js/editor/GenerateButton.tsx) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/decorationSetExtension.ts (renamed from subprojects/language-web/src/main/js/editor/decorationSetExtension.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/findOccurrences.ts (renamed from subprojects/language-web/src/main/js/editor/findOccurrences.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/editor/semanticHighlighting.ts (renamed from subprojects/language-web/src/main/js/editor/semanticHighlighting.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/global.d.ts (renamed from subprojects/language-web/src/main/js/global.d.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/index.html (renamed from subprojects/language-web/src/main/html/index.html) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/index.scss (renamed from subprojects/language-web/src/main/css/index.scss) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/index.tsx (renamed from subprojects/language-web/src/main/js/index.tsx) | 2 | ||||
-rw-r--r-- | subprojects/frontend/src/language/folding.ts (renamed from subprojects/language-web/src/main/js/language/folding.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/language/indentation.ts (renamed from subprojects/language-web/src/main/js/language/indentation.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/language/problem.grammar (renamed from subprojects/language-web/src/main/js/language/problem.grammar) | 2 | ||||
-rw-r--r-- | subprojects/frontend/src/language/problemLanguageSupport.ts (renamed from subprojects/language-web/src/main/js/language/problemLanguageSupport.ts) | 2 | ||||
-rw-r--r-- | subprojects/frontend/src/language/props.ts (renamed from subprojects/language-web/src/main/js/language/props.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/theme/EditorTheme.ts (renamed from subprojects/language-web/src/main/js/theme/EditorTheme.ts) | 2 | ||||
-rw-r--r-- | subprojects/frontend/src/theme/ThemeProvider.tsx (renamed from subprojects/language-web/src/main/js/theme/ThemeProvider.tsx) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/theme/ThemeStore.ts (renamed from subprojects/language-web/src/main/js/theme/ThemeStore.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/themeVariables.module.scss (renamed from subprojects/language-web/src/main/css/themeVariables.module.scss) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/themes.scss (renamed from subprojects/language-web/src/main/css/themes.scss) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/utils/ConditionVariable.ts (renamed from subprojects/language-web/src/main/js/utils/ConditionVariable.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/utils/PendingTask.ts (renamed from subprojects/language-web/src/main/js/utils/PendingTask.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/utils/Timer.ts (renamed from subprojects/language-web/src/main/js/utils/Timer.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/utils/logger.ts (renamed from subprojects/language-web/src/main/js/utils/logger.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/ContentAssistService.ts (renamed from subprojects/language-web/src/main/js/xtext/ContentAssistService.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/HighlightingService.ts (renamed from subprojects/language-web/src/main/js/xtext/HighlightingService.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/OccurrencesService.ts (renamed from subprojects/language-web/src/main/js/xtext/OccurrencesService.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/UpdateService.ts (renamed from subprojects/language-web/src/main/js/xtext/UpdateService.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/ValidationService.ts (renamed from subprojects/language-web/src/main/js/xtext/ValidationService.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/XtextClient.ts (renamed from subprojects/language-web/src/main/js/xtext/XtextClient.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/XtextWebSocketClient.ts (renamed from subprojects/language-web/src/main/js/xtext/XtextWebSocketClient.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/xtextMessages.ts (renamed from subprojects/language-web/src/main/js/xtext/xtextMessages.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/src/xtext/xtextServiceResults.ts (renamed from subprojects/language-web/src/main/js/xtext/xtextServiceResults.ts) | 0 | ||||
-rw-r--r-- | subprojects/frontend/tsconfig.json (renamed from subprojects/language-web/tsconfig.json) | 2 | ||||
-rw-r--r-- | subprojects/frontend/tsconfig.sonar.json (renamed from subprojects/language-web/tsconfig.sonar.json) | 3 | ||||
-rw-r--r-- | subprojects/frontend/webpack.config.js (renamed from subprojects/language-web/webpack.config.js) | 100 | ||||
-rw-r--r-- | subprojects/language-web/.editorconfig | 5 | ||||
-rw-r--r-- | subprojects/language-web/build.gradle | 115 | ||||
-rw-r--r-- | yarn.lock | 50 |
49 files changed, 170 insertions, 235 deletions
diff --git a/package.json b/package.json index b06fc782..1df63f5d 100644 --- a/package.json +++ b/package.json | |||
@@ -3,7 +3,7 @@ | |||
3 | "version": "0.0.0", | 3 | "version": "0.0.0", |
4 | "private": true, | 4 | "private": true, |
5 | "workspaces": [ | 5 | "workspaces": [ |
6 | "subprojects/language-web" | 6 | "subprojects/frontend" |
7 | ], | 7 | ], |
8 | "devDependencies": { | 8 | "devDependencies": { |
9 | "eslint": "^8.4.1", | 9 | "eslint": "^8.4.1", |
diff --git a/settings.gradle b/settings.gradle index b1e298ca..626ae401 100644 --- a/settings.gradle +++ b/settings.gradle | |||
@@ -1,5 +1,6 @@ | |||
1 | rootProject.name = 'refinery' | 1 | rootProject.name = 'refinery' |
2 | 2 | ||
3 | include 'frontend' | ||
3 | include 'language' | 4 | include 'language' |
4 | include 'language-ide' | 5 | include 'language-ide' |
5 | include 'language-model' | 6 | include 'language-model' |
diff --git a/subprojects/language-web/.eslintrc.js b/subprojects/frontend/.eslintrc.js index b27feb0e..aa7636f8 100644 --- a/subprojects/language-web/.eslintrc.js +++ b/subprojects/frontend/.eslintrc.js | |||
@@ -26,7 +26,6 @@ module.exports = { | |||
26 | '@typescript-eslint/switch-exhaustiveness-check': 'error', | 26 | '@typescript-eslint/switch-exhaustiveness-check': 'error', |
27 | // https://github.com/airbnb/javascript/pull/2501 | 27 | // https://github.com/airbnb/javascript/pull/2501 |
28 | 'react/function-component-definition': ['error', { | 28 | 'react/function-component-definition': ['error', { |
29 | namedComponents: 'function-expression', | ||
30 | namedComponents: 'function-declaration', | 29 | namedComponents: 'function-declaration', |
31 | }], | 30 | }], |
32 | }, | 31 | }, |
diff --git a/subprojects/language-web/.stylelintrc.js b/subprojects/frontend/.stylelintrc.js index 7adf8f26..7adf8f26 100644 --- a/subprojects/language-web/.stylelintrc.js +++ b/subprojects/frontend/.stylelintrc.js | |||
diff --git a/subprojects/frontend/build.gradle b/subprojects/frontend/build.gradle new file mode 100644 index 00000000..71444e89 --- /dev/null +++ b/subprojects/frontend/build.gradle | |||
@@ -0,0 +1,101 @@ | |||
1 | plugins { | ||
2 | id 'refinery-frontend-workspace' | ||
3 | id 'refinery-sonarqube' | ||
4 | } | ||
5 | |||
6 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn | ||
7 | |||
8 | def webpackOutputDir = "${buildDir}/webpack" | ||
9 | def productionResources = file("${webpackOutputDir}/production") | ||
10 | |||
11 | frontend { | ||
12 | assembleScript = 'assemble:webpack' | ||
13 | } | ||
14 | |||
15 | configurations { | ||
16 | productionAssets { | ||
17 | canBeConsumed = true | ||
18 | canBeResolved = false | ||
19 | } | ||
20 | } | ||
21 | |||
22 | def installFrontend = tasks.named('installFrontend') | ||
23 | |||
24 | def generateLezerGrammar = tasks.register('generateLezerGrammar', RunYarn) { | ||
25 | dependsOn installFrontend | ||
26 | inputs.file 'src/language/problem.grammar' | ||
27 | inputs.file 'package.json' | ||
28 | inputs.file rootProject.file('yarn.lock') | ||
29 | outputs.file "${buildDir}/generated/sources/lezer/problem.ts" | ||
30 | outputs.file "${buildDir}/generated/sources/lezer/problem.terms.ts" | ||
31 | script = 'run assemble:lezer' | ||
32 | } | ||
33 | |||
34 | def assembleFrontend = tasks.named('assembleFrontend') | ||
35 | assembleFrontend.configure { | ||
36 | dependsOn generateLezerGrammar | ||
37 | inputs.dir 'src' | ||
38 | inputs.file "${buildDir}/generated/sources/lezer/problem.ts" | ||
39 | inputs.file "${buildDir}/generated/sources/lezer/problem.terms.ts" | ||
40 | inputs.files('package.json', 'webpack.config.js') | ||
41 | inputs.file rootProject.file('yarn.lock') | ||
42 | outputs.dir productionResources | ||
43 | } | ||
44 | |||
45 | artifacts { | ||
46 | productionAssets(productionResources) { | ||
47 | builtBy assembleFrontend | ||
48 | } | ||
49 | } | ||
50 | |||
51 | def eslint = tasks.register('eslint', RunYarn) { | ||
52 | dependsOn installFrontend | ||
53 | inputs.dir 'src' | ||
54 | inputs.files('.eslintrc.js', 'tsconfig.json') | ||
55 | inputs.file rootProject.file('yarn.lock') | ||
56 | if (project.hasProperty('ci')) { | ||
57 | outputs.file "${buildDir}/eslint.json" | ||
58 | script = 'run check:eslint:ci' | ||
59 | } else { | ||
60 | script = 'run check:eslint' | ||
61 | } | ||
62 | group = 'verification' | ||
63 | description = 'Check for TypeScript errors.' | ||
64 | } | ||
65 | |||
66 | def stylelint = tasks.register('stylelint', RunYarn) { | ||
67 | dependsOn installFrontend | ||
68 | inputs.dir 'src' | ||
69 | inputs.file '.stylelintrc.js' | ||
70 | inputs.file rootProject.file('yarn.lock') | ||
71 | if (project.hasProperty('ci')) { | ||
72 | outputs.file "${buildDir}/stylelint.json" | ||
73 | script = 'run check:stylelint:ci' | ||
74 | } else { | ||
75 | script = 'run check:stylelint' | ||
76 | } | ||
77 | group = 'verification' | ||
78 | description = 'Check for Sass errors.' | ||
79 | } | ||
80 | |||
81 | tasks.named('check') { | ||
82 | dependsOn(eslint, stylelint) | ||
83 | } | ||
84 | |||
85 | tasks.register('webpackServe', RunYarn) { | ||
86 | dependsOn installFrontend | ||
87 | dependsOn generateLezerGrammar | ||
88 | outputs.dir "${webpackOutputDir}/development" | ||
89 | script = 'run serve' | ||
90 | group = 'run' | ||
91 | description = 'Start a Webpack dev server with hot module replacement.' | ||
92 | } | ||
93 | |||
94 | sonarqube.properties { | ||
95 | properties['sonar.sources'] += ['src'] | ||
96 | property 'sonar.nodejs.executable', "${frontend.nodeInstallDirectory.get()}/bin/node" | ||
97 | property 'sonar.eslint.reportPaths', "${buildDir}/eslint.json" | ||
98 | property 'sonar.css.stylelint.reportPaths', "${buildDir}/stylelint.json" | ||
99 | // SonarJS does not pick up typescript files with `exactOptionalPropertyTypes` | ||
100 | property 'sonar.typescript.tsconfigPath', 'tsconfig.sonar.json' | ||
101 | } | ||
diff --git a/subprojects/language-web/package.json b/subprojects/frontend/package.json index 5fa977d9..14795885 100644 --- a/subprojects/language-web/package.json +++ b/subprojects/frontend/package.json | |||
@@ -1,23 +1,23 @@ | |||
1 | { | 1 | { |
2 | "name": "@refinery/language-web", | 2 | "name": "@refinery/frontend", |
3 | "version": "0.0.0", | 3 | "version": "0.0.0", |
4 | "description": "Web frontend for VIATRA-Generator", | 4 | "description": "Web frontend for Refinery", |
5 | "main": "index.js", | 5 | "main": "index.js", |
6 | "scripts": { | 6 | "scripts": { |
7 | "assemble:lezer": "lezer-generator src/main/js/language/problem.grammar -o build/generated/sources/lezer/problem.ts", | 7 | "assemble:lezer": "lezer-generator src/language/problem.grammar -o build/generated/sources/lezer/problem.ts", |
8 | "assemble:webpack": "webpack --node-env production", | 8 | "assemble:webpack": "webpack --node-env production", |
9 | "serve": "webpack serve --node-env development --hot", | 9 | "serve": "webpack serve --node-env development --hot", |
10 | "check": "yarn run check:eslint && yarn run check:stylelint", | 10 | "check": "yarn run check:eslint && yarn run check:stylelint", |
11 | "check:eslint": "eslint .", | 11 | "check:eslint": "eslint .", |
12 | "check:eslint:ci": "eslint -f json -o build/eslint.json .", | 12 | "check:eslint:ci": "eslint -f json -o build/eslint.json .", |
13 | "check:stylelint": "stylelint src/main/css/**/*.scss", | 13 | "check:stylelint": "stylelint src/**/*.scss", |
14 | "check:stylelint:ci": "stylelint -f json src/main/css/**/*.scss > build/stylelint.json" | 14 | "check:stylelint:ci": "stylelint -f json src/**/*.scss > build/stylelint.json" |
15 | }, | 15 | }, |
16 | "repository": { | 16 | "repository": { |
17 | "type": "git", | 17 | "type": "git", |
18 | "url": "git+https://github.com/graphs4value/refinery.git" | 18 | "url": "git+https://github.com/graphs4value/refinery.git" |
19 | }, | 19 | }, |
20 | "author": "VIATRA-Generator authors", | 20 | "author": "Refinery authors", |
21 | "license": "EPL-2.0", | 21 | "license": "EPL-2.0", |
22 | "bugs": { | 22 | "bugs": { |
23 | "url": "https://github.com/graphs4value/issues" | 23 | "url": "https://github.com/graphs4value/issues" |
@@ -47,9 +47,8 @@ | |||
47 | "eslint-plugin-react-hooks": "^4.3.0", | 47 | "eslint-plugin-react-hooks": "^4.3.0", |
48 | "html-webpack-plugin": "^5.5.0", | 48 | "html-webpack-plugin": "^5.5.0", |
49 | "image-webpack-loader": "^8.0.1", | 49 | "image-webpack-loader": "^8.0.1", |
50 | "magic-comments-loader": "^1.4.1", | ||
51 | "mini-css-extract-plugin": "^2.4.5", | 50 | "mini-css-extract-plugin": "^2.4.5", |
52 | "postcss": "^8.4.4", | 51 | "postcss": "^8.4.5", |
53 | "postcss-scss": "^4.0.2", | 52 | "postcss-scss": "^4.0.2", |
54 | "sass": "^1.45.0", | 53 | "sass": "^1.45.0", |
55 | "sass-loader": "^12.4.0", | 54 | "sass-loader": "^12.4.0", |
@@ -81,7 +80,7 @@ | |||
81 | "@codemirror/search": "^0.19.4", | 80 | "@codemirror/search": "^0.19.4", |
82 | "@codemirror/state": "^0.19.6", | 81 | "@codemirror/state": "^0.19.6", |
83 | "@codemirror/view": "^0.19.29", | 82 | "@codemirror/view": "^0.19.29", |
84 | "@emotion/react": "^11.7.0", | 83 | "@emotion/react": "^11.7.1", |
85 | "@emotion/styled": "^11.6.0", | 84 | "@emotion/styled": "^11.6.0", |
86 | "@fontsource/jetbrains-mono": "^4.5.0", | 85 | "@fontsource/jetbrains-mono": "^4.5.0", |
87 | "@fontsource/roboto": "^4.5.1", | 86 | "@fontsource/roboto": "^4.5.1", |
diff --git a/subprojects/language-web/src/main/js/App.tsx b/subprojects/frontend/src/App.tsx index 54f92f9a..54f92f9a 100644 --- a/subprojects/language-web/src/main/js/App.tsx +++ b/subprojects/frontend/src/App.tsx | |||
diff --git a/subprojects/language-web/src/main/js/RootStore.tsx b/subprojects/frontend/src/RootStore.tsx index baf0b61e..baf0b61e 100644 --- a/subprojects/language-web/src/main/js/RootStore.tsx +++ b/subprojects/frontend/src/RootStore.tsx | |||
diff --git a/subprojects/language-web/src/main/js/editor/EditorArea.tsx b/subprojects/frontend/src/editor/EditorArea.tsx index dba20f6e..dba20f6e 100644 --- a/subprojects/language-web/src/main/js/editor/EditorArea.tsx +++ b/subprojects/frontend/src/editor/EditorArea.tsx | |||
diff --git a/subprojects/language-web/src/main/js/editor/EditorButtons.tsx b/subprojects/frontend/src/editor/EditorButtons.tsx index 150aa00d..150aa00d 100644 --- a/subprojects/language-web/src/main/js/editor/EditorButtons.tsx +++ b/subprojects/frontend/src/editor/EditorButtons.tsx | |||
diff --git a/subprojects/language-web/src/main/js/editor/EditorParent.ts b/subprojects/frontend/src/editor/EditorParent.ts index 94ca24ea..94ca24ea 100644 --- a/subprojects/language-web/src/main/js/editor/EditorParent.ts +++ b/subprojects/frontend/src/editor/EditorParent.ts | |||
diff --git a/subprojects/language-web/src/main/js/editor/EditorStore.ts b/subprojects/frontend/src/editor/EditorStore.ts index 5760de28..5760de28 100644 --- a/subprojects/language-web/src/main/js/editor/EditorStore.ts +++ b/subprojects/frontend/src/editor/EditorStore.ts | |||
diff --git a/subprojects/language-web/src/main/js/editor/GenerateButton.tsx b/subprojects/frontend/src/editor/GenerateButton.tsx index 3834cec4..3834cec4 100644 --- a/subprojects/language-web/src/main/js/editor/GenerateButton.tsx +++ b/subprojects/frontend/src/editor/GenerateButton.tsx | |||
diff --git a/subprojects/language-web/src/main/js/editor/decorationSetExtension.ts b/subprojects/frontend/src/editor/decorationSetExtension.ts index 2d630c20..2d630c20 100644 --- a/subprojects/language-web/src/main/js/editor/decorationSetExtension.ts +++ b/subprojects/frontend/src/editor/decorationSetExtension.ts | |||
diff --git a/subprojects/language-web/src/main/js/editor/findOccurrences.ts b/subprojects/frontend/src/editor/findOccurrences.ts index 92102746..92102746 100644 --- a/subprojects/language-web/src/main/js/editor/findOccurrences.ts +++ b/subprojects/frontend/src/editor/findOccurrences.ts | |||
diff --git a/subprojects/language-web/src/main/js/editor/semanticHighlighting.ts b/subprojects/frontend/src/editor/semanticHighlighting.ts index 2aed421b..2aed421b 100644 --- a/subprojects/language-web/src/main/js/editor/semanticHighlighting.ts +++ b/subprojects/frontend/src/editor/semanticHighlighting.ts | |||
diff --git a/subprojects/language-web/src/main/js/global.d.ts b/subprojects/frontend/src/global.d.ts index 0533a46e..0533a46e 100644 --- a/subprojects/language-web/src/main/js/global.d.ts +++ b/subprojects/frontend/src/global.d.ts | |||
diff --git a/subprojects/language-web/src/main/html/index.html b/subprojects/frontend/src/index.html index f404aa8a..f404aa8a 100644 --- a/subprojects/language-web/src/main/html/index.html +++ b/subprojects/frontend/src/index.html | |||
diff --git a/subprojects/language-web/src/main/css/index.scss b/subprojects/frontend/src/index.scss index ad876aaf..ad876aaf 100644 --- a/subprojects/language-web/src/main/css/index.scss +++ b/subprojects/frontend/src/index.scss | |||
diff --git a/subprojects/language-web/src/main/js/index.tsx b/subprojects/frontend/src/index.tsx index d368c9ba..15b26adb 100644 --- a/subprojects/language-web/src/main/js/index.tsx +++ b/subprojects/frontend/src/index.tsx | |||
@@ -6,7 +6,7 @@ import { App } from './App'; | |||
6 | import { RootStore, RootStoreProvider } from './RootStore'; | 6 | import { RootStore, RootStoreProvider } from './RootStore'; |
7 | import { ThemeProvider } from './theme/ThemeProvider'; | 7 | import { ThemeProvider } from './theme/ThemeProvider'; |
8 | 8 | ||
9 | import '../css/index.scss'; | 9 | import './index.scss'; |
10 | 10 | ||
11 | const initialValue = `class Family { | 11 | const initialValue = `class Family { |
12 | contains Person[] members | 12 | contains Person[] members |
diff --git a/subprojects/language-web/src/main/js/language/folding.ts b/subprojects/frontend/src/language/folding.ts index 5d51f796..5d51f796 100644 --- a/subprojects/language-web/src/main/js/language/folding.ts +++ b/subprojects/frontend/src/language/folding.ts | |||
diff --git a/subprojects/language-web/src/main/js/language/indentation.ts b/subprojects/frontend/src/language/indentation.ts index 6d36ed3b..6d36ed3b 100644 --- a/subprojects/language-web/src/main/js/language/indentation.ts +++ b/subprojects/frontend/src/language/indentation.ts | |||
diff --git a/subprojects/language-web/src/main/js/language/problem.grammar b/subprojects/frontend/src/language/problem.grammar index bccc2e31..1ace2872 100644 --- a/subprojects/language-web/src/main/js/language/problem.grammar +++ b/subprojects/frontend/src/language/problem.grammar | |||
@@ -1,6 +1,6 @@ | |||
1 | @detectDelim | 1 | @detectDelim |
2 | 2 | ||
3 | @external prop implicitCompletion from '../../../../src/main/js/language/props.ts' | 3 | @external prop implicitCompletion from '../../../../src/language/props.ts' |
4 | 4 | ||
5 | @top Problem { statement* } | 5 | @top Problem { statement* } |
6 | 6 | ||
diff --git a/subprojects/language-web/src/main/js/language/problemLanguageSupport.ts b/subprojects/frontend/src/language/problemLanguageSupport.ts index 6508a2c0..b858ba91 100644 --- a/subprojects/language-web/src/main/js/language/problemLanguageSupport.ts +++ b/subprojects/frontend/src/language/problemLanguageSupport.ts | |||
@@ -9,7 +9,7 @@ import { | |||
9 | } from '@codemirror/language'; | 9 | } from '@codemirror/language'; |
10 | import { LRParser } from '@lezer/lr'; | 10 | import { LRParser } from '@lezer/lr'; |
11 | 11 | ||
12 | import { parser } from '../../../../build/generated/sources/lezer/problem'; | 12 | import { parser } from '../../build/generated/sources/lezer/problem'; |
13 | import { | 13 | import { |
14 | foldBlockComment, | 14 | foldBlockComment, |
15 | foldConjunction, | 15 | foldConjunction, |
diff --git a/subprojects/language-web/src/main/js/language/props.ts b/subprojects/frontend/src/language/props.ts index 8e488bf5..8e488bf5 100644 --- a/subprojects/language-web/src/main/js/language/props.ts +++ b/subprojects/frontend/src/language/props.ts | |||
diff --git a/subprojects/language-web/src/main/js/theme/EditorTheme.ts b/subprojects/frontend/src/theme/EditorTheme.ts index 1b0dd5de..294192fa 100644 --- a/subprojects/language-web/src/main/js/theme/EditorTheme.ts +++ b/subprojects/frontend/src/theme/EditorTheme.ts | |||
@@ -1,6 +1,6 @@ | |||
1 | import type { PaletteMode } from '@mui/material'; | 1 | import type { PaletteMode } from '@mui/material'; |
2 | 2 | ||
3 | import cssVariables from '../../css/themeVariables.module.scss'; | 3 | import cssVariables from '../themeVariables.module.scss'; |
4 | 4 | ||
5 | export enum EditorTheme { | 5 | export enum EditorTheme { |
6 | Light, | 6 | Light, |
diff --git a/subprojects/language-web/src/main/js/theme/ThemeProvider.tsx b/subprojects/frontend/src/theme/ThemeProvider.tsx index f5b50be1..f5b50be1 100644 --- a/subprojects/language-web/src/main/js/theme/ThemeProvider.tsx +++ b/subprojects/frontend/src/theme/ThemeProvider.tsx | |||
diff --git a/subprojects/language-web/src/main/js/theme/ThemeStore.ts b/subprojects/frontend/src/theme/ThemeStore.ts index ffaf6dde..ffaf6dde 100644 --- a/subprojects/language-web/src/main/js/theme/ThemeStore.ts +++ b/subprojects/frontend/src/theme/ThemeStore.ts | |||
diff --git a/subprojects/language-web/src/main/css/themeVariables.module.scss b/subprojects/frontend/src/themeVariables.module.scss index 85af4219..85af4219 100644 --- a/subprojects/language-web/src/main/css/themeVariables.module.scss +++ b/subprojects/frontend/src/themeVariables.module.scss | |||
diff --git a/subprojects/language-web/src/main/css/themes.scss b/subprojects/frontend/src/themes.scss index a30f1de3..a30f1de3 100644 --- a/subprojects/language-web/src/main/css/themes.scss +++ b/subprojects/frontend/src/themes.scss | |||
diff --git a/subprojects/language-web/src/main/js/utils/ConditionVariable.ts b/subprojects/frontend/src/utils/ConditionVariable.ts index 0910dfa6..0910dfa6 100644 --- a/subprojects/language-web/src/main/js/utils/ConditionVariable.ts +++ b/subprojects/frontend/src/utils/ConditionVariable.ts | |||
diff --git a/subprojects/language-web/src/main/js/utils/PendingTask.ts b/subprojects/frontend/src/utils/PendingTask.ts index 51b79fb0..51b79fb0 100644 --- a/subprojects/language-web/src/main/js/utils/PendingTask.ts +++ b/subprojects/frontend/src/utils/PendingTask.ts | |||
diff --git a/subprojects/language-web/src/main/js/utils/Timer.ts b/subprojects/frontend/src/utils/Timer.ts index 8f653070..8f653070 100644 --- a/subprojects/language-web/src/main/js/utils/Timer.ts +++ b/subprojects/frontend/src/utils/Timer.ts | |||
diff --git a/subprojects/language-web/src/main/js/utils/logger.ts b/subprojects/frontend/src/utils/logger.ts index 306d122c..306d122c 100644 --- a/subprojects/language-web/src/main/js/utils/logger.ts +++ b/subprojects/frontend/src/utils/logger.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/ContentAssistService.ts b/subprojects/frontend/src/xtext/ContentAssistService.ts index 8b872e06..8b872e06 100644 --- a/subprojects/language-web/src/main/js/xtext/ContentAssistService.ts +++ b/subprojects/frontend/src/xtext/ContentAssistService.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/HighlightingService.ts b/subprojects/frontend/src/xtext/HighlightingService.ts index dfbb4a19..dfbb4a19 100644 --- a/subprojects/language-web/src/main/js/xtext/HighlightingService.ts +++ b/subprojects/frontend/src/xtext/HighlightingService.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/OccurrencesService.ts b/subprojects/frontend/src/xtext/OccurrencesService.ts index bc865537..bc865537 100644 --- a/subprojects/language-web/src/main/js/xtext/OccurrencesService.ts +++ b/subprojects/frontend/src/xtext/OccurrencesService.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/UpdateService.ts b/subprojects/frontend/src/xtext/UpdateService.ts index e78944a9..e78944a9 100644 --- a/subprojects/language-web/src/main/js/xtext/UpdateService.ts +++ b/subprojects/frontend/src/xtext/UpdateService.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/ValidationService.ts b/subprojects/frontend/src/xtext/ValidationService.ts index ff7d3700..ff7d3700 100644 --- a/subprojects/language-web/src/main/js/xtext/ValidationService.ts +++ b/subprojects/frontend/src/xtext/ValidationService.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/XtextClient.ts b/subprojects/frontend/src/xtext/XtextClient.ts index 0898e725..0898e725 100644 --- a/subprojects/language-web/src/main/js/xtext/XtextClient.ts +++ b/subprojects/frontend/src/xtext/XtextClient.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/XtextWebSocketClient.ts b/subprojects/frontend/src/xtext/XtextWebSocketClient.ts index 2ce20a54..2ce20a54 100644 --- a/subprojects/language-web/src/main/js/xtext/XtextWebSocketClient.ts +++ b/subprojects/frontend/src/xtext/XtextWebSocketClient.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/xtextMessages.ts b/subprojects/frontend/src/xtext/xtextMessages.ts index c4305fcf..c4305fcf 100644 --- a/subprojects/language-web/src/main/js/xtext/xtextMessages.ts +++ b/subprojects/frontend/src/xtext/xtextMessages.ts | |||
diff --git a/subprojects/language-web/src/main/js/xtext/xtextServiceResults.ts b/subprojects/frontend/src/xtext/xtextServiceResults.ts index f79b059c..f79b059c 100644 --- a/subprojects/language-web/src/main/js/xtext/xtextServiceResults.ts +++ b/subprojects/frontend/src/xtext/xtextServiceResults.ts | |||
diff --git a/subprojects/language-web/tsconfig.json b/subprojects/frontend/tsconfig.json index cb5f6b13..94c357c5 100644 --- a/subprojects/language-web/tsconfig.json +++ b/subprojects/frontend/tsconfig.json | |||
@@ -13,6 +13,6 @@ | |||
13 | "noEmit": true, | 13 | "noEmit": true, |
14 | "skipLibCheck": true | 14 | "skipLibCheck": true |
15 | }, | 15 | }, |
16 | "include": ["./src/main/js/**/*"], | 16 | "include": ["./src/**/*"], |
17 | "exclude": ["./build/generated/sources/lezer/*"] | 17 | "exclude": ["./build/generated/sources/lezer/*"] |
18 | } | 18 | } |
diff --git a/subprojects/language-web/tsconfig.sonar.json b/subprojects/frontend/tsconfig.sonar.json index 54eef68b..9db12b91 100644 --- a/subprojects/language-web/tsconfig.sonar.json +++ b/subprojects/frontend/tsconfig.sonar.json | |||
@@ -12,6 +12,5 @@ | |||
12 | "noEmit": true, | 12 | "noEmit": true, |
13 | "skipLibCheck": true | 13 | "skipLibCheck": true |
14 | }, | 14 | }, |
15 | "include": ["./src/main/js/**/*"], | 15 | "include": ["./src/**/*"] |
16 | "exclude": ["./src/main/js/xtext/**/*"] | ||
17 | } | 16 | } |
diff --git a/subprojects/language-web/webpack.config.js b/subprojects/frontend/webpack.config.js index 801a705c..bacb7e4a 100644 --- a/subprojects/language-web/webpack.config.js +++ b/subprojects/frontend/webpack.config.js | |||
@@ -13,10 +13,11 @@ const currentNodeEnv = process.env.NODE_ENV || 'development'; | |||
13 | const devMode = currentNodeEnv !== 'production'; | 13 | const devMode = currentNodeEnv !== 'production'; |
14 | const outputPath = path.resolve(__dirname, 'build/webpack', currentNodeEnv); | 14 | const outputPath = path.resolve(__dirname, 'build/webpack', currentNodeEnv); |
15 | 15 | ||
16 | const portNumberOrElse = (envName, fallback) => { | 16 | function portNumberOrElse (envName, fallback) { |
17 | const value = process.env[envName]; | 17 | const value = process.env[envName]; |
18 | return value ? parseInt(value) : fallback; | 18 | return value ? parseInt(value) : fallback; |
19 | }; | 19 | } |
20 | |||
20 | const listenHost = process.env['LISTEN_HOST'] || 'localhost'; | 21 | const listenHost = process.env['LISTEN_HOST'] || 'localhost'; |
21 | const listenPort = portNumberOrElse('LISTEN_PORT', 1313); | 22 | const listenPort = portNumberOrElse('LISTEN_PORT', 1313); |
22 | const apiHost = process.env['API_HOST'] || listenHost; | 23 | const apiHost = process.env['API_HOST'] || listenHost; |
@@ -24,78 +25,34 @@ const apiPort = portNumberOrElse('API_PORT', 1312); | |||
24 | const publicHost = process.env['PUBLIC_HOST'] || listenHost; | 25 | const publicHost = process.env['PUBLIC_HOST'] || listenHost; |
25 | const publicPort = portNumberOrElse('PUBLIC_PORT', listenPort); | 26 | const publicPort = portNumberOrElse('PUBLIC_PORT', listenPort); |
26 | 27 | ||
27 | const resolveSources = sources => path.resolve(__dirname, 'src', sources); | ||
28 | const mainJsSources = resolveSources('main/js'); | ||
29 | const babelLoaderFilters = { | ||
30 | include: [mainJsSources], | ||
31 | }; | ||
32 | const babelPresets = [ | ||
33 | [ | ||
34 | '@babel/preset-env', | ||
35 | { | ||
36 | targets: 'defaults', | ||
37 | }, | ||
38 | ], | ||
39 | '@babel/preset-react', | ||
40 | ]; | ||
41 | const babelPlugins = [ | ||
42 | '@babel/plugin-transform-runtime', | ||
43 | ] | ||
44 | const magicCommentsLoader = { | ||
45 | loader: 'magic-comments-loader', | ||
46 | options: { | ||
47 | webpackChunkName: true, | ||
48 | } | ||
49 | }; | ||
50 | |||
51 | module.exports = { | 28 | module.exports = { |
52 | mode: devMode ? 'development' : 'production', | 29 | mode: devMode ? 'development' : 'production', |
53 | entry: './src/main/js', | 30 | entry: './src/index', |
54 | output: { | 31 | output: { |
55 | path: outputPath, | 32 | path: outputPath, |
56 | publicPath: '/', | 33 | publicPath: '/', |
57 | filename: devMode ? '[name].js' : '[name].[contenthash].js', | 34 | filename: devMode ? '[name].js' : '[name].[contenthash].js', |
58 | chunkFilename: devMode ? '[name].js' : '[name].[contenthash].js', | 35 | assetModuleFilename: devMode ? '[name][ext]' : '[name].[contenthash][ext]', |
59 | assetModuleFilename: devMode ? '[name].js' : '[name].[contenthash][ext]', | ||
60 | clean: true, | 36 | clean: true, |
61 | crossOriginLoading: 'anonymous', | 37 | crossOriginLoading: 'anonymous', |
62 | }, | 38 | }, |
63 | module: { | 39 | module: { |
64 | rules: [ | 40 | rules: [ |
65 | { | 41 | { |
66 | test: /\.jsx?$/i, | 42 | test: /.[jt]sx?$/i, |
67 | ...babelLoaderFilters, | 43 | include: [path.resolve(__dirname, 'src')], |
68 | use: [ | 44 | use: [ |
69 | { | 45 | { |
70 | loader: 'babel-loader', | 46 | loader: 'babel-loader', |
71 | options: { | 47 | options: { |
72 | presets: babelPresets, | 48 | presets: [ |
73 | plugins: [ | ||
74 | [ | 49 | [ |
75 | '@babel/plugin-proposal-class-properties', | 50 | '@babel/preset-env', |
76 | { | 51 | { |
77 | loose: false, | 52 | targets: 'defaults', |
78 | }, | 53 | }, |
79 | ...babelPlugins, | ||
80 | ], | 54 | ], |
81 | ], | 55 | '@babel/preset-react', |
82 | assumptions: { | ||
83 | 'setPublicClassFields': false, | ||
84 | }, | ||
85 | }, | ||
86 | }, | ||
87 | magicCommentsLoader, | ||
88 | ], | ||
89 | }, | ||
90 | { | ||
91 | test: /.tsx?$/i, | ||
92 | ...babelLoaderFilters, | ||
93 | use: [ | ||
94 | { | ||
95 | loader: 'babel-loader', | ||
96 | options: { | ||
97 | presets: [ | ||
98 | ...babelPresets, | ||
99 | [ | 56 | [ |
100 | '@babel/preset-typescript', | 57 | '@babel/preset-typescript', |
101 | { | 58 | { |
@@ -107,10 +64,11 @@ module.exports = { | |||
107 | }, | 64 | }, |
108 | ] | 65 | ] |
109 | ], | 66 | ], |
110 | plugins: babelPlugins, | 67 | plugins: [ |
68 | '@babel/plugin-transform-runtime', | ||
69 | ], | ||
111 | }, | 70 | }, |
112 | }, | 71 | }, |
113 | magicCommentsLoader, | ||
114 | ], | 72 | ], |
115 | }, | 73 | }, |
116 | { | 74 | { |
@@ -145,11 +103,7 @@ module.exports = { | |||
145 | ], | 103 | ], |
146 | }, | 104 | }, |
147 | resolve: { | 105 | resolve: { |
148 | modules: [ | 106 | extensions: ['.ts', '.tsx', '.js', '.jsx'], |
149 | 'node_modules', | ||
150 | mainJsSources, | ||
151 | ], | ||
152 | extensions: ['.js', '.jsx', '.ts', '.tsx'], | ||
153 | }, | 107 | }, |
154 | devtool: devMode ? 'inline-source-map' : 'source-map', | 108 | devtool: devMode ? 'inline-source-map' : 'source-map', |
155 | optimization: { | 109 | optimization: { |
@@ -157,19 +111,6 @@ module.exports = { | |||
157 | sideEffects: devMode ? 'flag' : true, | 111 | sideEffects: devMode ? 'flag' : true, |
158 | splitChunks: { | 112 | splitChunks: { |
159 | chunks: 'all', | 113 | chunks: 'all', |
160 | cacheGroups: { | ||
161 | defaultVendors: { | ||
162 | test: /[\\/]node_modules[\\/]/, | ||
163 | priority: -10, | ||
164 | reuseExistingChunk: true, | ||
165 | filename: devMode ? 'vendor.[id].js' : 'vendor.[contenthash].js', | ||
166 | }, | ||
167 | default: { | ||
168 | minChunks: 2, | ||
169 | priority: -20, | ||
170 | reuseExistingChunk: true, | ||
171 | }, | ||
172 | }, | ||
173 | }, | 114 | }, |
174 | }, | 115 | }, |
175 | devServer: { | 116 | devServer: { |
@@ -205,16 +146,7 @@ module.exports = { | |||
205 | }), | 146 | }), |
206 | new SubresourceIntegrityPlugin(), | 147 | new SubresourceIntegrityPlugin(), |
207 | new HtmlWebpackPlugin({ | 148 | new HtmlWebpackPlugin({ |
208 | template: 'src/main/html/index.html', | 149 | template: 'src/index.html', |
209 | minify: devMode ? false : { | ||
210 | collapseWhitespace: true, | ||
211 | removeComments: true, | ||
212 | removeOptionalTags: true, | ||
213 | removeRedundantAttributes: true, | ||
214 | removeScriptTypeAttributes: true, | ||
215 | removeStyleLinkTypeAttributes: true, | ||
216 | useShortDoctype: true, | ||
217 | }, | ||
218 | }), | 150 | }), |
219 | new HtmlWebpackInjectPreload({ | 151 | new HtmlWebpackInjectPreload({ |
220 | files: [ | 152 | files: [ |
diff --git a/subprojects/language-web/.editorconfig b/subprojects/language-web/.editorconfig deleted file mode 100644 index 1b78e967..00000000 --- a/subprojects/language-web/.editorconfig +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | [src/main/css/xtext/**.css] | ||
2 | indent_style = tab | ||
3 | |||
4 | [src/main/js/xtext/**.js] | ||
5 | indent_style = tab | ||
diff --git a/subprojects/language-web/build.gradle b/subprojects/language-web/build.gradle index a549288a..6be4d5e8 100644 --- a/subprojects/language-web/build.gradle +++ b/subprojects/language-web/build.gradle | |||
@@ -1,10 +1,14 @@ | |||
1 | plugins { | 1 | plugins { |
2 | id 'refinery-frontend-workspace' | ||
3 | id 'refinery-java-application' | 2 | id 'refinery-java-application' |
4 | id 'refinery-xtext-conventions' | 3 | id 'refinery-xtext-conventions' |
5 | } | 4 | } |
6 | 5 | ||
7 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn | 6 | configurations { |
7 | webapp { | ||
8 | canBeConsumed = false | ||
9 | canBeResolved = true | ||
10 | } | ||
11 | } | ||
8 | 12 | ||
9 | dependencies { | 13 | dependencies { |
10 | implementation project(':refinery-language') | 14 | implementation project(':refinery-language') |
@@ -16,6 +20,7 @@ dependencies { | |||
16 | implementation libs.jetty.websocket.server | 20 | implementation libs.jetty.websocket.server |
17 | implementation libs.slf4j.simple | 21 | implementation libs.slf4j.simple |
18 | implementation libs.slf4j.log4j | 22 | implementation libs.slf4j.log4j |
23 | webapp project(path: ':refinery-frontend', configuration: 'productionAssets') | ||
19 | testImplementation testFixtures(project(':refinery-language')) | 24 | testImplementation testFixtures(project(':refinery-language')) |
20 | testImplementation libs.jetty.websocket.client | 25 | testImplementation libs.jetty.websocket.client |
21 | } | 26 | } |
@@ -28,120 +33,36 @@ for (taskName in ['compileJava', 'processResources']) { | |||
28 | } | 33 | } |
29 | } | 34 | } |
30 | 35 | ||
31 | def webpackOutputDir = "${buildDir}/webpack" | 36 | mainClassName = 'tools.refinery.language.web.ServerLauncher' |
32 | def productionResources = "${webpackOutputDir}/production" | ||
33 | def serverMainClass = 'tools.refinery.language.web.ServerLauncher' | ||
34 | |||
35 | frontend { | ||
36 | assembleScript = 'assemble:webpack' | ||
37 | } | ||
38 | |||
39 | def installFrontend = tasks.named('installFrontend') | ||
40 | |||
41 | def generateLezerGrammar = tasks.register('generateLezerGrammar', RunYarn) { | ||
42 | dependsOn installFrontend | ||
43 | inputs.file('src/main/js/language/problem.grammar') | ||
44 | inputs.files('package.json', 'yarn.lock') | ||
45 | outputs.file "${buildDir}/generated/sources/lezer/problem.ts" | ||
46 | outputs.file "${buildDir}/generated/sources/lezer/problem.terms.ts" | ||
47 | script = 'run assemble:lezer' | ||
48 | } | ||
49 | |||
50 | def assembleFrontend = tasks.named('assembleFrontend') | ||
51 | assembleFrontend.configure { | ||
52 | dependsOn generateLezerGrammar | ||
53 | inputs.dir 'src/main/css' | ||
54 | inputs.dir 'src/main/html' | ||
55 | inputs.dir 'src/main/js' | ||
56 | inputs.file "${buildDir}/generated/sources/lezer/problem.ts" | ||
57 | inputs.file "${buildDir}/generated/sources/lezer/problem.terms.ts" | ||
58 | inputs.files('package.json', 'yarn.lock', 'webpack.config.js') | ||
59 | outputs.dir productionResources | ||
60 | } | ||
61 | |||
62 | def eslint = tasks.register('eslint', RunYarn) { | ||
63 | dependsOn installFrontend | ||
64 | inputs.dir 'src/main/js' | ||
65 | inputs.files('.eslintrc.js', 'tsconfig.json') | ||
66 | if (project.hasProperty('ci')) { | ||
67 | outputs.file "${buildDir}/eslint.json" | ||
68 | script = 'run check:eslint:ci' | ||
69 | } else { | ||
70 | script = 'run check:eslint' | ||
71 | } | ||
72 | group = 'verification' | ||
73 | description = 'Check for TypeScript errors.' | ||
74 | } | ||
75 | |||
76 | def stylelint = tasks.register('stylelint', RunYarn) { | ||
77 | dependsOn installFrontend | ||
78 | inputs.dir 'src/main/css' | ||
79 | inputs.file '.stylelintrc.js' | ||
80 | if (project.hasProperty('ci')) { | ||
81 | outputs.file "${buildDir}/stylelint.json" | ||
82 | script = 'run check:stylelint:ci' | ||
83 | } else { | ||
84 | script = 'run check:stylelint' | ||
85 | } | ||
86 | group = 'verification' | ||
87 | description = 'Check for Sass errors.' | ||
88 | } | ||
89 | |||
90 | tasks.named('check') { | ||
91 | dependsOn(eslint, stylelint) | ||
92 | } | ||
93 | |||
94 | mainClassName = serverMainClass | ||
95 | 37 | ||
96 | tasks.named('jar') { | 38 | tasks.named('jar') { |
97 | dependsOn assembleFrontend | 39 | dependsOn project.configurations.webapp |
98 | from(productionResources) { | 40 | from(project.configurations.webapp) { |
99 | into 'webapp' | 41 | into 'webapp' |
100 | } | 42 | } |
101 | } | 43 | } |
102 | 44 | ||
103 | tasks.named('shadowJar') { | 45 | tasks.named('shadowJar') { |
104 | dependsOn assembleFrontend | 46 | dependsOn project.configurations.webapp |
105 | from(project.convention.getPlugin(JavaPluginConvention).sourceSets.main.output) | 47 | from(project.sourceSets.main.output) |
106 | configurations = [project.configurations.runtimeClasspath] | 48 | configurations = [project.configurations.runtimeClasspath] |
107 | exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA','schema/*', | 49 | exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA','schema/*', |
108 | '.options', '.api_description', '*.profile', 'about.*', 'about_*.html', 'about_files/*', | 50 | '.options', '.api_description', '*.profile', 'about.*', 'about_*.html', 'about_files/*', |
109 | 'plugin.xml', 'systembundle.properties', 'profile.list', 'META-INF/resources/xtext/**') | 51 | 'plugin.xml', 'systembundle.properties', 'profile.list', 'META-INF/resources/xtext/**') |
110 | append('plugin.properties') | 52 | append('plugin.properties') |
111 | from(productionResources) { | 53 | from(project.configurations.webapp) { |
112 | into 'webapp' | 54 | into 'webapp' |
113 | } | 55 | } |
114 | } | 56 | } |
115 | 57 | ||
116 | def jettyRun = tasks.register('jettyRun', JavaExec) { | 58 | def jettyRun = tasks.register('jettyRun', JavaExec) { |
117 | dependsOn assembleFrontend | 59 | dependsOn project.configurations.webapp |
118 | dependsOn sourceSets.main.runtimeClasspath | 60 | dependsOn sourceSets.main.runtimeClasspath |
119 | classpath = sourceSets.main.runtimeClasspath.filter{it.exists()} | 61 | classpath = sourceSets.main.runtimeClasspath |
120 | mainClass = serverMainClass | 62 | mainClass = mainClassName |
121 | standardInput = System.in | 63 | standardInput = System.in |
122 | environment BASE_RESOURCE: productionResources | 64 | def baseResource = project.configurations.webapp.incoming.artifacts.artifactFiles.first() |
65 | environment BASE_RESOURCE: baseResource | ||
123 | group = 'run' | 66 | group = 'run' |
124 | description = 'Start a Jetty web server serving the Xtex API and assets.' | 67 | description = 'Start a Jetty web server serving the Xtex API and assets.' |
125 | } | 68 | } |
126 | |||
127 | tasks.register('webpackServe', RunYarn) { | ||
128 | dependsOn installFrontend | ||
129 | dependsOn generateLezerGrammar | ||
130 | outputs.dir "${webpackOutputDir}/development" | ||
131 | script = 'run serve' | ||
132 | group = 'run' | ||
133 | description = 'Start a Webpack dev server with hot module replacement.' | ||
134 | } | ||
135 | |||
136 | sonarqube.properties { | ||
137 | properties['sonar.sources'] += [ | ||
138 | 'src/main/css', | ||
139 | 'src/main/html', | ||
140 | 'src/main/js', | ||
141 | ] | ||
142 | property 'sonar.nodejs.executable', "${frontend.nodeInstallDirectory.get()}/bin/node" | ||
143 | property 'sonar.eslint.reportPaths', "${buildDir}/eslint.json" | ||
144 | property 'sonar.css.stylelint.reportPaths', "${buildDir}/stylelint.json" | ||
145 | // SonarJS does not pick up typescript files with `exactOptionalPropertyTypes` | ||
146 | property 'sonar.typescript.tsconfigPath', 'tsconfig.sonar.json' | ||
147 | } | ||
@@ -1608,16 +1608,16 @@ __metadata: | |||
1608 | languageName: node | 1608 | languageName: node |
1609 | linkType: hard | 1609 | linkType: hard |
1610 | 1610 | ||
1611 | "@emotion/cache@npm:^11.6.0": | 1611 | "@emotion/cache@npm:^11.6.0, @emotion/cache@npm:^11.7.1": |
1612 | version: 11.6.0 | 1612 | version: 11.7.1 |
1613 | resolution: "@emotion/cache@npm:11.6.0" | 1613 | resolution: "@emotion/cache@npm:11.7.1" |
1614 | dependencies: | 1614 | dependencies: |
1615 | "@emotion/memoize": ^0.7.4 | 1615 | "@emotion/memoize": ^0.7.4 |
1616 | "@emotion/sheet": ^1.1.0 | 1616 | "@emotion/sheet": ^1.1.0 |
1617 | "@emotion/utils": ^1.0.0 | 1617 | "@emotion/utils": ^1.0.0 |
1618 | "@emotion/weak-memoize": ^0.2.5 | 1618 | "@emotion/weak-memoize": ^0.2.5 |
1619 | stylis: ^4.0.10 | 1619 | stylis: 4.0.13 |
1620 | checksum: 3c72c50bfe06fd7ec2728988181173664183d2320305a01bb757caa6a9d485de25fccde1b173d810423d2ff88a178d5a72cc21db76b9e458311a8ce3044dd2a1 | 1620 | checksum: cf7aa8fe3bacfdedcda94b53e76a7635e122043439715fcfbf7f1a81340cfe6099a59134481a03ec3e0437466566d18528577d1e6ea92f5b98c372b8b38a8f35 |
1621 | languageName: node | 1621 | languageName: node |
1622 | linkType: hard | 1622 | linkType: hard |
1623 | 1623 | ||
@@ -1644,12 +1644,12 @@ __metadata: | |||
1644 | languageName: node | 1644 | languageName: node |
1645 | linkType: hard | 1645 | linkType: hard |
1646 | 1646 | ||
1647 | "@emotion/react@npm:^11.7.0": | 1647 | "@emotion/react@npm:^11.7.1": |
1648 | version: 11.7.0 | 1648 | version: 11.7.1 |
1649 | resolution: "@emotion/react@npm:11.7.0" | 1649 | resolution: "@emotion/react@npm:11.7.1" |
1650 | dependencies: | 1650 | dependencies: |
1651 | "@babel/runtime": ^7.13.10 | 1651 | "@babel/runtime": ^7.13.10 |
1652 | "@emotion/cache": ^11.6.0 | 1652 | "@emotion/cache": ^11.7.1 |
1653 | "@emotion/serialize": ^1.0.2 | 1653 | "@emotion/serialize": ^1.0.2 |
1654 | "@emotion/sheet": ^1.1.0 | 1654 | "@emotion/sheet": ^1.1.0 |
1655 | "@emotion/utils": ^1.0.0 | 1655 | "@emotion/utils": ^1.0.0 |
@@ -1663,7 +1663,7 @@ __metadata: | |||
1663 | optional: true | 1663 | optional: true |
1664 | "@types/react": | 1664 | "@types/react": |
1665 | optional: true | 1665 | optional: true |
1666 | checksum: 8b50d61caabe04ae413ae23b98c170da643754ec89f25eb001464095685686585d0f88988bc36432f231e6de6abdbee73308c42ba427de9eaaf5a54d7f2f6ae5 | 1666 | checksum: 3392aa71f9c68c16022947959f7f842174e6b075b3baf58e185462411cd9b5a87557109a9225b1abaa2d7200a08b7cb9d7f21aa035f0d36b2c89e19b2a124e02 |
1667 | languageName: node | 1667 | languageName: node |
1668 | linkType: hard | 1668 | linkType: hard |
1669 | 1669 | ||
@@ -2041,9 +2041,9 @@ __metadata: | |||
2041 | languageName: node | 2041 | languageName: node |
2042 | linkType: hard | 2042 | linkType: hard |
2043 | 2043 | ||
2044 | "@refinery/language-web@workspace:subprojects/language-web": | 2044 | "@refinery/frontend@workspace:subprojects/frontend": |
2045 | version: 0.0.0-use.local | 2045 | version: 0.0.0-use.local |
2046 | resolution: "@refinery/language-web@workspace:subprojects/language-web" | 2046 | resolution: "@refinery/frontend@workspace:subprojects/frontend" |
2047 | dependencies: | 2047 | dependencies: |
2048 | "@babel/core": ^7.16.0 | 2048 | "@babel/core": ^7.16.0 |
2049 | "@babel/plugin-transform-runtime": ^7.16.4 | 2049 | "@babel/plugin-transform-runtime": ^7.16.4 |
@@ -2067,7 +2067,7 @@ __metadata: | |||
2067 | "@codemirror/search": ^0.19.4 | 2067 | "@codemirror/search": ^0.19.4 |
2068 | "@codemirror/state": ^0.19.6 | 2068 | "@codemirror/state": ^0.19.6 |
2069 | "@codemirror/view": ^0.19.29 | 2069 | "@codemirror/view": ^0.19.29 |
2070 | "@emotion/react": ^11.7.0 | 2070 | "@emotion/react": ^11.7.1 |
2071 | "@emotion/styled": ^11.6.0 | 2071 | "@emotion/styled": ^11.6.0 |
2072 | "@fontsource/jetbrains-mono": ^4.5.0 | 2072 | "@fontsource/jetbrains-mono": ^4.5.0 |
2073 | "@fontsource/roboto": ^4.5.1 | 2073 | "@fontsource/roboto": ^4.5.1 |
@@ -2097,12 +2097,11 @@ __metadata: | |||
2097 | image-webpack-loader: ^8.0.1 | 2097 | image-webpack-loader: ^8.0.1 |
2098 | loglevel: ^1.8.0 | 2098 | loglevel: ^1.8.0 |
2099 | loglevel-plugin-prefix: ^0.8.4 | 2099 | loglevel-plugin-prefix: ^0.8.4 |
2100 | magic-comments-loader: ^1.4.1 | ||
2101 | mini-css-extract-plugin: ^2.4.5 | 2100 | mini-css-extract-plugin: ^2.4.5 |
2102 | mobx: ^6.3.8 | 2101 | mobx: ^6.3.8 |
2103 | mobx-react-lite: ^3.2.2 | 2102 | mobx-react-lite: ^3.2.2 |
2104 | nanoid: ^3.1.30 | 2103 | nanoid: ^3.1.30 |
2105 | postcss: ^8.4.4 | 2104 | postcss: ^8.4.5 |
2106 | postcss-scss: ^4.0.2 | 2105 | postcss-scss: ^4.0.2 |
2107 | react: ^17.0.2 | 2106 | react: ^17.0.2 |
2108 | react-dom: ^17.0.2 | 2107 | react-dom: ^17.0.2 |
@@ -7032,17 +7031,6 @@ __metadata: | |||
7032 | languageName: node | 7031 | languageName: node |
7033 | linkType: hard | 7032 | linkType: hard |
7034 | 7033 | ||
7035 | "magic-comments-loader@npm:^1.4.1": | ||
7036 | version: 1.4.1 | ||
7037 | resolution: "magic-comments-loader@npm:1.4.1" | ||
7038 | dependencies: | ||
7039 | loader-utils: ^2.0.0 | ||
7040 | micromatch: ^4.0.4 | ||
7041 | schema-utils: ^3.1.1 | ||
7042 | checksum: 8e2c70ae7cebbe545b33087da7bb028133ffa58fb84dddf3fc844a465a93fb3f5dc0a8c0ff46279d0e2936da98170f0d06eff3ad8d27413124f2cc9ee2df4246 | ||
7043 | languageName: node | ||
7044 | linkType: hard | ||
7045 | |||
7046 | "make-dir@npm:^1.0.0, make-dir@npm:^1.2.0": | 7034 | "make-dir@npm:^1.0.0, make-dir@npm:^1.2.0": |
7047 | version: 1.3.0 | 7035 | version: 1.3.0 |
7048 | resolution: "make-dir@npm:1.3.0" | 7036 | resolution: "make-dir@npm:1.3.0" |
@@ -8321,14 +8309,14 @@ __metadata: | |||
8321 | languageName: node | 8309 | languageName: node |
8322 | linkType: hard | 8310 | linkType: hard |
8323 | 8311 | ||
8324 | "postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.4.4": | 8312 | "postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.4.5": |
8325 | version: 8.4.4 | 8313 | version: 8.4.5 |
8326 | resolution: "postcss@npm:8.4.4" | 8314 | resolution: "postcss@npm:8.4.5" |
8327 | dependencies: | 8315 | dependencies: |
8328 | nanoid: ^3.1.30 | 8316 | nanoid: ^3.1.30 |
8329 | picocolors: ^1.0.0 | 8317 | picocolors: ^1.0.0 |
8330 | source-map-js: ^1.0.1 | 8318 | source-map-js: ^1.0.1 |
8331 | checksum: 6cf3fe0ecdf5a0d2aeb5e8404938c7eab968704e2e29dc5421e90b4014eb1975c1c0ad828425f2428807ef6e3fcfadd71f988ab55cb06c28ac2866f22403255b | 8319 | checksum: b78abdd89c10f7b48f4bdcd376104a19d6e9c7495ab521729bdb3df315af6c211360e9f06887ad3bc0ab0f61a04b91d68ea11462997c79cced58b9ccd66fac07 |
8332 | languageName: node | 8320 | languageName: node |
8333 | linkType: hard | 8321 | linkType: hard |
8334 | 8322 | ||
@@ -9769,7 +9757,7 @@ __metadata: | |||
9769 | languageName: node | 9757 | languageName: node |
9770 | linkType: hard | 9758 | linkType: hard |
9771 | 9759 | ||
9772 | "stylis@npm:^4.0.10, stylis@npm:^4.0.3": | 9760 | "stylis@npm:4.0.13, stylis@npm:^4.0.3": |
9773 | version: 4.0.13 | 9761 | version: 4.0.13 |
9774 | resolution: "stylis@npm:4.0.13" | 9762 | resolution: "stylis@npm:4.0.13" |
9775 | checksum: 8ea7a87028b6383c6a982231c4b5b6150031ce028e0fdaf7b2ace82253d28a8af50cc5a9da8a421d3c7c4441592f393086e332795add672aa4a825f0fe3713a3 | 9763 | checksum: 8ea7a87028b6383c6a982231c4b5b6150031ce028e0fdaf7b2ace82253d28a8af50cc5a9da8a421d3c7c4441592f393086e332795add672aa4a825f0fe3713a3 |