diff --git a/api/grpc-web/package.json b/api/grpc-web/package.json index 7f8a17a8..b4c8abe8 100644 --- a/api/grpc-web/package.json +++ b/api/grpc-web/package.json @@ -4,13 +4,13 @@ "description": "Chirpstack gRPC-web API", "license": "MIT", "devDependencies": { - "grpc-tools": "^1.12.4", + "grpc-tools": "^1.13.0", "ts-protoc-gen": "^0.15.0", - "typescript": "^5.1.6" + "typescript": "^5.8.3" }, "dependencies": { "@types/google-protobuf": "^3.15.12", - "google-protobuf": "^3.21.2", + "google-protobuf": "^3.21.4", "grpc-web": "^1.5.0" } } diff --git a/api/grpc-web/yarn.lock b/api/grpc-web/yarn.lock index 0a06feea..7361c9bf 100644 --- a/api/grpc-web/yarn.lock +++ b/api/grpc-web/yarn.lock @@ -146,15 +146,20 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -google-protobuf@^3.15.5, google-protobuf@^3.21.2: +google-protobuf@^3.15.5: version "3.21.2" resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4" integrity sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA== -grpc-tools@^1.12.4: - version "1.12.4" - resolved "https://registry.yarnpkg.com/grpc-tools/-/grpc-tools-1.12.4.tgz#a044c9e8157941033ea7a5f144c2dc9dc4501de4" - integrity sha512-5+mLAJJma3BjnW/KQp6JBjUMgvu7Mu3dBvBPd1dcbNIb+qiR0817zDpgPjS7gRb+l/8EVNIa3cB02xI9JLToKg== +google-protobuf@^3.21.4: + version "3.21.4" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" + integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ== + +grpc-tools@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/grpc-tools/-/grpc-tools-1.13.0.tgz#a4fea8eebce51fb9fec00055a3e52016dfd5af89" + integrity sha512-7CbkJ1yWPfX0nHjbYG58BQThNhbICXBZynzCUxCb3LzX5X9B3hQbRY2STiRgIEiLILlK9fgl0z0QVGwPCdXf5g== dependencies: "@mapbox/node-pre-gyp" "^1.0.5" @@ -376,10 +381,10 @@ ts-protoc-gen@^0.15.0: dependencies: google-protobuf "^3.15.5" -typescript@^5.1.6: - version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== +typescript@^5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== util-deprecate@^1.0.1: version "1.0.2" diff --git a/api/js/package.json b/api/js/package.json index c4f2e285..e8fd665f 100644 --- a/api/js/package.json +++ b/api/js/package.json @@ -4,14 +4,14 @@ "description": "Chirpstack JS and TS API", "license": "MIT", "devDependencies": { - "grpc-tools": "^1.12.4", + "grpc-tools": "^1.13.0", "ts-protoc-gen": "^0.15.0", - "typescript": "^5.1.6" + "typescript": "^5.8.3" }, "dependencies": { - "@grpc/grpc-js": "^1.10.4", + "@grpc/grpc-js": "^1.13.3", "@mapbox/node-pre-gyp": "^1.0.11", - "@types/google-protobuf": "^3.15.6", - "google-protobuf": "^3.21.2" + "@types/google-protobuf": "^3.15.12", + "google-protobuf": "^3.21.4" } } diff --git a/api/js/yarn.lock b/api/js/yarn.lock index 5f0c0122..f9aa5b97 100644 --- a/api/js/yarn.lock +++ b/api/js/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@grpc/grpc-js@^1.10.4": - version "1.10.9" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.10.9.tgz#468cc1549a3fe37b760a16745fb7685d91f4f10c" - integrity sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ== +"@grpc/grpc-js@^1.13.3": + version "1.13.3" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.13.3.tgz#6ad08d186c2a8651697085f790c5c68eaca45904" + integrity sha512-FTXHdOoPbZrBjlVLHuKbDZnsTxXv2BlHF57xw6LuThXacXvtkahEPED0CKMk6obZDf65Hv4k3z62eyPNpvinIg== dependencies: "@grpc/proto-loader" "^0.7.13" "@js-sdsl/ordered-map" "^4.4.2" @@ -93,10 +93,10 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@types/google-protobuf@^3.15.6": - version "3.15.6" - resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.6.tgz#674a69493ef2c849b95eafe69167ea59079eb504" - integrity sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw== +"@types/google-protobuf@^3.15.12": + version "3.15.12" + resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.12.tgz#eb2ba0eddd65712211a2b455dc6071d665ccf49b" + integrity sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ== "@types/node@>=13.7.0": version "20.4.8" @@ -265,15 +265,20 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -google-protobuf@^3.15.5, google-protobuf@^3.21.2: +google-protobuf@^3.15.5: version "3.21.2" resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4" integrity sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA== -grpc-tools@^1.12.4: - version "1.12.4" - resolved "https://registry.yarnpkg.com/grpc-tools/-/grpc-tools-1.12.4.tgz#a044c9e8157941033ea7a5f144c2dc9dc4501de4" - integrity sha512-5+mLAJJma3BjnW/KQp6JBjUMgvu7Mu3dBvBPd1dcbNIb+qiR0817zDpgPjS7gRb+l/8EVNIa3cB02xI9JLToKg== +google-protobuf@^3.21.4: + version "3.21.4" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" + integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ== + +grpc-tools@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/grpc-tools/-/grpc-tools-1.13.0.tgz#a4fea8eebce51fb9fec00055a3e52016dfd5af89" + integrity sha512-7CbkJ1yWPfX0nHjbYG58BQThNhbICXBZynzCUxCb3LzX5X9B3hQbRY2STiRgIEiLILlK9fgl0z0QVGwPCdXf5g== dependencies: "@mapbox/node-pre-gyp" "^1.0.5" @@ -523,10 +528,10 @@ ts-protoc-gen@^0.15.0: dependencies: google-protobuf "^3.15.5" -typescript@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +typescript@^5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== util-deprecate@^1.0.1: version "1.0.2" diff --git a/ui/package.json b/ui/package.json index f04fc0e9..1402dc75 100644 --- a/ui/package.json +++ b/ui/package.json @@ -18,12 +18,12 @@ "@fortawesome/fontawesome-svg-core": "^6.7.2", "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", + "ace-builds": "^1.36.4", "antd": "^5.23.3", "buffer": "^6.0.3", "chart.js": "^4.4.7", "chartjs-adapter-date-fns": "^3.0.0", "chartjs-chart-matrix": "^2.0.1", - "codemirror": "^5.65.16", "date-fns": "^3.6.0", "events": "^3.3.0", "google-palette": "^1.1.1", @@ -32,8 +32,8 @@ "leaflet": "^1.9.4", "leaflet.awesome-markers": "^2.0.5", "react": "^18.3.1", + "react-ace": "^13.0.0", "react-chartjs-2": "^5.2.0", - "react-codemirror2": "^8.0.0", "react-dom": "^18.3.1", "react-json-tree": "^0.19.0", "react-leaflet": "^4.2.1", @@ -43,7 +43,6 @@ }, "devDependencies": { "@testing-library/jest-dom": "^6.4.6", - "@types/codemirror": "^5.60.15", "@types/events": "^3.0.3", "@types/leaflet": "^1.9.12", "@types/leaflet.awesome-markers": "^2.0.28", @@ -56,7 +55,7 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "prettier": "^3.3.2", - "typescript": "^5.2.2", + "typescript": "^5.8.3", "vite": "^6.2.6" } } diff --git a/ui/src/components/CodeEditor.tsx b/ui/src/components/CodeEditor.tsx index 2182cf49..03df5149 100644 --- a/ui/src/components/CodeEditor.tsx +++ b/ui/src/components/CodeEditor.tsx @@ -1,10 +1,11 @@ import { useState, useEffect } from "react"; -import { Controlled as CodeMirror } from "react-codemirror2"; -import type { Editor, EditorChange } from "codemirror"; import { Form } from "antd"; +import AceEditor from "react-ace"; -import "codemirror/mode/javascript/javascript"; +import "ace-builds/src-noconflict/mode-javascript"; +import "ace-builds/src-noconflict/mode-json"; +import "ace-builds/src-noconflict/theme-github"; interface IProps { label?: string; @@ -12,6 +13,7 @@ interface IProps { required?: boolean; disabled?: boolean; tooltip?: string; + mode?: string; } function CodeEditor(props: IProps) { @@ -24,28 +26,25 @@ function CodeEditor(props: IProps) { setReloadKey(k => k + 1); }, [form, props]); - const handleChange = (editor: Editor, data: EditorChange, newCode: string) => { - setValue(newCode); + const onChange = (newValue: string) => { + setValue(newValue); form.setFieldsValue({ - [props.name]: newCode, + [props.name]: newValue, }); - }; - - const codeMirrorOptions = { - lineNumbers: true, - mode: "javascript", - theme: "base16-light", - readOnly: props.disabled, - }; + } return (