diff --git a/react-ui/README.md b/react-ui/README.md index c9208ec09d9febafb5034815c8b5e5c4563c396f..b6c8b0ba1ddecd92fd9d705d438f2de760a5085f 100755 --- a/react-ui/README.md +++ b/react-ui/README.md @@ -7,7 +7,5 @@ This is the UI for the goSDN project. It's a webapp written in react ### Requirements - Docker - - ### Author Matthias Feyll \ No newline at end of file diff --git a/react-ui/docker/wasm/Dockerfile b/react-ui/docker/wasm/Dockerfile deleted file mode 100755 index 34352115466597c52bf949c2ad6fdbfcb36ab60f..0000000000000000000000000000000000000000 --- a/react-ui/docker/wasm/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM golang:alpine3.20 - -WORKDIR /app - -ARG USER -ARG GROUP - -RUN mkdir /.cache && chmod -R 777 /.cache - -COPY ./docker/wasm/entrypoint.sh / - - -ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/react-ui/docker/wasm/entrypoint.sh b/react-ui/docker/wasm/entrypoint.sh deleted file mode 100755 index 934d259286d1b3e24a820614b2fbc1f0c461526a..0000000000000000000000000000000000000000 --- a/react-ui/docker/wasm/entrypoint.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env sh - -#go mod download && go mod verify -#ls -al $(go env GOROOT)/lib/ - -GOOS=js GOARCH=wasm "$@" - -cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" ./build/wasm -cp "./src/shared/utils/yang_parser/go/assets/wasm_exec.d.ts.generated" ./build/wasm/wasm_exec.d.ts diff --git a/react-ui/package.json b/react-ui/package.json index 951b1c2168a2315e80a03662f9de9c34a36f2fa3..22017e5942f391a82b4c465ef46e0e85b5785f03 100755 --- a/react-ui/package.json +++ b/react-ui/package.json @@ -16,6 +16,7 @@ "react": "^18.3.1", "react-bootstrap": "^2.10.2", "react-dom": "^18.3.1", + "react-error-boundary": "^4.1.2", "react-i18next": "^15.0.0", "react-json-view": "^1.21.3", "react-redux": "^9.1.2", @@ -32,8 +33,6 @@ "build": "tsc && vite build", "test": "react-scripts test", "build::api": "npx @rtk-query/codegen-openapi ./scripts/openapi-config.json", - "build::wasm": "./scripts/build-wasm.sh", - "build::cpp": "./scripts/build-cpp.sh", "lint": "eslint src", "lint::fix": "eslint src --fix", "clean": "./scripts/clean.sh" @@ -84,8 +83,6 @@ "typescript": "^5.5.3", "typescript-eslint": "^8.0.1", "vite": "^5.4.9", - "vite-bundle-visualizer": "^1.2.1", - "vite-plugin-top-level-await": "^1.4.4", - "vite-plugin-wasm": "^3.3.0" + "vite-bundle-visualizer": "^1.2.1" } } diff --git a/react-ui/scripts/build-wasm.sh b/react-ui/scripts/build-wasm.sh deleted file mode 100755 index 3b4ab1ab5d0a5682026412cc8683cd4576a87968..0000000000000000000000000000000000000000 --- a/react-ui/scripts/build-wasm.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env sh - -GO_FILE=src/shared/utils/yang_parser/go -YANG_MODEL_PATH=$GO_FILE/openconfig - -OUTPUT_PATH=/build/wasm - -if [ ! -d $OUTPUT_PATH ]; then - mkdir -p $(pwd)/$OUTPUT_PATH -fi - -if [ ! -d $YANG_MODEL_PATH ]; then - mkdir $YANG_MODEL_PATH -fi - -rm $YANG_MODEL_PATH/yang_models.go -ln $(pwd)/../models/generated/openconfig/yang.go $YANG_MODEL_PATH/yang_models.go -echo 'Succesfully linked yang model' - -DOCKER_TAG=gosdn_react_ui_wasm -docker build \ - --no-cache \ - -t $DOCKER_TAG \ - -f ./docker/wasm/Dockerfile \ - --build-arg USER=$(id -u) \ - --build-arg GROUP=$(id -g) \ - . -DOCKER_PATH=/app -OUTPUT_FILE=$DOCKER_PATH$OUTPUT_PATH/ - -docker run \ - --rm \ - -v $(pwd):$DOCKER_PATH \ - -u $(id -u):$(id -g) \ - -w $DOCKER_PATH \ - $DOCKER_TAG \ - go build -C $GO_FILE -ldflags="-s -w" -o $OUTPUT_FILE/yang_parser.wasm - diff --git a/react-ui/src/components/devices/routines/mne.routine.ts b/react-ui/src/components/devices/routines/mne.routine.ts index 378e6e8cfa71ea11713c74cbe6908d066d393965..7de1d18149c35c2bfbe47582d479a5736fa7f1b1 100755 --- a/react-ui/src/components/devices/routines/mne.routine.ts +++ b/react-ui/src/components/devices/routines/mne.routine.ts @@ -32,8 +32,13 @@ export const fetchSelectedMneThunk = createAsyncThunk( async (device: Device, thunkApi) => { const { user } = thunkApi.getState() as RootState + if (!user.user?.roles || !device.id) { + throw new Error('Background MNE fetching failed! User data is missing. Reload page or logout and login again') + // TODO + } + const payload: NetworkElementServiceGetApiArg = { - pid: Object.keys(user?.user.roles)[0], + pid: Object.keys(user.user.roles)[0], timestamp: new Date().getTime().toString(), mneid: device.id, } diff --git a/react-ui/src/components/devices/view/device.view.tabs.tsx b/react-ui/src/components/devices/view/device.view.tabs.tsx index d492c90b7453caa99a48d00a63cbaca2642b5722..2929f9b64855359fa19ea9c0e17d90f5af79bb61 100755 --- a/react-ui/src/components/devices/view/device.view.tabs.tsx +++ b/react-ui/src/components/devices/view/device.view.tabs.tsx @@ -14,7 +14,7 @@ export const DeviceViewTabs = (activeTab: DeviceViewTabValues) => { const metadataTab = () => { return ( <div> - {selectedDevice.mne.name} + {selectedDevice!.mne!.name} </div> ) } diff --git a/react-ui/src/components/login/layouts/login.layout.tsx b/react-ui/src/components/login/layouts/login.layout.tsx index 323941a67a811d7717da4ca7ef2689e530f5f410..556dc6de436397b283bd426041b1d08749cf505a 100755 --- a/react-ui/src/components/login/layouts/login.layout.tsx +++ b/react-ui/src/components/login/layouts/login.layout.tsx @@ -4,7 +4,7 @@ import { useNavigate, useOutlet } from "react-router-dom"; import LoginView from "../view/login.view"; -export const LoginLayout = ({ children }) => { +export const LoginLayout = () => { const outlet = useOutlet(); const navigate = useNavigate(); const { isAuthenticated } = useAuth(); diff --git a/react-ui/src/i18n/locales/en/translations.json b/react-ui/src/i18n/locales/en/translations.json index c5e03754834f6639d99dd37c69aa41f7c85e30e4..46b76563c7d78355e9484e49d344f4132bf3766d 100755 --- a/react-ui/src/i18n/locales/en/translations.json +++ b/react-ui/src/i18n/locales/en/translations.json @@ -7,6 +7,9 @@ }, "toast": { "copied": "Copied to clipboard" + }, + "menu_item": { + "logout": "Logout" } }, "json_viewer": { diff --git a/react-ui/src/index.tsx b/react-ui/src/index.tsx index 186138b891b54367e8c4d6d9f9de976ae8f13845..8383248cea22fc89c4ba1c9f5248458f7fa150ec 100755 --- a/react-ui/src/index.tsx +++ b/react-ui/src/index.tsx @@ -1,8 +1,8 @@ -import { MenuProvider } from '@provider/menu/menu.provider' import { UtilsProvider } from '@provider/utils.provider' import i18next from 'i18next' import React from 'react' import ReactDOM from 'react-dom/client' +import { ErrorBoundary } from "react-error-boundary" import { I18nextProvider } from 'react-i18next' import { Provider } from 'react-redux' import { @@ -16,20 +16,21 @@ import { router } from './routes' import './shared/icons/icons' import { persistor, store } from './stores' + ReactDOM.createRoot(document.getElementById("root")).render( <React.StrictMode> - <Provider store={store}> - <PersistGate loading={null} persistor={persistor}> - <I18nextProvider i18n={i18next}> - <UtilsProvider> - <MenuProvider> + <ErrorBoundary fallback={<div>Something went wrong</div>}> + <Provider store={store}> + <PersistGate loading={null} persistor={persistor}> + <I18nextProvider i18n={i18next}> + <UtilsProvider> <ToastContainer /> <RouterProvider router={router} /> - </MenuProvider> - </UtilsProvider> - </I18nextProvider> - </PersistGate> - </Provider> + </UtilsProvider> + </I18nextProvider> + </PersistGate> + </Provider> + </ErrorBoundary> </React.StrictMode> ); diff --git a/react-ui/src/shared/components/json_viewer/reducer/json_viewer.reducer.ts b/react-ui/src/shared/components/json_viewer/reducer/json_viewer.reducer.ts index cdd0351b14300c438493e81e97ad4936efa33527..0779d0e184b44f7a018cde3344f7f6f605cd2f17 100755 --- a/react-ui/src/shared/components/json_viewer/reducer/json_viewer.reducer.ts +++ b/react-ui/src/shared/components/json_viewer/reducer/json_viewer.reducer.ts @@ -59,7 +59,6 @@ const JsonViewerSlice = createSlice({ if (i === -1) { - console.log('new ' + payload.key + " => " + payload.nested + ' end') // create new collapse const newItem = { identifier, collapsed: true } state.collapseContainer = [...state.collapseContainer, newItem] diff --git a/react-ui/src/shared/error/Error.ts b/react-ui/src/shared/error/Error.ts new file mode 100644 index 0000000000000000000000000000000000000000..b4c87860158152bd141ddce2b81fb925894946ef --- /dev/null +++ b/react-ui/src/shared/error/Error.ts @@ -0,0 +1 @@ +export type BasicError = Error; \ No newline at end of file diff --git a/react-ui/src/shared/error/FetchError.ts b/react-ui/src/shared/error/FetchError.ts new file mode 100644 index 0000000000000000000000000000000000000000..a1655e19d10e98fce9e33b3e9e66d7f9f73c4bde --- /dev/null +++ b/react-ui/src/shared/error/FetchError.ts @@ -0,0 +1,5 @@ +import { BasicError } from "./Error"; + +export interface FetchError extends BasicError { + action: string +} \ No newline at end of file diff --git a/react-ui/src/shared/helper/interfaces.ts b/react-ui/src/shared/helper/interfaces.ts new file mode 100644 index 0000000000000000000000000000000000000000..97a822706f9cc4aa75291f34f9ac5a1c391fd32d --- /dev/null +++ b/react-ui/src/shared/helper/interfaces.ts @@ -0,0 +1,5 @@ +import React from "react"; + +export interface BasicProp { + children: React.ReactNode +} \ No newline at end of file diff --git a/react-ui/src/shared/layouts/basic.layout.tsx b/react-ui/src/shared/layouts/basic.layout.tsx index 640af3e1ba3948e61cf80977f865b4db9cd9a8ea..e3728ac6d85851f926fcd675cde2694421865297 100755 --- a/react-ui/src/shared/layouts/basic.layout.tsx +++ b/react-ui/src/shared/layouts/basic.layout.tsx @@ -4,8 +4,6 @@ import { useOutlet } from "react-router-dom"; export const BasicLayout = () => { const outlet = useOutlet(); - - return ( <AuthProvider> {outlet} diff --git a/react-ui/src/shared/layouts/protected.layout/protected.layout.scss b/react-ui/src/shared/layouts/protected.layout/protected.layout.scss index ffc4acf0d85109e0c846c8131aedb156a808bb68..07b38d5a73d1102bebf4e4b0f82e8cc2bc10a799 100755 --- a/react-ui/src/shared/layouts/protected.layout/protected.layout.scss +++ b/react-ui/src/shared/layouts/protected.layout/protected.layout.scss @@ -1,4 +1,4 @@ -@import '/src/shared/style/colors.scss'; +@import "/src/shared/style/colors.scss"; $sidebar-width: 4.5em; diff --git a/react-ui/src/shared/layouts/protected.layout/protected.layout.tsx b/react-ui/src/shared/layouts/protected.layout/protected.layout.tsx index 03a188796368e0b9dd1ff9eff7788459e30858f8..0708d87f1fef3cdf6922a2012c6a91d205fec993 100755 --- a/react-ui/src/shared/layouts/protected.layout/protected.layout.tsx +++ b/react-ui/src/shared/layouts/protected.layout/protected.layout.tsx @@ -4,6 +4,7 @@ import { faCircleUser, faRightFromBracket } from "@fortawesome/free-solid-svg-ic import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { useAppDispatch, useAppSelector } from '@hooks'; import { useAuth } from "@provider/auth.provider"; +import { MenuProvider } from '@provider/menu/menu.provider'; import { DEVICE_URL, LOGIN_URL } from '@routes'; import { fetchUser } from '@shared/reducer/user.reducer'; import React, { useEffect } from "react"; @@ -71,7 +72,7 @@ export const ProtectedLayout = () => { const VerticalSidebar = () => { return ( - <div className="d-flex fixed-top z-n1 flex-column flex-shrink-0 bg-white sidebar justify-content-end border-end border-dark py-3"> + <div className="d-flex fixed-top flex-column flex-shrink-0 bg-white sidebar justify-content-end border-end border-dark py-3 z-2"> <FontAwesomeIcon className="clickable icon" icon={faRightFromBracket} onClick={logout} size="2x" /> </div> ) @@ -79,7 +80,7 @@ export const ProtectedLayout = () => { const HorizontalNavbar = () => { return ( - <nav className="bg-white border-bottom border-dark py-2 d-flex align-items-center"> + <nav className="bg-white border-bottom border-dark py-2 d-flex align-items-center z-3 position-relative"> <Link to="/"><img src={logo} className="mx-4 me-5" width={25} alt="logo" /></Link> <Link className={"head-links" + handleActiveLink(DEVICE_URL)} to="/">{t('protected.link.device_list')}</Link> <Link className={"head-links" + handleActiveLink('/map')} to="/">{t('protected.link.map')}</Link> @@ -104,11 +105,13 @@ export const ProtectedLayout = () => { return ( <div> - {HorizontalNavbar()} - {VerticalSidebar()} - <div className='main-content'> - <Outlet /> - </div> + <MenuProvider> + {HorizontalNavbar()} + {VerticalSidebar()} + <div className='main-content'> + <Outlet /> + </div> + </MenuProvider> </div> ) }; \ No newline at end of file diff --git a/react-ui/src/shared/provider/auth.provider.tsx b/react-ui/src/shared/provider/auth.provider.tsx index faf29847f3dc2f217bc37d77261245fd3496a579..830a4d47d24aafab94075d89a0e0e716d1cf61d1 100755 --- a/react-ui/src/shared/provider/auth.provider.tsx +++ b/react-ui/src/shared/provider/auth.provider.tsx @@ -1,5 +1,6 @@ import { AuthServiceLoginApiArg, AuthServiceLoginApiResponse, useAuthServiceLoginMutation } from "@api/api"; import { getCookieValue } from "@helper/coookie"; +import { BasicProp } from "@helper/interfaces"; import { useAppDispatch, useAppSelector } from "@hooks"; import { DEVICE_URL, LOGIN_URL } from "@routes"; import { jwtDecode } from "jwt-decode"; @@ -11,14 +12,7 @@ interface AuthProviderType { login: (username: string, password: string) => void, logout: () => void, // todo figure out the type of loginProperties - loginProperties: { - isLoading: boolean, - isSuccess: boolean, - isError: boolean, - error: object, - data: object, - reset: () => void - } | undefined, + loginProperties: any, isAuthenticated: () => boolean } @@ -29,7 +23,7 @@ const AuthContext = createContext<AuthProviderType>({ isAuthenticated: () => { throw new Error("login function not implemented"); }, }); -export const AuthProvider = ({ children }) => { +export const AuthProvider: React.FC<BasicProp> = ({ children }) => { const dispatch = useAppDispatch() const navigate = useNavigate() const { username } = useAppSelector(state => state.user) @@ -75,7 +69,7 @@ export const AuthProvider = ({ children }) => { dispatch(setToken({ token: response.token, username })); navigate(DEVICE_URL); - }).catch((error) => { + }).catch(() => { // determine whether 500 or 401 err }); } @@ -102,7 +96,7 @@ export const AuthProvider = ({ children }) => { // TODO: purge other information } - const value = useMemo( + const value = useMemo<AuthProviderType>( () => ({ login: executeLogin, logout, diff --git a/react-ui/src/shared/provider/menu/menu.provider.tsx b/react-ui/src/shared/provider/menu/menu.provider.tsx index 3d3aebc4ae8ba82748a2def770bb2d8c5ea652c0..0cfc61f68128b8dc2910c27525106b16c1eb3885 100644 --- a/react-ui/src/shared/provider/menu/menu.provider.tsx +++ b/react-ui/src/shared/provider/menu/menu.provider.tsx @@ -1,6 +1,9 @@ -import { IconDefinition } from "@fortawesome/free-solid-svg-icons"; +import { faRightFromBracket, IconDefinition } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { BasicProp } from "@helper/interfaces"; +import { useAuth } from "@provider/auth.provider"; import React, { createContext, useContext, useEffect, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; import './menu.provider.scss'; interface MenuSubscription { @@ -31,21 +34,38 @@ interface SubscriptionValue { } -export const MenuProvider = ({ children }) => { +export const MenuProvider: React.FC<BasicProp> = ({ children }) => { const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 }); const [showMenu, setShowMenu] = useState(false); const [subscribedTargets, setSubscribedTargets] = useState<Array<SubscriptionValue>>([]) + const { logout } = useAuth() - const [menuItems, setMenuItems] = useState<Array<SubscriptionValue>>([]); + const { t } = useTranslation('common') + + const globalMenuItems: SubscriptionValue = { + actions: [{ + key: t('global.menu_item.logout'), + icon: faRightFromBracket, + action: logout + }], + target: document.getRootNode() as HTMLElement + } + + const [menuItems, _setMenuItems] = useState<Array<SubscriptionValue>>([]); const [clickedHtmlElement, setClickedHtmlElement] = useState<HTMLElement>() - const handleContextMenu = (event) => { + + const setMenuItems = (menuItems: Array<SubscriptionValue>) => { + _setMenuItems([...menuItems, globalMenuItems]) + } + + const handleContextMenu = (event: React.MouseEvent<HTMLElement>) => { event.preventDefault(); - const targets = subscribedTargets.filter(({ target }) => target.contains(event.target)) + const targets = subscribedTargets.filter(({ target }) => target.contains(event.target as HTMLElement)) setMenuPosition({ top: event.pageY, left: event.pageX }); setMenuItems(targets) - setClickedHtmlElement(event.target) + setClickedHtmlElement(event.target as HTMLElement) displayMenu() }; @@ -95,11 +115,12 @@ export const MenuProvider = ({ children }) => { { menuItems.map((item, i) => { // for each new action array (for each new subscription entity) draw a seperator line except the last action - const seperator = i < menuItems.length - 1 ? (<li><hr className="dropdown-divider"></hr></li>) : (<React.Fragment key={i}></React.Fragment>) + const deviderHTML = (<li key={i}><hr className="dropdown-divider"></hr></li>); + const seperator = i < menuItems.length - 1 ? deviderHTML : (<React.Fragment key={i}></React.Fragment>) const dropdownItems = item.actions.map(({ action, icon, key }) => { - const disabled = !(clickedHtmlElement instanceof HTMLElement) || !clickedHtmlElement?.textContent + const disabled = !(clickedHtmlElement instanceof HTMLElement) return ( <button className="menu-button dropdown-item" key={key + " " + i} disabled={disabled} onClick={() => action(clickedHtmlElement)}> diff --git a/react-ui/src/shared/provider/utils.provider.tsx b/react-ui/src/shared/provider/utils.provider.tsx index e9a83034eb2a618eeb4f1a3261caafd63ff083a3..6f6775343ec94b2e7fd2773ccf837fc2f4bf1f9b 100644 --- a/react-ui/src/shared/provider/utils.provider.tsx +++ b/react-ui/src/shared/provider/utils.provider.tsx @@ -1,4 +1,5 @@ -import { createContext, useContext, useMemo } from "react"; +import { BasicProp } from "@helper/interfaces"; +import React, { createContext, useContext, useMemo } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "react-toastify"; @@ -12,7 +13,7 @@ const UtilsContext = createContext<UtilsProviderType>({ } }) -export const UtilsProvider = ({ children }) => { +export const UtilsProvider: React.FC<BasicProp> = ({ children }) => { const { t } = useTranslation('common'); const value = useMemo<UtilsProviderType>(() => { diff --git a/react-ui/src/shared/utils/yang_parser/go/.gitignore b/react-ui/src/shared/utils/yang_parser/go/.gitignore deleted file mode 100755 index 4be9e9e3792b0008a0d70015d858767f9811a37f..0000000000000000000000000000000000000000 --- a/react-ui/src/shared/utils/yang_parser/go/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/openconfig \ No newline at end of file diff --git a/react-ui/src/shared/utils/yang_parser/go/assets/wasm_exec.d.ts.generated b/react-ui/src/shared/utils/yang_parser/go/assets/wasm_exec.d.ts.generated deleted file mode 100755 index ab9e8000904316f2b34c428cbc388f743915021c..0000000000000000000000000000000000000000 --- a/react-ui/src/shared/utils/yang_parser/go/assets/wasm_exec.d.ts.generated +++ /dev/null @@ -1,18 +0,0 @@ -declare namespace globalThis { - let fs: FileSystem - let process: Process - let crypto: Crypto - let TextEncoder: { new (encoding: string): TextEncoder } - let TextDecoder: { new (encoding: string): TextDecoder } - let Go: typeof Go -} - -interface Go { - argv: string[] - env: { [envKey: string]: string } - exit: (code: number) => void - importObject: WebAssembly.Imports - exited: boolean - mem: DataView - run(instance: WebAssembly.Instance): Promise<void> -} diff --git a/react-ui/src/shared/utils/yang_parser/go/go.env b/react-ui/src/shared/utils/yang_parser/go/go.env deleted file mode 100755 index 6a9eb46ee6629b5254764c43213f9ca7367efc56..0000000000000000000000000000000000000000 --- a/react-ui/src/shared/utils/yang_parser/go/go.env +++ /dev/null @@ -1 +0,0 @@ -GOPROXY="direct" \ No newline at end of file diff --git a/react-ui/src/shared/utils/yang_parser/go/go.mod b/react-ui/src/shared/utils/yang_parser/go/go.mod deleted file mode 100755 index cd6a54898c6958c580fa18d9e819f28cb02b8264..0000000000000000000000000000000000000000 --- a/react-ui/src/shared/utils/yang_parser/go/go.mod +++ /dev/null @@ -1,18 +0,0 @@ -module yang_parser - -go 1.21.0 - -require ( - github.com/golang/glog v1.2.2 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect - github.com/openconfig/gnmi v0.11.0 // indirect - github.com/openconfig/goyang v1.6.0 // indirect - github.com/openconfig/ygot v0.29.20 // indirect - golang.org/x/net v0.28.0 // indirect - golang.org/x/sys v0.24.0 // indirect - golang.org/x/text v0.17.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect - google.golang.org/grpc v1.67.1 // indirect - google.golang.org/protobuf v1.35.1 // indirect -) diff --git a/react-ui/src/shared/utils/yang_parser/go/go.sum b/react-ui/src/shared/utils/yang_parser/go/go.sum deleted file mode 100755 index fe012ebb714657b5cdf9980027c1437cd813d854..0000000000000000000000000000000000000000 --- a/react-ui/src/shared/utils/yang_parser/go/go.sum +++ /dev/null @@ -1,171 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= -github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/openconfig/gnmi v0.10.0/go.mod h1:Y9os75GmSkhHw2wX8sMsxfI7qRGAEcDh8NTa5a8vj6E= -github.com/openconfig/gnmi v0.11.0 h1:H7pLIb/o3xObu3+x0Fv9DCK7TH3FUh7mNwbYe+34hFw= -github.com/openconfig/gnmi v0.11.0/go.mod h1:9oJSQPPCpNvfMRj8e4ZoLVAw4wL8HyxXbiDlyuexCGU= -github.com/openconfig/goyang v0.0.0-20200115183954-d0a48929f0ea/go.mod h1:dhXaV0JgHJzdrHi2l+w0fZrwArtXL7jEFoiqLEdmkvU= -github.com/openconfig/goyang v1.6.0 h1:JjnPbLY1/y28VyTO67LsEV0TaLWNiZyDcsppGq4F4is= -github.com/openconfig/goyang v1.6.0/go.mod h1:sdNZi/wdTZyLNBNfgLzmmbi7kISm7FskMDKKzMY+x1M= -github.com/openconfig/grpctunnel v0.0.0-20220819142823-6f5422b8ca70/go.mod h1:OmTWe7RyZj2CIzIgy4ovEBzCLBJzRvWSZmn7u02U9gU= -github.com/openconfig/ygot v0.6.0/go.mod h1:o30svNf7O0xK+R35tlx95odkDmZWS9JyWWQSmIhqwAs= -github.com/openconfig/ygot v0.29.20 h1:XHLpwCN91QuKc2LAvnEqtCmH8OuxgLlErDhrdl2mJw8= -github.com/openconfig/ygot v0.29.20/go.mod h1:K8HbrPm/v8/emtGQ9+RsJXx6UPKC5JzS/FqK7pN+tMo= -github.com/pborman/getopt v1.1.0/go.mod h1:FxXoW1Re00sQG/+KIkuSqRL/LwQgSkv7uyac+STFsbk= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/protocolbuffers/txtpbfmt v0.0.0-20220608084003-fc78c767cd6a/go.mod h1:KjY0wibdYKc4DYkerHSbguaf3JeIPGhNJBp2BNiFH78= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= -google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/react-ui/src/shared/utils/yang_parser/go/yang_parser.go b/react-ui/src/shared/utils/yang_parser/go/yang_parser.go deleted file mode 100755 index 4314d0eb14fd3201ccf046528f2fba7605db3acd..0000000000000000000000000000000000000000 --- a/react-ui/src/shared/utils/yang_parser/go/yang_parser.go +++ /dev/null @@ -1,39 +0,0 @@ -package main - -import ( - "fmt" - "syscall/js" - "yang_parser/openconfig" - - "github.com/openconfig/ygot/ygot" -) - -func ParseYANGFile(this js.Value, p []js.Value) interface{} { - device := &openconfig.Device{} - - yangContent := p[0].String() - - if err := openconfig.Unmarshal([]byte(yangContent), device); err != nil { - panic(fmt.Sprintf("Cannot unmarshal JSON: %v", err)) - } - - json, err := ygot.EmitJSON(device, &ygot.EmitJSONConfig{ - Format: ygot.RFC7951, - Indent: " ", - RFC7951Config: &ygot.RFC7951JSONConfig{ - AppendModuleName: true, - }, - }) - - if err != nil { - panic(fmt.Sprintf("Cannot emit json: %v ", err)) - } - - return js.ValueOf(string(json)) -} - -func main() { - js.Global().Set("parseYANG", js.FuncOf(ParseYANGFile)) - - select {} -} diff --git a/react-ui/src/shared/utils/yang_parser/yang_parser.ts b/react-ui/src/shared/utils/yang_parser/yang_parser.ts deleted file mode 100755 index d6ca3201cc4a05e14ffbd3d3a4d6dcd9c519c2c0..0000000000000000000000000000000000000000 --- a/react-ui/src/shared/utils/yang_parser/yang_parser.ts +++ /dev/null @@ -1,38 +0,0 @@ -import '@build/wasm/wasm_exec.js' - -import { useEffect, useRef } from 'react' - -export const useYangParser = () => { - const wasm = useRef<Promise<ArrayBuffer>>() - const go = useRef(new Go()) - - useEffect(() => { - wasm.current = fetch('/build/wasm/yang_parser.wasm') - .then((response) => response.arrayBuffer()) - .then((bytes) => bytes) - }, []) - - /** - * Parses yang model that the backend responses to a JSON object - * - * @param uniformYang - * @returns - */ - const parse = async (modifiedYang: string): Promise<JSON> => { - try { - const bytes = await wasm.current - const { instance } = await WebAssembly.instantiate(bytes!, go.current.importObject) - go.current.run(instance) - - const jsonString = parseYANG(modifiedYang) - return JSON.parse(jsonString) - } catch (err) { - console.log('Error' + err) - return Promise.reject(err) - } - } - - return { - parse, - } -} diff --git a/react-ui/tsconfig.json b/react-ui/tsconfig.json index 10cd2001261603ebd4bf460ecf7b28e6267dc709..c679b7100669ddf234324cecde3dd37ab94c95d7 100755 --- a/react-ui/tsconfig.json +++ b/react-ui/tsconfig.json @@ -45,5 +45,4 @@ "scripts/test.ts", "src/shared/utils/yang_parser/go/assets/wasm_exec.d.ts.generated" ] - //"references": [{ "path": "./tsconfig.node.json" }] } diff --git a/react-ui/vite.config.mjs b/react-ui/vite.config.mjs index 3bf58a28659e273352a47c6ebf779d99a28f5960..fefafe05a692ebf39a8879ac440fcff0f549ec60 100755 --- a/react-ui/vite.config.mjs +++ b/react-ui/vite.config.mjs @@ -1,13 +1,12 @@ import react from '@vitejs/plugin-react' import { defineConfig } from 'vite' -import topLevelAwait from 'vite-plugin-top-level-await' -import wasm from 'vite-plugin-wasm' export default defineConfig({ - plugins: [react(), wasm(), topLevelAwait()], + plugins: [react()], build: { sourcemap: true, }, + // develop server server: { port: 3000, proxy: { diff --git a/react-ui/yarn.lock b/react-ui/yarn.lock index d60413ed6af69d4c1b18084ecf364ab95ed3c5dd..c8a068d685d5a66d3973407eaec89a9d179fe4a7 100755 --- a/react-ui/yarn.lock +++ b/react-ui/yarn.lock @@ -2009,11 +2009,6 @@ "@rollup/pluginutils" "^3.1.0" magic-string "^0.25.7" -"@rollup/plugin-virtual@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz#17e17eeecb4c9fa1c0a6e72c9e5f66382fddbb82" - integrity sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A== - "@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" @@ -2253,80 +2248,6 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" -"@swc/core-darwin-arm64@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.36.tgz#f50ecd4db72a8759c67c1eb93f942c6331e6cfe9" - integrity sha512-8vDczXzCgv3ceTPhEivlpGprN44YlrCK1nbfU9g2TrhV/Aiqi09W/eM5zLesdoM1Z3mJl492gc/8nlTkpDdusw== - -"@swc/core-darwin-x64@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.36.tgz#14c7e5c0a9bee4ffcf05a5a62caa179ee01a68c2" - integrity sha512-Pa2Gao7+Wf5m3SsK4abKRtd48AtoUnJInvaC3d077swBfgZjbjUbQvcpdc2dOeQtWwo49rFqUZJonMsL0jnPgQ== - -"@swc/core-linux-arm-gnueabihf@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.36.tgz#19d9a66606ae9fc09f3e087a1ef49d75ffd769e7" - integrity sha512-3YsMWd7V+WZEjbfBnLkkz/olcRBa8nyoK0iIOnNARJBMcYaJxjkJSMZpmSojCnIVwvjA1N83CPAbUL+W+fCnHg== - -"@swc/core-linux-arm64-gnu@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.36.tgz#9834e507e75d1689913fc56d401d5921eb75be67" - integrity sha512-lqM3aBB7kJazJYOwHeA5OGNLqXoQPZ/76b3dV+XcjN1GhD0CcXz6mW5PRYVin6OSN1eKrKBKJjtDA1mqADDEvw== - -"@swc/core-linux-arm64-musl@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.36.tgz#548abbec7581f06ab9f38bd6c289bd7fc9983452" - integrity sha512-bqei2YDzvUfG0pth5W2xJaj0eG4XWYk0d/NJ75vBX6bkIzK6dC8iuKQ41jOfUWonnrAs7rTDDJW0sTn/evvRdw== - -"@swc/core-linux-x64-gnu@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.36.tgz#d2a4a8edcdb3b7646dade9783d6502d01ff9364c" - integrity sha512-03maXTUyaBjeCxlDltmdzHje1ryQt1C4OWmmNgSSRXjLb+GNnAenwOJMSrcvHP/aNClD2pwsFCnYKDGy+sYE6w== - -"@swc/core-linux-x64-musl@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.36.tgz#ea4197cbcc23b1202cdbec82a05bee9b29aa341b" - integrity sha512-XXysqLkvjtQnXm1zHqLhy00UYPv/gk5OtwR732X+piNisnEbcJBqI8Qp9O7YvLWllRcoP8IMBGDWLGdGLSpViA== - -"@swc/core-win32-arm64-msvc@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.36.tgz#1b100b809457d0ed5710956d7efb4fd0427dc2c8" - integrity sha512-k7+dmb13a/zPw+E4XYfPmLZFWJgcOcBRKIjYl9nQErtYsgsg3Ji6TBbsvJVETy23lNHyewZ17V5Vq6NzaG0hzg== - -"@swc/core-win32-ia32-msvc@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.36.tgz#577e7f25a7a8496c16e9b14486cd849765bccba5" - integrity sha512-ridD3ay6YM2PEYHZXXFN+edYEv0FOynaqOBP+NSnGNHA35azItIjoIe+KNi4WltGtAjpKCHSpjGCNfna12wdYQ== - -"@swc/core-win32-x64-msvc@1.7.36": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.36.tgz#f85ace043925a746ff40af2da1ff9ff9760525bb" - integrity sha512-j1z2Z1Ln9d0E3dHsPkC1K9XDh0ojhRPwV+GfRTu4D61PE+aYhYLvbJC6xPvL4/204QrStRS7eDu3m+BcDp3rgQ== - -"@swc/core@^1.7.0": - version "1.7.36" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.36.tgz#369b67cfe7be039dac2ab2180b44da8f2f8c2af0" - integrity sha512-bu7ymMX+LCJOSSrKank25Jaq66ymLVA9fOUuy4ck3/6rbXdLw+pIJPnIDKQ9uNcxww8KDxOuJk9Ui9pqR+aGFw== - dependencies: - "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.13" - optionalDependencies: - "@swc/core-darwin-arm64" "1.7.36" - "@swc/core-darwin-x64" "1.7.36" - "@swc/core-linux-arm-gnueabihf" "1.7.36" - "@swc/core-linux-arm64-gnu" "1.7.36" - "@swc/core-linux-arm64-musl" "1.7.36" - "@swc/core-linux-x64-gnu" "1.7.36" - "@swc/core-linux-x64-musl" "1.7.36" - "@swc/core-win32-arm64-msvc" "1.7.36" - "@swc/core-win32-ia32-msvc" "1.7.36" - "@swc/core-win32-x64-msvc" "1.7.36" - -"@swc/counter@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" - integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== - "@swc/helpers@^0.5.0": version "0.5.12" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.12.tgz#37aaca95284019eb5d2207101249435659709f4b" @@ -2334,13 +2255,6 @@ dependencies: tslib "^2.4.0" -"@swc/types@^0.1.13": - version "0.1.13" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.13.tgz#441734f8bfa6e9e738f1c68e98be6da282ecc7db" - integrity sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q== - dependencies: - "@swc/counter" "^0.1.3" - "@testing-library/jest-dom@^6.4.8": version "6.4.8" resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz#9c435742b20c6183d4e7034f2b329d562c079daa" @@ -8993,6 +8907,13 @@ react-dom@^18.3.1: loose-envify "^1.1.0" scheduler "^0.23.2" +react-error-boundary@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.1.2.tgz#bc750ad962edb8b135d6ae922c046051eb58f289" + integrity sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag== + dependencies: + "@babel/runtime" "^7.12.5" + react-error-overlay@^6.0.11: version "6.0.11" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" @@ -10882,11 +10803,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -10921,20 +10837,6 @@ vite-bundle-visualizer@^1.2.1: rollup-plugin-visualizer "^5.11.0" tmp "^0.2.1" -vite-plugin-top-level-await@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.4.4.tgz#4900e06bfb7179de20aaa9b4730d04022a9e259e" - integrity sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw== - dependencies: - "@rollup/plugin-virtual" "^3.0.2" - "@swc/core" "^1.7.0" - uuid "^10.0.0" - -vite-plugin-wasm@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/vite-plugin-wasm/-/vite-plugin-wasm-3.3.0.tgz#2908ef2529bf8f33f4e549c8c6fda26ad273ca15" - integrity sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg== - vite@^5.4.9: version "5.4.9" resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.9.tgz#215c80cbebfd09ccbb9ceb8c0621391c9abdc19c"