diff --git a/core/trino-web-ui/src/main/resources/allowed-licenses.txt b/core/trino-web-ui/src/main/resources/allowed-licenses.txt new file mode 100644 index 000000000000..9c0cd125b467 --- /dev/null +++ b/core/trino-web-ui/src/main/resources/allowed-licenses.txt @@ -0,0 +1,11 @@ +"0BSD" +"Apache-2.0" +"BSD-2-Clause" +"BSD-3-Clause" +"CC-BY-4.0" +"ISC" +"MIT" +"MIT AND ISC" +"OFL-1.1" +"Python-2.0" +"Unlicense" diff --git a/core/trino-web-ui/src/main/resources/webapp-preview/package-lock.json b/core/trino-web-ui/src/main/resources/webapp-preview/package-lock.json index 5c734bd5166c..b51a6e6e3b77 100644 --- a/core/trino-web-ui/src/main/resources/webapp-preview/package-lock.json +++ b/core/trino-web-ui/src/main/resources/webapp-preview/package-lock.json @@ -28,6 +28,7 @@ "zustand": "^5.0.8" }, "devDependencies": { + "@bithero/monaco-editor-vite-plugin": "^1.0.2", "@eslint/js": "^9.36.0", "@types/lodash": "^4.17.20", "@types/lodash.merge": "^4.6.9", @@ -344,6 +345,16 @@ "node": ">=6.9.0" } }, + "node_modules/@bithero/monaco-editor-vite-plugin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bithero/monaco-editor-vite-plugin/-/monaco-editor-vite-plugin-1.0.2.tgz", + "integrity": "sha512-n2VMzfMCMD5b6p1tztCNQqVrdAH5umCh01gNVn3IWgNdk93vf2oX2M85gKb4fgyLa8LBenW5nRAAE5NXpkYOpw==", + "dev": true, + "license": "AGPL-3.0-or-later", + "peerDependencies": { + "monaco-editor": ">= 0.44.0" + } + }, "node_modules/@dagrejs/dagre": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.5.tgz", diff --git a/core/trino-web-ui/src/main/resources/webapp-preview/package.json b/core/trino-web-ui/src/main/resources/webapp-preview/package.json index 15c9a01ac283..5cf21d4f0822 100644 --- a/core/trino-web-ui/src/main/resources/webapp-preview/package.json +++ b/core/trino-web-ui/src/main/resources/webapp-preview/package.json @@ -12,8 +12,9 @@ "preview": "vite preview", "prettier:format": "prettier --write \"./src/**/*.{ts,tsx}\"", "prettier:check": "prettier --check \"./src/**/*.{ts,tsx}\"", - "check": "npm install && npm run lint && npm run prettier:check", - "check:clean": "npm clean-install && npm run lint && npm run prettier:check" + "check": "npm install && npm run lint && npm run prettier:check && npm run check:licenses", + "check:clean": "npm clean-install && npm run lint && npm run prettier:check && npm run check:licenses", + "check:licenses": "USED_LICENSES=$(mktemp); jq '.packages | to_entries | map(select(.key != \"\") | .value.license)[]' package-lock.json | sort -u > $USED_LICENSES; if DIFFERENCES=$(grep -Fvxf ../allowed-licenses.txt $USED_LICENSES); then echo '\\033[0;31mLicense found in package-lock.json that is not in allowed-licenses.txt' >&2; echo $DIFFERENCES; exit 1; fi" }, "dependencies": { "@dagrejs/dagre": "^1.1.5", @@ -36,6 +37,7 @@ "zustand": "^5.0.8" }, "devDependencies": { + "@bithero/monaco-editor-vite-plugin": "^1.0.2", "@eslint/js": "^9.36.0", "@types/lodash": "^4.17.20", "@types/lodash.merge": "^4.6.9", diff --git a/core/trino-web-ui/src/main/resources/webapp-preview/vite.config.ts b/core/trino-web-ui/src/main/resources/webapp-preview/vite.config.ts index 613772da61b1..1253369d2acb 100644 --- a/core/trino-web-ui/src/main/resources/webapp-preview/vite.config.ts +++ b/core/trino-web-ui/src/main/resources/webapp-preview/vite.config.ts @@ -1,4 +1,5 @@ import { ConfigEnv, defineConfig, loadEnv } from 'vite' +import { monaco } from '@bithero/monaco-editor-vite-plugin'; import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ @@ -9,7 +10,7 @@ export default defineConfig((mode: ConfigEnv) => { const baseUrl = env.VITE_BASE_URL return { base: '/ui/preview', - plugins: [react()], + plugins: [react(), monaco({features: [], languages: ['java', 'json', 'sql']})], // stacktrace, query/task plans, sql server: { proxy: { ['/ui/preview/auth']: { diff --git a/core/trino-web-ui/src/main/resources/webapp/src/package.json b/core/trino-web-ui/src/main/resources/webapp/src/package.json index 4079fda61213..c8cab098eff1 100644 --- a/core/trino-web-ui/src/main/resources/webapp/src/package.json +++ b/core/trino-web-ui/src/main/resources/webapp/src/package.json @@ -35,8 +35,9 @@ "package:clean": "npm clean-install && webpack --config webpack.config.js", "watch": "npm clean-install && webpack --config webpack.config.js --watch", "flow": "flow", - "check": "npm install && flow && prettier --check **/*.js **/*.jsx *.js *.jsx", - "check:clean": "npm clean-install && flow && prettier --check **/*.js **/*.jsx *.js *.jsx", + "check": "npm install && flow && prettier --check **/*.js **/*.jsx *.js *.jsx && npm run check:licenses", + "check:clean": "npm clean-install && flow && prettier --check **/*.js **/*.jsx *.js *.jsx && npm run check:licenses", + "check:licenses": "TEMP=$(mktemp); jq .packages[].license package-lock.json | grep -v 'null' | sort -u > $TEMP; if DIFFERENCES=$(grep -vxfF ../../allowed-licenses.txt $TEMP); then echo '\\033[0;31mLicense found in package-lock.json that is not in allowed-licenses.txt' >&2; echo $DIFFERENCES; exit 1; fi", "format": "prettier --write **/*.js **/*.jsx *.js *.jsx", "lint": "prettier --check **/*.js **/*.jsx" }