From 5e33a5965f618cadca35dbb3cf6f24c52c72e00e Mon Sep 17 00:00:00 2001 From: Matthias Feyll <matthias.feyll@stud.h-da.de> Date: Mon, 10 Mar 2025 10:02:10 +0000 Subject: [PATCH] UI-Integration: add first version to master See merge request danet/gosdn!1206 Co-authored-by: matthiasf <matthias.feyll@@stud.h-da.de> Co-authored-by: Matthias Feyll <matthias.feyll@gmail.com> --- .gitlab/ci/.build-binaries.yml | 1 + .gitlab/ci/.build-container-images.yml | 10 + .gitmodules | 3 + Makefile | 2 +- README.md | 7 + .../gnmi/proto/collector/collector.pb.go | 71 +- .../openconfig/gnmi/proto/gnmi/gnmi.pb.go | 978 +- .../gnmi/proto/gnmi_ext/gnmi_ext.pb.go | 277 +- .../openconfig/gnmi/proto/target/target.pb.go | 117 +- .../gnmi/testing/fake/proto/fake.pb.go | 883 +- api/go/gosdn/app/app.pb.go | 142 +- api/go/gosdn/app/app.pb.gw.go | 104 +- .../configurationmanagement.pb.go | 140 +- .../configurationmanagement.pb.gw.go | 132 +- api/go/gosdn/conflict/conflict.pb.go | 47 +- api/go/gosdn/csbi/csbi.pb.go | 357 +- .../gosdn/networkelement/networkelement.pb.go | 1219 +- .../networkelement/networkelement.pb.gw.go | 609 +- .../plugin-internal/plugin-internal.pb.go | 284 +- .../plugin-internal/plugin-internal.pb.gw.go | 163 + .../plugin-registry/plugin-registry.pb.go | 344 +- .../plugin-registry/plugin-registry.pb.gw.go | 162 + api/go/gosdn/plugin/plugin.pb.go | 553 +- api/go/gosdn/pnd/pnd.pb.go | 322 +- api/go/gosdn/pnd/pnd.pb.gw.go | 229 +- api/go/gosdn/rbac/rbac.pb.go | 140 +- api/go/gosdn/rbac/rbac.pb.gw.go | 121 +- api/go/gosdn/rbac/role.pb.go | 419 +- api/go/gosdn/rbac/role.pb.gw.go | 292 +- api/go/gosdn/rbac/user.pb.go | 398 +- api/go/gosdn/rbac/user.pb.gw.go | 237 +- api/go/gosdn/southbound/southbound.pb.go | 109 +- .../subscriptionmanagement.pb.go | 423 +- .../subscriptionmanagement.pb.gw.go | 300 +- api/go/gosdn/topology/link.pb.go | 57 +- api/go/gosdn/topology/node.pb.go | 49 +- api/go/gosdn/topology/port.pb.go | 82 +- api/go/gosdn/topology/route.pb.go | 88 +- api/go/gosdn/topology/routingTable.pb.go | 196 +- api/go/gosdn/topology/routingTable.pb.gw.go | 152 +- api/go/gosdn/topology/topology.pb.go | 285 +- api/go/gosdn/topology/topology.pb.gw.go | 198 +- api/go/gosdn/transport/transport.pb.go | 136 +- api/openapiv2/gosdn_northbound.swagger.json | 31 + api/proto/buf.lock | 12 +- .../gosdn/networkelement/networkelement.proto | 3 +- .../plugin-internal/plugin-internal.proto | 11 +- .../plugin-registry/plugin-registry.proto | 1 + api/proto/gosdn/plugin/plugin.proto | 1 + dev_env_data/clab/gosdn_slim.clab.yaml | 7 + .../docker-compose/basic_docker-compose.yml | 5 + .../figures/react-ui/landing_page.png | Bin 0 -> 133946 bytes makefiles/container/Makefile | 3 + models/YangModels | 2 +- models/arista | 2 +- models/openconfig | 2 +- plugin-registry/plugin-registry.Dockerfile | 7 +- react-ui/.dockerignore | 5 + react-ui/.gitignore | 30 + react-ui/.prettierrc | 11 + react-ui/README.md | 40 + react-ui/docker/webserver/Dockerfile | 17 + react-ui/docker/webserver/nginx.conf | 147 + react-ui/docs/README.md | 19 + react-ui/docs/design.md | 8 + react-ui/docs/development.md | 25 + react-ui/docs/routine_pattern.md | 18 + react-ui/docs/routine_pattern.png | Bin 0 -> 102971 bytes react-ui/eslint.config.js | 28 + react-ui/index.html | 22 + react-ui/package.json | 96 + react-ui/public/favicon.ico | Bin 0 -> 31533 bytes react-ui/public/fonts/Inter.ttf | Bin 0 -> 804612 bytes react-ui/public/fonts/inter-webfont.woff | Bin 0 -> 26796 bytes react-ui/public/fonts/inter-webfont.woff2 | Bin 0 -> 21204 bytes react-ui/public/logo.png | Bin 0 -> 66912 bytes react-ui/public/logo.svg | 17 + react-ui/public/manifest.json | 20 + react-ui/public/robots.txt | 3 + react-ui/scripts/build.sh | 17 + react-ui/scripts/dev.sh | 11 + react-ui/scripts/openapi-config.json | 11 + react-ui/src/.prettierrc | 4 + .../devices/reducer/device.reducer.ts | 147 + .../devices/reducer/plugin.reducer.ts | 46 + .../devices/routines/device.routine.ts | 59 + .../src/components/devices/routines/index.ts | 3 + .../devices/routines/mne.routine.ts | 84 + .../devices/routines/plugin.routine.ts | 36 + .../devices/view/boxes/devices.box.view.tsx | 142 + .../view/boxes/information.box.view.tsx | 112 + .../src/components/devices/view/device.scss | 95 + .../components/devices/view/device.view.tsx | 58 + .../devices/view/subcomponent/modal.view.tsx | 162 + .../view_model/device.box.viewmodel.ts | 56 + .../devices/view_model/device.viewmodel.ts | 44 + .../view_model/information.box.viewmodel.ts | 109 + .../devices/view_model/modal.viewmodel.ts | 99 + .../components/login/layouts/login.layout.tsx | 25 + react-ui/src/components/login/view/login.scss | 8 + .../src/components/login/view/login.view.tsx | 104 + .../login/viewmodel/login.viewmodel.ts | 31 + react-ui/src/hooks.ts | 5 + react-ui/src/i18n/config.js | 17 + .../src/i18n/locales/de/translations.json | 20 + .../src/i18n/locales/en/translations.json | 116 + react-ui/src/index.scss | 16 + react-ui/src/index.tsx | 43 + react-ui/src/routes.tsx | 50 + react-ui/src/setupTests.js | 5 + react-ui/src/shared/api/api.ts | 1453 ++ react-ui/src/shared/components/README.md | 3 + .../components/background/background.view.tsx | 92 + .../shared/components/box/gridBox.view.scss | 73 + .../shared/components/box/gridBox.view.tsx | 55 + .../reducer/json_viewer.reducer.ts | 83 + .../json_viewer/view/json_viewer.scss | 72 + .../json_viewer/view/json_viewer.view.tsx | 163 + .../viewmodel/json_viewer.viewmodel.tsx | 161 + .../components/scrollbar/Scrollbar.view.tsx | 25 + .../components/scrollbar/scrollbar.scss | 50 + react-ui/src/shared/error/Error.ts | 1 + react-ui/src/shared/error/FetchError.ts | 5 + react-ui/src/shared/helper/coookie.ts | 14 + react-ui/src/shared/helper/debug.ts | 11 + react-ui/src/shared/helper/hash.ts | 11 + react-ui/src/shared/helper/text.ts | 12 + react-ui/src/shared/icons/icons.ts | 4 + react-ui/src/shared/layouts/basic.layout.tsx | 12 + .../layouts/grid.layout/grid.layout.scss | 88 + .../layouts/grid.layout/grid.layout.tsx | 79 + .../update-indicator.layout.tsx | 52 + .../update-indicator.viewmodel.tsx | 39 + .../protected.layout/protected.layout.scss | 61 + .../protected.layout/protected.layout.tsx | 114 + .../src/shared/provider/auth.provider.tsx | 119 + .../shared/provider/menu/menu.provider.scss | 11 + .../shared/provider/menu/menu.provider.tsx | 158 + .../src/shared/provider/utils.provider.tsx | 37 + .../src/shared/reducer/routine.reducer.ts | 94 + react-ui/src/shared/reducer/user.reducer.ts | 36 + react-ui/src/shared/routine/user.routine.ts | 37 + react-ui/src/shared/style/box.scss | 59 + react-ui/src/shared/style/colors.scss | 45 + react-ui/src/shared/style/fonts.scss | 12 + react-ui/src/shared/style/index.scss | 8 + react-ui/src/shared/style/skeleton.scss | 3 + react-ui/src/shared/style/toast.scss | 1 + react-ui/src/shared/style/utils.scss | 9 + react-ui/src/shared/types/category.type.ts | 17 + react-ui/src/shared/types/interfaces.type.ts | 5 + react-ui/src/shared/types/thunk.type.ts | 24 + .../src/shared/utils/loading-fallback.tsx | 117 + react-ui/src/shared/utils/routine.manager.ts | 80 + react-ui/src/stores/api.store.ts | 19 + react-ui/src/stores/index.ts | 42 + .../middleware/api.listener.middleware.ts | 26 + .../stores/middleware/listener.middleware.ts | 5 + react-ui/src/stores/persist.store.ts | 31 + react-ui/tsconfig.eslint.json | 8 + react-ui/tsconfig.json | 47 + react-ui/tsconfig.node.json | 13 + react-ui/vite.config.mjs | 74 + react-ui/yarn.lock | 11395 ++++++++++++++++ 164 files changed, 21049 insertions(+), 7382 deletions(-) create mode 100644 api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go create mode 100644 api/go/gosdn/plugin-registry/plugin-registry.pb.gw.go create mode 100644 documentation/figures/react-ui/landing_page.png create mode 100644 react-ui/.dockerignore create mode 100755 react-ui/.gitignore create mode 100755 react-ui/.prettierrc create mode 100755 react-ui/README.md create mode 100644 react-ui/docker/webserver/Dockerfile create mode 100644 react-ui/docker/webserver/nginx.conf create mode 100755 react-ui/docs/README.md create mode 100755 react-ui/docs/design.md create mode 100755 react-ui/docs/development.md create mode 100755 react-ui/docs/routine_pattern.md create mode 100755 react-ui/docs/routine_pattern.png create mode 100755 react-ui/eslint.config.js create mode 100755 react-ui/index.html create mode 100755 react-ui/package.json create mode 100644 react-ui/public/favicon.ico create mode 100755 react-ui/public/fonts/Inter.ttf create mode 100644 react-ui/public/fonts/inter-webfont.woff create mode 100644 react-ui/public/fonts/inter-webfont.woff2 create mode 100755 react-ui/public/logo.png create mode 100755 react-ui/public/logo.svg create mode 100755 react-ui/public/manifest.json create mode 100755 react-ui/public/robots.txt create mode 100755 react-ui/scripts/build.sh create mode 100755 react-ui/scripts/dev.sh create mode 100755 react-ui/scripts/openapi-config.json create mode 100644 react-ui/src/.prettierrc create mode 100755 react-ui/src/components/devices/reducer/device.reducer.ts create mode 100644 react-ui/src/components/devices/reducer/plugin.reducer.ts create mode 100755 react-ui/src/components/devices/routines/device.routine.ts create mode 100755 react-ui/src/components/devices/routines/index.ts create mode 100755 react-ui/src/components/devices/routines/mne.routine.ts create mode 100644 react-ui/src/components/devices/routines/plugin.routine.ts create mode 100755 react-ui/src/components/devices/view/boxes/devices.box.view.tsx create mode 100644 react-ui/src/components/devices/view/boxes/information.box.view.tsx create mode 100755 react-ui/src/components/devices/view/device.scss create mode 100755 react-ui/src/components/devices/view/device.view.tsx create mode 100644 react-ui/src/components/devices/view/subcomponent/modal.view.tsx create mode 100644 react-ui/src/components/devices/view_model/device.box.viewmodel.ts create mode 100755 react-ui/src/components/devices/view_model/device.viewmodel.ts create mode 100755 react-ui/src/components/devices/view_model/information.box.viewmodel.ts create mode 100644 react-ui/src/components/devices/view_model/modal.viewmodel.ts create mode 100755 react-ui/src/components/login/layouts/login.layout.tsx create mode 100755 react-ui/src/components/login/view/login.scss create mode 100755 react-ui/src/components/login/view/login.view.tsx create mode 100755 react-ui/src/components/login/viewmodel/login.viewmodel.ts create mode 100755 react-ui/src/hooks.ts create mode 100755 react-ui/src/i18n/config.js create mode 100755 react-ui/src/i18n/locales/de/translations.json create mode 100755 react-ui/src/i18n/locales/en/translations.json create mode 100755 react-ui/src/index.scss create mode 100755 react-ui/src/index.tsx create mode 100755 react-ui/src/routes.tsx create mode 100755 react-ui/src/setupTests.js create mode 100755 react-ui/src/shared/api/api.ts create mode 100644 react-ui/src/shared/components/README.md create mode 100644 react-ui/src/shared/components/background/background.view.tsx create mode 100644 react-ui/src/shared/components/box/gridBox.view.scss create mode 100644 react-ui/src/shared/components/box/gridBox.view.tsx create mode 100755 react-ui/src/shared/components/json_viewer/reducer/json_viewer.reducer.ts create mode 100755 react-ui/src/shared/components/json_viewer/view/json_viewer.scss create mode 100755 react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx create mode 100644 react-ui/src/shared/components/json_viewer/viewmodel/json_viewer.viewmodel.tsx create mode 100644 react-ui/src/shared/components/scrollbar/Scrollbar.view.tsx create mode 100644 react-ui/src/shared/components/scrollbar/scrollbar.scss create mode 100644 react-ui/src/shared/error/Error.ts create mode 100644 react-ui/src/shared/error/FetchError.ts create mode 100755 react-ui/src/shared/helper/coookie.ts create mode 100644 react-ui/src/shared/helper/debug.ts create mode 100644 react-ui/src/shared/helper/hash.ts create mode 100644 react-ui/src/shared/helper/text.ts create mode 100755 react-ui/src/shared/icons/icons.ts create mode 100755 react-ui/src/shared/layouts/basic.layout.tsx create mode 100644 react-ui/src/shared/layouts/grid.layout/grid.layout.scss create mode 100644 react-ui/src/shared/layouts/grid.layout/grid.layout.tsx create mode 100644 react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.layout.tsx create mode 100644 react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.viewmodel.tsx create mode 100755 react-ui/src/shared/layouts/protected.layout/protected.layout.scss create mode 100755 react-ui/src/shared/layouts/protected.layout/protected.layout.tsx create mode 100755 react-ui/src/shared/provider/auth.provider.tsx create mode 100644 react-ui/src/shared/provider/menu/menu.provider.scss create mode 100644 react-ui/src/shared/provider/menu/menu.provider.tsx create mode 100644 react-ui/src/shared/provider/utils.provider.tsx create mode 100755 react-ui/src/shared/reducer/routine.reducer.ts create mode 100755 react-ui/src/shared/reducer/user.reducer.ts create mode 100644 react-ui/src/shared/routine/user.routine.ts create mode 100755 react-ui/src/shared/style/box.scss create mode 100755 react-ui/src/shared/style/colors.scss create mode 100755 react-ui/src/shared/style/fonts.scss create mode 100755 react-ui/src/shared/style/index.scss create mode 100644 react-ui/src/shared/style/skeleton.scss create mode 100755 react-ui/src/shared/style/toast.scss create mode 100755 react-ui/src/shared/style/utils.scss create mode 100644 react-ui/src/shared/types/category.type.ts create mode 100644 react-ui/src/shared/types/interfaces.type.ts create mode 100644 react-ui/src/shared/types/thunk.type.ts create mode 100644 react-ui/src/shared/utils/loading-fallback.tsx create mode 100755 react-ui/src/shared/utils/routine.manager.ts create mode 100755 react-ui/src/stores/api.store.ts create mode 100755 react-ui/src/stores/index.ts create mode 100755 react-ui/src/stores/middleware/api.listener.middleware.ts create mode 100755 react-ui/src/stores/middleware/listener.middleware.ts create mode 100755 react-ui/src/stores/persist.store.ts create mode 100755 react-ui/tsconfig.eslint.json create mode 100755 react-ui/tsconfig.json create mode 100755 react-ui/tsconfig.node.json create mode 100755 react-ui/vite.config.mjs create mode 100755 react-ui/yarn.lock diff --git a/.gitlab/ci/.build-binaries.yml b/.gitlab/ci/.build-binaries.yml index 174203fdc..4877cd169 100644 --- a/.gitlab/ci/.build-binaries.yml +++ b/.gitlab/ci/.build-binaries.yml @@ -16,5 +16,6 @@ build-all-binaries: - artifacts/venv-manager - artifacts/inventory-manager - artifacts/plugin-registry + - artifacts/react-ui expire_in: 1 week <<: *build-binaries diff --git a/.gitlab/ci/.build-container-images.yml b/.gitlab/ci/.build-container-images.yml index da70dcba2..7fda52178 100644 --- a/.gitlab/ci/.build-container-images.yml +++ b/.gitlab/ci/.build-container-images.yml @@ -75,6 +75,16 @@ build-inventory-manager-image: - docker push "$INVENTORY_MANAGER_IMAGE_NAME:$CI_COMMIT_REF_SLUG" <<: *build +build-react-ui-image: + script: + - REACT_UI_IMAGE_NAME="${CI_REGISTRY_IMAGE}/react-ui" + - docker buildx build -t "$REACT_UI_IMAGE_NAME:$CI_COMMIT_SHA" -f "${CI_PROJECT_DIR}/react-ui/docker/webserver/Dockerfile" . + - docker push "$REACT_UI_IMAGE_NAME:$CI_COMMIT_SHA" + - docker tag "$REACT_UI_IMAGE_NAME:$CI_COMMIT_SHA" "$REACT_UI_IMAGE_NAME:$CI_COMMIT_REF_SLUG" + - docker push "$REACT_UI_IMAGE_NAME:$CI_COMMIT_REF_SLUG" + <<: *build + + build-integration-test-images: needs: ["build-controller-image"] script: diff --git a/.gitmodules b/.gitmodules index 31328ccf0..da22de84f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,3 +9,6 @@ [submodule "models/YangModels"] path = models/YangModels url = https://github.com/YangModels/yang.git +[submodule "react-ui/yang_model"] + path = react-ui/yang_model + url = https://github.com/openconfig/public.git diff --git a/Makefile b/Makefile index 0cd0ed66d..693329772 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ lint-fix: install-tools build: pre build-gosdn build-gosdnc build-plugin-registry build-venv-manager build-arista-routing-engine-app build-hostname-checker-app build-basic-interface-monitoring-app build-inventory-manager -containerize-all: containerize-gosdn containerize-gosdnc containerize-plugin-registry containerize-venv-manager containerize-arista-routing-engine-app containerize-inventory-manager +containerize-all: containerize-gosdn containerize-gosdnc containerize-plugin-registry containerize-venv-manager containerize-arista-routing-engine-app containerize-inventory-manager containerize-react-ui generate-all-certs: pre generate-root-ca generate-gosdn-certs generate-gnmi-target-certs diff --git a/README.md b/README.md index a418a5ab7..3699e7774 100644 --- a/README.md +++ b/README.md @@ -394,3 +394,10 @@ There exists a `example_tests` folder where examples of using the `integrationTe Run the integration tests with `make controller-integration-tests`. If you want to debug the tests, use `make controller-integration-tests-debug-up` to start the environment. You can now use the debugger to debug the test (but not the goSDN side). Stop the environment when you are done with `make controller-integration-tests-debug-down`. + +## Web UI +Despite the goSDN console the web ui provides a more convenient way to gather information. The web UI is also integrated in the containerlab so that it also accessible after executing `make containerlab-start`. The web ui is accessible at [localhost:8088](http://localhost:8088) +<img src="documentation/figures/react-ui/landing_page.png" /> +Currently the UI provides a easy way to ready properties of switches. You can also create new switches which is the equivalent command to `mne create` in the console. You find a more detailed docu [here](react-ui/README.md) + + diff --git a/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go b/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go index a186f9bae..4374f3e6a 100644 --- a/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go +++ b/api/go/github.com/openconfig/gnmi/proto/collector/collector.pb.go @@ -16,7 +16,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: github.com/openconfig/gnmi/proto/collector/collector.proto @@ -27,6 +27,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -37,20 +38,17 @@ const ( ) type ReconnectRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Target []string `protobuf:"bytes,1,rep,name=target,proto3" json:"target,omitempty"` // List of targets to reconnect. unknownFields protoimpl.UnknownFields - - Target []string `protobuf:"bytes,1,rep,name=target,proto3" json:"target,omitempty"` // List of targets to reconnect. + sizeCache protoimpl.SizeCache } func (x *ReconnectRequest) Reset() { *x = ReconnectRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReconnectRequest) String() string { @@ -61,7 +59,7 @@ func (*ReconnectRequest) ProtoMessage() {} func (x *ReconnectRequest) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -84,18 +82,16 @@ func (x *ReconnectRequest) GetTarget() []string { } type Nil struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Nil) Reset() { *x = Nil{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Nil) String() string { @@ -106,7 +102,7 @@ func (*Nil) ProtoMessage() {} func (x *Nil) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -123,7 +119,7 @@ func (*Nil) Descriptor() ([]byte, []int) { var File_github_com_openconfig_gnmi_proto_collector_collector_proto protoreflect.FileDescriptor -var file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc = []byte{ +var file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc = string([]byte{ 0x0a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2f, 0x63, 0x6f, 0x6c, @@ -139,16 +135,16 @@ var file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc = [] 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x3b, 0x67, 0x6e, 0x6d, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescOnce sync.Once - file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescData = file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc + file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescData []byte ) func file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescGZIP() []byte { file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescOnce.Do(func() { - file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescData) + file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc))) }) return file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDescData } @@ -173,37 +169,11 @@ func file_github_com_openconfig_gnmi_proto_collector_collector_proto_init() { if File_github_com_openconfig_gnmi_proto_collector_collector_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ReconnectRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Nil); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -214,7 +184,6 @@ func file_github_com_openconfig_gnmi_proto_collector_collector_proto_init() { MessageInfos: file_github_com_openconfig_gnmi_proto_collector_collector_proto_msgTypes, }.Build() File_github_com_openconfig_gnmi_proto_collector_collector_proto = out.File - file_github_com_openconfig_gnmi_proto_collector_collector_proto_rawDesc = nil file_github_com_openconfig_gnmi_proto_collector_collector_proto_goTypes = nil file_github_com_openconfig_gnmi_proto_collector_collector_proto_depIdxs = nil } diff --git a/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go b/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go index aa39f2583..0d3b99995 100644 --- a/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go +++ b/api/go/github.com/openconfig/gnmi/proto/gnmi/gnmi.pb.go @@ -16,7 +16,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: github.com/openconfig/gnmi/proto/gnmi/gnmi.proto @@ -39,6 +39,7 @@ import ( anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -329,12 +330,9 @@ func (GetRequest_DataType) EnumDescriptor() ([]byte, []int) { // // Reference: gNMI Specification Section 2.1 type Notification struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Prefix *Path `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths in the message. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Prefix *Path `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths in the message. // An alias for the path specified in the prefix field. // Reference: gNMI Specification Section 2.4.2 Alias string `protobuf:"bytes,3,opt,name=alias,proto3" json:"alias,omitempty"` @@ -342,16 +340,16 @@ type Notification struct { Delete []*Path `protobuf:"bytes,5,rep,name=delete,proto3" json:"delete,omitempty"` // Data elements that have been deleted. // This notification contains a set of paths that are always updated together // referenced by a globally unique prefix. - Atomic bool `protobuf:"varint,6,opt,name=atomic,proto3" json:"atomic,omitempty"` + Atomic bool `protobuf:"varint,6,opt,name=atomic,proto3" json:"atomic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Notification) Reset() { *x = Notification{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Notification) String() string { @@ -362,7 +360,7 @@ func (*Notification) ProtoMessage() {} func (x *Notification) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -423,24 +421,21 @@ func (x *Notification) GetAtomic() bool { // Value pair. // Reference: gNMI Specification Section 2.1 type Update struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path *Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // The path (key) for the update. + state protoimpl.MessageState `protogen:"open.v1"` + Path *Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // The path (key) for the update. // Deprecated: Marked as deprecated in github.com/openconfig/gnmi/proto/gnmi/gnmi.proto. - Value *Value `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // The value (value) for the update. - Val *TypedValue `protobuf:"bytes,3,opt,name=val,proto3" json:"val,omitempty"` // The explicitly typed update value. - Duplicates uint32 `protobuf:"varint,4,opt,name=duplicates,proto3" json:"duplicates,omitempty"` // Number of coalesced duplicates. + Value *Value `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // The value (value) for the update. + Val *TypedValue `protobuf:"bytes,3,opt,name=val,proto3" json:"val,omitempty"` // The explicitly typed update value. + Duplicates uint32 `protobuf:"varint,4,opt,name=duplicates,proto3" json:"duplicates,omitempty"` // Number of coalesced duplicates. + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Update) Reset() { *x = Update{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Update) String() string { @@ -451,7 +446,7 @@ func (*Update) ProtoMessage() {} func (x *Update) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -498,17 +493,14 @@ func (x *Update) GetDuplicates() uint32 { // TypedValue is used to encode a value being sent between the client and // target (originated by either entity). type TypedValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // One of the fields within the val oneof is populated with the value // of the update. The type of the value being included in the Update // determines which field should be populated. In the case that the // encoding is a particular form of the base protobuf type, a specific // field is used to store the value (e.g., json_val). // - // Types that are assignable to Value: + // Types that are valid to be assigned to Value: // // *TypedValue_StringVal // *TypedValue_IntVal @@ -523,16 +515,16 @@ type TypedValue struct { // *TypedValue_JsonIetfVal // *TypedValue_AsciiVal // *TypedValue_ProtoBytes - Value isTypedValue_Value `protobuf_oneof:"value"` + Value isTypedValue_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TypedValue) Reset() { *x = TypedValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TypedValue) String() string { @@ -543,7 +535,7 @@ func (*TypedValue) ProtoMessage() {} func (x *TypedValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -558,100 +550,126 @@ func (*TypedValue) Descriptor() ([]byte, []int) { return file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescGZIP(), []int{2} } -func (m *TypedValue) GetValue() isTypedValue_Value { - if m != nil { - return m.Value +func (x *TypedValue) GetValue() isTypedValue_Value { + if x != nil { + return x.Value } return nil } func (x *TypedValue) GetStringVal() string { - if x, ok := x.GetValue().(*TypedValue_StringVal); ok { - return x.StringVal + if x != nil { + if x, ok := x.Value.(*TypedValue_StringVal); ok { + return x.StringVal + } } return "" } func (x *TypedValue) GetIntVal() int64 { - if x, ok := x.GetValue().(*TypedValue_IntVal); ok { - return x.IntVal + if x != nil { + if x, ok := x.Value.(*TypedValue_IntVal); ok { + return x.IntVal + } } return 0 } func (x *TypedValue) GetUintVal() uint64 { - if x, ok := x.GetValue().(*TypedValue_UintVal); ok { - return x.UintVal + if x != nil { + if x, ok := x.Value.(*TypedValue_UintVal); ok { + return x.UintVal + } } return 0 } func (x *TypedValue) GetBoolVal() bool { - if x, ok := x.GetValue().(*TypedValue_BoolVal); ok { - return x.BoolVal + if x != nil { + if x, ok := x.Value.(*TypedValue_BoolVal); ok { + return x.BoolVal + } } return false } func (x *TypedValue) GetBytesVal() []byte { - if x, ok := x.GetValue().(*TypedValue_BytesVal); ok { - return x.BytesVal + if x != nil { + if x, ok := x.Value.(*TypedValue_BytesVal); ok { + return x.BytesVal + } } return nil } func (x *TypedValue) GetFloatVal() float32 { - if x, ok := x.GetValue().(*TypedValue_FloatVal); ok { - return x.FloatVal + if x != nil { + if x, ok := x.Value.(*TypedValue_FloatVal); ok { + return x.FloatVal + } } return 0 } func (x *TypedValue) GetDecimalVal() *Decimal64 { - if x, ok := x.GetValue().(*TypedValue_DecimalVal); ok { - return x.DecimalVal + if x != nil { + if x, ok := x.Value.(*TypedValue_DecimalVal); ok { + return x.DecimalVal + } } return nil } func (x *TypedValue) GetLeaflistVal() *ScalarArray { - if x, ok := x.GetValue().(*TypedValue_LeaflistVal); ok { - return x.LeaflistVal + if x != nil { + if x, ok := x.Value.(*TypedValue_LeaflistVal); ok { + return x.LeaflistVal + } } return nil } func (x *TypedValue) GetAnyVal() *anypb.Any { - if x, ok := x.GetValue().(*TypedValue_AnyVal); ok { - return x.AnyVal + if x != nil { + if x, ok := x.Value.(*TypedValue_AnyVal); ok { + return x.AnyVal + } } return nil } func (x *TypedValue) GetJsonVal() []byte { - if x, ok := x.GetValue().(*TypedValue_JsonVal); ok { - return x.JsonVal + if x != nil { + if x, ok := x.Value.(*TypedValue_JsonVal); ok { + return x.JsonVal + } } return nil } func (x *TypedValue) GetJsonIetfVal() []byte { - if x, ok := x.GetValue().(*TypedValue_JsonIetfVal); ok { - return x.JsonIetfVal + if x != nil { + if x, ok := x.Value.(*TypedValue_JsonIetfVal); ok { + return x.JsonIetfVal + } } return nil } func (x *TypedValue) GetAsciiVal() string { - if x, ok := x.GetValue().(*TypedValue_AsciiVal); ok { - return x.AsciiVal + if x != nil { + if x, ok := x.Value.(*TypedValue_AsciiVal); ok { + return x.AsciiVal + } } return "" } func (x *TypedValue) GetProtoBytes() []byte { - if x, ok := x.GetValue().(*TypedValue_ProtoBytes); ok { - return x.ProtoBytes + if x != nil { + if x, ok := x.Value.(*TypedValue_ProtoBytes); ok { + return x.ProtoBytes + } } return nil } @@ -747,27 +765,24 @@ func (*TypedValue_ProtoBytes) isTypedValue_Value() {} // associated attributes. // Reference: gNMI Specification Section 2.2.2. type Path struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Elements of the path are no longer encoded as a string, but rather within // the elem field as a PathElem message. // // Deprecated: Marked as deprecated in github.com/openconfig/gnmi/proto/gnmi/gnmi.proto. - Element []string `protobuf:"bytes,1,rep,name=element,proto3" json:"element,omitempty"` - Origin string `protobuf:"bytes,2,opt,name=origin,proto3" json:"origin,omitempty"` // Label to disambiguate path. - Elem []*PathElem `protobuf:"bytes,3,rep,name=elem,proto3" json:"elem,omitempty"` // Elements of the path. - Target string `protobuf:"bytes,4,opt,name=target,proto3" json:"target,omitempty"` // The name of the target + Element []string `protobuf:"bytes,1,rep,name=element,proto3" json:"element,omitempty"` + Origin string `protobuf:"bytes,2,opt,name=origin,proto3" json:"origin,omitempty"` // Label to disambiguate path. + Elem []*PathElem `protobuf:"bytes,3,rep,name=elem,proto3" json:"elem,omitempty"` // Elements of the path. + Target string `protobuf:"bytes,4,opt,name=target,proto3" json:"target,omitempty"` // The name of the target + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Path) Reset() { *x = Path{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Path) String() string { @@ -778,7 +793,7 @@ func (*Path) ProtoMessage() {} func (x *Path) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -826,21 +841,18 @@ func (x *Path) GetTarget() string { // that may be associated with it. // Reference: gNMI Specification Section 2.2.2. type PathElem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The name of the element in the path. + Key map[string]string `protobuf:"bytes,2,rep,name=key,proto3" json:"key,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Map of key (attribute) name to value. unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The name of the element in the path. - Key map[string]string `protobuf:"bytes,2,rep,name=key,proto3" json:"key,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Map of key (attribute) name to value. + sizeCache protoimpl.SizeCache } func (x *PathElem) Reset() { *x = PathElem{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PathElem) String() string { @@ -851,7 +863,7 @@ func (*PathElem) ProtoMessage() {} func (x *PathElem) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -886,21 +898,18 @@ func (x *PathElem) GetKey() map[string]string { // // Deprecated: Marked as deprecated in github.com/openconfig/gnmi/proto/gnmi/gnmi.proto. type Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // Value of the variable being transmitted. + Type Encoding `protobuf:"varint,2,opt,name=type,proto3,enum=gnmi.Encoding" json:"type,omitempty"` // Encoding used for the value field. unknownFields protoimpl.UnknownFields - - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // Value of the variable being transmitted. - Type Encoding `protobuf:"varint,2,opt,name=type,proto3,enum=gnmi.Encoding" json:"type,omitempty"` // Encoding used for the value field. + sizeCache protoimpl.SizeCache } func (x *Value) Reset() { *x = Value{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Value) String() string { @@ -911,7 +920,7 @@ func (*Value) ProtoMessage() {} func (x *Value) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -947,22 +956,19 @@ func (x *Value) GetType() Encoding { // // Deprecated: Marked as deprecated in github.com/openconfig/gnmi/proto/gnmi/gnmi.proto. type Error struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // Canonical gRPC error code. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // Human readable error. + Data *anypb.Any `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // Optional additional information. unknownFields protoimpl.UnknownFields - - Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // Canonical gRPC error code. - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // Human readable error. - Data *anypb.Any `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // Optional additional information. + sizeCache protoimpl.SizeCache } func (x *Error) Reset() { *x = Error{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Error) String() string { @@ -973,7 +979,7 @@ func (*Error) ProtoMessage() {} func (x *Error) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1013,21 +1019,18 @@ func (x *Error) GetData() *anypb.Any { // is expressed as a set of digits with the precision specifying the // number of digits following the decimal point in the digit set. type Decimal64 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Digits int64 `protobuf:"varint,1,opt,name=digits,proto3" json:"digits,omitempty"` // Set of digits. + Precision uint32 `protobuf:"varint,2,opt,name=precision,proto3" json:"precision,omitempty"` // Number of digits following the decimal point. unknownFields protoimpl.UnknownFields - - Digits int64 `protobuf:"varint,1,opt,name=digits,proto3" json:"digits,omitempty"` // Set of digits. - Precision uint32 `protobuf:"varint,2,opt,name=precision,proto3" json:"precision,omitempty"` // Number of digits following the decimal point. + sizeCache protoimpl.SizeCache } func (x *Decimal64) Reset() { *x = Decimal64{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Decimal64) String() string { @@ -1038,7 +1041,7 @@ func (*Decimal64) ProtoMessage() {} func (x *Decimal64) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1069,23 +1072,20 @@ func (x *Decimal64) GetPrecision() uint32 { // ScalarArray is used to encode a mixed-type array of values. type ScalarArray struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The set of elements within the array. Each TypedValue message should // specify only elements that have a field identifier of 1-7 (i.e., the // values are scalar values). - Element []*TypedValue `protobuf:"bytes,1,rep,name=element,proto3" json:"element,omitempty"` + Element []*TypedValue `protobuf:"bytes,1,rep,name=element,proto3" json:"element,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ScalarArray) Reset() { *x = ScalarArray{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ScalarArray) String() string { @@ -1096,7 +1096,7 @@ func (*ScalarArray) ProtoMessage() {} func (x *ScalarArray) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1125,11 +1125,8 @@ func (x *ScalarArray) GetElement() []*TypedValue { // used to define aliases or trigger polled data to be sent by the target. // Reference: gNMI Specification Section 3.5.1.1 type SubscribeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Request: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Request: // // *SubscribeRequest_Subscribe // *SubscribeRequest_Poll @@ -1137,16 +1134,16 @@ type SubscribeRequest struct { Request isSubscribeRequest_Request `protobuf_oneof:"request"` // Extension messages associated with the SubscribeRequest. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeRequest) String() string { @@ -1157,7 +1154,7 @@ func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1172,30 +1169,36 @@ func (*SubscribeRequest) Descriptor() ([]byte, []int) { return file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescGZIP(), []int{9} } -func (m *SubscribeRequest) GetRequest() isSubscribeRequest_Request { - if m != nil { - return m.Request +func (x *SubscribeRequest) GetRequest() isSubscribeRequest_Request { + if x != nil { + return x.Request } return nil } func (x *SubscribeRequest) GetSubscribe() *SubscriptionList { - if x, ok := x.GetRequest().(*SubscribeRequest_Subscribe); ok { - return x.Subscribe + if x != nil { + if x, ok := x.Request.(*SubscribeRequest_Subscribe); ok { + return x.Subscribe + } } return nil } func (x *SubscribeRequest) GetPoll() *Poll { - if x, ok := x.GetRequest().(*SubscribeRequest_Poll); ok { - return x.Poll + if x != nil { + if x, ok := x.Request.(*SubscribeRequest_Poll); ok { + return x.Poll + } } return nil } func (x *SubscribeRequest) GetAliases() *AliasList { - if x, ok := x.GetRequest().(*SubscribeRequest_Aliases); ok { - return x.Aliases + if x != nil { + if x, ok := x.Request.(*SubscribeRequest_Aliases); ok { + return x.Aliases + } } return nil } @@ -1234,18 +1237,16 @@ func (*SubscribeRequest_Aliases) isSubscribeRequest_Request() {} // subscription. // Reference: gNMI Specification Section Section 3.5.1.4 type Poll struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Poll) Reset() { *x = Poll{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Poll) String() string { @@ -1256,7 +1257,7 @@ func (*Poll) ProtoMessage() {} func (x *Poll) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1278,11 +1279,8 @@ func (*Poll) Descriptor() ([]byte, []int) { // synchronized). // Reference: gNMI Specification Section 3.5.1.4 type SubscribeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Response: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Response: // // *SubscribeResponse_Update // *SubscribeResponse_SyncResponse @@ -1290,16 +1288,16 @@ type SubscribeResponse struct { Response isSubscribeResponse_Response `protobuf_oneof:"response"` // Extension messages associated with the SubscribeResponse. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeResponse) Reset() { *x = SubscribeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeResponse) String() string { @@ -1310,7 +1308,7 @@ func (*SubscribeResponse) ProtoMessage() {} func (x *SubscribeResponse) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1325,31 +1323,37 @@ func (*SubscribeResponse) Descriptor() ([]byte, []int) { return file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescGZIP(), []int{11} } -func (m *SubscribeResponse) GetResponse() isSubscribeResponse_Response { - if m != nil { - return m.Response +func (x *SubscribeResponse) GetResponse() isSubscribeResponse_Response { + if x != nil { + return x.Response } return nil } func (x *SubscribeResponse) GetUpdate() *Notification { - if x, ok := x.GetResponse().(*SubscribeResponse_Update); ok { - return x.Update + if x != nil { + if x, ok := x.Response.(*SubscribeResponse_Update); ok { + return x.Update + } } return nil } func (x *SubscribeResponse) GetSyncResponse() bool { - if x, ok := x.GetResponse().(*SubscribeResponse_SyncResponse); ok { - return x.SyncResponse + if x != nil { + if x, ok := x.Response.(*SubscribeResponse_SyncResponse); ok { + return x.SyncResponse + } } return false } // Deprecated: Marked as deprecated in github.com/openconfig/gnmi/proto/gnmi/gnmi.proto. func (x *SubscribeResponse) GetError() *Error { - if x, ok := x.GetResponse().(*SubscribeResponse_Error); ok { - return x.Error + if x != nil { + if x, ok := x.Response.(*SubscribeResponse_Error); ok { + return x.Error + } } return nil } @@ -1394,12 +1398,9 @@ func (*SubscribeResponse_Error) isSubscribeResponse_Response() {} // subscription. // Reference: gNMI Specification Section 3.5.1.2 type SubscriptionList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths. - Subscription []*Subscription `protobuf:"bytes,2,rep,name=subscription,proto3" json:"subscription,omitempty"` // Set of subscriptions to create. + state protoimpl.MessageState `protogen:"open.v1"` + Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths. + Subscription []*Subscription `protobuf:"bytes,2,rep,name=subscription,proto3" json:"subscription,omitempty"` // Set of subscriptions to create. // Whether target defined aliases are allowed within the subscription. UseAliases bool `protobuf:"varint,3,opt,name=use_aliases,json=useAliases,proto3" json:"use_aliases,omitempty"` Qos *QOSMarking `protobuf:"bytes,4,opt,name=qos,proto3" json:"qos,omitempty"` // DSCP marking to be used. @@ -1418,16 +1419,16 @@ type SubscriptionList struct { // rather only the sync message followed by any subsequent updates to the // current state. For ONCE and POLL modes, this causes the server to send only // the sync message (Sec. 3.5.2.3). - UpdatesOnly bool `protobuf:"varint,9,opt,name=updates_only,json=updatesOnly,proto3" json:"updates_only,omitempty"` + UpdatesOnly bool `protobuf:"varint,9,opt,name=updates_only,json=updatesOnly,proto3" json:"updates_only,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscriptionList) Reset() { *x = SubscriptionList{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscriptionList) String() string { @@ -1438,7 +1439,7 @@ func (*SubscriptionList) ProtoMessage() {} func (x *SubscriptionList) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1522,13 +1523,10 @@ func (x *SubscriptionList) GetUpdatesOnly() bool { // should trigger updates to be sent. // Reference: gNMI Specification Section 3.5.1.3 type Subscription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path *Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // The data tree path. - Mode SubscriptionMode `protobuf:"varint,2,opt,name=mode,proto3,enum=gnmi.SubscriptionMode" json:"mode,omitempty"` // Subscription mode to be used. - SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` // ns between samples in SAMPLE mode. + state protoimpl.MessageState `protogen:"open.v1"` + Path *Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // The data tree path. + Mode SubscriptionMode `protobuf:"varint,2,opt,name=mode,proto3,enum=gnmi.SubscriptionMode" json:"mode,omitempty"` // Subscription mode to be used. + SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` // ns between samples in SAMPLE mode. // Indicates whether values that have not changed should be sent in a SAMPLE // subscription. SuppressRedundant bool `protobuf:"varint,4,opt,name=suppress_redundant,json=suppressRedundant,proto3" json:"suppress_redundant,omitempty"` @@ -1536,15 +1534,15 @@ type Subscription struct { // suppress_redundant is in use. The target should send a value at least once // in the period specified. HeartbeatInterval uint64 `protobuf:"varint,5,opt,name=heartbeat_interval,json=heartbeatInterval,proto3" json:"heartbeat_interval,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Subscription) Reset() { *x = Subscription{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Subscription) String() string { @@ -1555,7 +1553,7 @@ func (*Subscription) ProtoMessage() {} func (x *Subscription) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1609,20 +1607,17 @@ func (x *Subscription) GetHeartbeatInterval() uint64 { // updates from the target. // Reference: gNMI Specification Section 3.5.1.2 type QOSMarking struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Marking uint32 `protobuf:"varint,1,opt,name=marking,proto3" json:"marking,omitempty"` unknownFields protoimpl.UnknownFields - - Marking uint32 `protobuf:"varint,1,opt,name=marking,proto3" json:"marking,omitempty"` + sizeCache protoimpl.SizeCache } func (x *QOSMarking) Reset() { *x = QOSMarking{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *QOSMarking) String() string { @@ -1633,7 +1628,7 @@ func (*QOSMarking) ProtoMessage() {} func (x *QOSMarking) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1661,21 +1656,18 @@ func (x *QOSMarking) GetMarking() uint32 { // data tree element paths. // Reference: gNMI Specification Section 2.4.2 type Alias struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Path *Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // The path to be aliased. + Alias string `protobuf:"bytes,2,opt,name=alias,proto3" json:"alias,omitempty"` // The alias value, a string prefixed by "#". unknownFields protoimpl.UnknownFields - - Path *Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // The path to be aliased. - Alias string `protobuf:"bytes,2,opt,name=alias,proto3" json:"alias,omitempty"` // The alias value, a string prefixed by "#". + sizeCache protoimpl.SizeCache } func (x *Alias) Reset() { *x = Alias{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Alias) String() string { @@ -1686,7 +1678,7 @@ func (*Alias) ProtoMessage() {} func (x *Alias) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1719,20 +1711,17 @@ func (x *Alias) GetAlias() string { // a client to create a set of aliases that the target is to utilize. // Reference: gNMI Specification Section 3.5.1.6 type AliasList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Alias []*Alias `protobuf:"bytes,1,rep,name=alias,proto3" json:"alias,omitempty"` // The set of aliases to be created. unknownFields protoimpl.UnknownFields - - Alias []*Alias `protobuf:"bytes,1,rep,name=alias,proto3" json:"alias,omitempty"` // The set of aliases to be created. + sizeCache protoimpl.SizeCache } func (x *AliasList) Reset() { *x = AliasList{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AliasList) String() string { @@ -1743,7 +1732,7 @@ func (*AliasList) ProtoMessage() {} func (x *AliasList) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1773,26 +1762,23 @@ func (x *AliasList) GetAlias() []*Alias { // a single SetRequest are considered to be a transaction. // Reference: gNMI Specification Section 3.4.1 type SetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths in the message. - Delete []*Path `protobuf:"bytes,2,rep,name=delete,proto3" json:"delete,omitempty"` // Paths to be deleted from the data tree. - Replace []*Update `protobuf:"bytes,3,rep,name=replace,proto3" json:"replace,omitempty"` // Updates specifying elements to be replaced. - Update []*Update `protobuf:"bytes,4,rep,name=update,proto3" json:"update,omitempty"` // Updates specifying elements to updated. + state protoimpl.MessageState `protogen:"open.v1"` + Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths in the message. + Delete []*Path `protobuf:"bytes,2,rep,name=delete,proto3" json:"delete,omitempty"` // Paths to be deleted from the data tree. + Replace []*Update `protobuf:"bytes,3,rep,name=replace,proto3" json:"replace,omitempty"` // Updates specifying elements to be replaced. + Update []*Update `protobuf:"bytes,4,rep,name=update,proto3" json:"update,omitempty"` // Updates specifying elements to updated. // Extension messages associated with the SetRequest. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetRequest) Reset() { *x = SetRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetRequest) String() string { @@ -1803,7 +1789,7 @@ func (*SetRequest) ProtoMessage() {} func (x *SetRequest) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1861,11 +1847,8 @@ func (x *SetRequest) GetExtension() []*gnmi_ext.Extension { // details where required. // Reference: gNMI Specification Section 3.4.2 type SetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths. + state protoimpl.MessageState `protogen:"open.v1"` + Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths. // A set of responses specifying the result of the operations specified in // the SetRequest. Response []*UpdateResult `protobuf:"bytes,2,rep,name=response,proto3" json:"response,omitempty"` @@ -1874,16 +1857,16 @@ type SetResponse struct { Timestamp int64 `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp of transaction (ns since epoch). // Extension messages associated with the SetResponse. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,5,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetResponse) Reset() { *x = SetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetResponse) String() string { @@ -1894,7 +1877,7 @@ func (*SetResponse) ProtoMessage() {} func (x *SetResponse) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1949,10 +1932,7 @@ func (x *SetResponse) GetExtension() []*gnmi_ext.Extension { // result of an operation specified within a SetRequest message. // Reference: gNMI Specification Section 3.4.2 type UpdateResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Deprecated timestamp for the UpdateResult, this field has been // replaced by the timestamp within the SetResponse message, since // all mutations effected by a set should be applied as a single @@ -1962,17 +1942,17 @@ type UpdateResult struct { Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` Path *Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // Path associated with the update. // Deprecated: Marked as deprecated in github.com/openconfig/gnmi/proto/gnmi/gnmi.proto. - Message *Error `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` // Status of the update operation. - Op UpdateResult_Operation `protobuf:"varint,4,opt,name=op,proto3,enum=gnmi.UpdateResult_Operation" json:"op,omitempty"` // Update operation type. + Message *Error `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` // Status of the update operation. + Op UpdateResult_Operation `protobuf:"varint,4,opt,name=op,proto3,enum=gnmi.UpdateResult_Operation" json:"op,omitempty"` // Update operation type. + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateResult) Reset() { *x = UpdateResult{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateResult) String() string { @@ -1983,7 +1963,7 @@ func (*UpdateResult) ProtoMessage() {} func (x *UpdateResult) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2035,27 +2015,24 @@ func (x *UpdateResult) GetOp() UpdateResult_Operation { // must use all schema models that it has. // Reference: gNMI Specification Section 3.3.1 type GetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths. - Path []*Path `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` // Paths requested by the client. - Type GetRequest_DataType `protobuf:"varint,3,opt,name=type,proto3,enum=gnmi.GetRequest_DataType" json:"type,omitempty"` // The type of data being requested. - Encoding Encoding `protobuf:"varint,5,opt,name=encoding,proto3,enum=gnmi.Encoding" json:"encoding,omitempty"` // Encoding to be used. - UseModels []*ModelData `protobuf:"bytes,6,rep,name=use_models,json=useModels,proto3" json:"use_models,omitempty"` // The schema models to be used. + state protoimpl.MessageState `protogen:"open.v1"` + Prefix *Path `protobuf:"bytes,1,opt,name=prefix,proto3" json:"prefix,omitempty"` // Prefix used for paths. + Path []*Path `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` // Paths requested by the client. + Type GetRequest_DataType `protobuf:"varint,3,opt,name=type,proto3,enum=gnmi.GetRequest_DataType" json:"type,omitempty"` // The type of data being requested. + Encoding Encoding `protobuf:"varint,5,opt,name=encoding,proto3,enum=gnmi.Encoding" json:"encoding,omitempty"` // Encoding to be used. + UseModels []*ModelData `protobuf:"bytes,6,rep,name=use_models,json=useModels,proto3" json:"use_models,omitempty"` // The schema models to be used. // Extension messages associated with the GetRequest. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,7,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,7,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetRequest) Reset() { *x = GetRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRequest) String() string { @@ -2066,7 +2043,7 @@ func (*GetRequest) ProtoMessage() {} func (x *GetRequest) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2128,25 +2105,22 @@ func (x *GetRequest) GetExtension() []*gnmi_ext.Extension { // by the client in the GetRequest. // Reference: gNMI Specification Section 3.3.2 type GetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Notification []*Notification `protobuf:"bytes,1,rep,name=notification,proto3" json:"notification,omitempty"` // Data values. + state protoimpl.MessageState `protogen:"open.v1"` + Notification []*Notification `protobuf:"bytes,1,rep,name=notification,proto3" json:"notification,omitempty"` // Data values. // Deprecated: Marked as deprecated in github.com/openconfig/gnmi/proto/gnmi/gnmi.proto. Error *Error `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` // Errors that occurred in the Get. // Extension messages associated with the GetResponse. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,3,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,3,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetResponse) Reset() { *x = GetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetResponse) String() string { @@ -2157,7 +2131,7 @@ func (*GetResponse) ProtoMessage() {} func (x *GetResponse) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2198,22 +2172,19 @@ func (x *GetResponse) GetExtension() []*gnmi_ext.Extension { // that the target reports its capabilities. // Reference: gNMI Specification Section 3.2.1 type CapabilityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Extension messages associated with the CapabilityRequest. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,1,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,1,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CapabilityRequest) Reset() { *x = CapabilityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CapabilityRequest) String() string { @@ -2224,7 +2195,7 @@ func (*CapabilityRequest) ProtoMessage() {} func (x *CapabilityRequest) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2250,25 +2221,22 @@ func (x *CapabilityRequest) GetExtension() []*gnmi_ext.Extension { // client within the Capabilities RPC. // Reference: gNMI Specification Section 3.2.2 type CapabilityResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SupportedModels []*ModelData `protobuf:"bytes,1,rep,name=supported_models,json=supportedModels,proto3" json:"supported_models,omitempty"` // Supported schema models. - SupportedEncodings []Encoding `protobuf:"varint,2,rep,packed,name=supported_encodings,json=supportedEncodings,proto3,enum=gnmi.Encoding" json:"supported_encodings,omitempty"` // Supported encodings. - GNMIVersion string `protobuf:"bytes,3,opt,name=gNMI_version,json=gNMIVersion,proto3" json:"gNMI_version,omitempty"` // Supported gNMI version. + state protoimpl.MessageState `protogen:"open.v1"` + SupportedModels []*ModelData `protobuf:"bytes,1,rep,name=supported_models,json=supportedModels,proto3" json:"supported_models,omitempty"` // Supported schema models. + SupportedEncodings []Encoding `protobuf:"varint,2,rep,packed,name=supported_encodings,json=supportedEncodings,proto3,enum=gnmi.Encoding" json:"supported_encodings,omitempty"` // Supported encodings. + GNMIVersion string `protobuf:"bytes,3,opt,name=gNMI_version,json=gNMIVersion,proto3" json:"gNMI_version,omitempty"` // Supported gNMI version. // Extension messages associated with the CapabilityResponse. See the // gNMI extension specification for further definition. - Extension []*gnmi_ext.Extension `protobuf:"bytes,4,rep,name=extension,proto3" json:"extension,omitempty"` + Extension []*gnmi_ext.Extension `protobuf:"bytes,4,rep,name=extension,proto3" json:"extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CapabilityResponse) Reset() { *x = CapabilityResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CapabilityResponse) String() string { @@ -2279,7 +2247,7 @@ func (*CapabilityResponse) ProtoMessage() {} func (x *CapabilityResponse) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2328,22 +2296,19 @@ func (x *CapabilityResponse) GetExtension() []*gnmi_ext.Extension { // the set of models from which data tree elements should be reported. // Reference: gNMI Specification Section 3.2.3 type ModelData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the model. + Organization string `protobuf:"bytes,2,opt,name=organization,proto3" json:"organization,omitempty"` // Organization publishing the model. + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` // Semantic version of the model. unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the model. - Organization string `protobuf:"bytes,2,opt,name=organization,proto3" json:"organization,omitempty"` // Organization publishing the model. - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` // Semantic version of the model. + sizeCache protoimpl.SizeCache } func (x *ModelData) Reset() { *x = ModelData{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ModelData) String() string { @@ -2354,7 +2319,7 @@ func (*ModelData) ProtoMessage() {} func (x *ModelData) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2411,7 +2376,7 @@ var ( var File_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto protoreflect.FileDescriptor -var file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc = []byte{ +var file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc = string([]byte{ 0x0a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2e, 0x70, 0x72, 0x6f, @@ -2721,16 +2686,16 @@ var file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc = []byte{ 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescOnce sync.Once - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescData = file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc + file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescData []byte ) func file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescGZIP() []byte { file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescOnce.Do(func() { - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescData) + file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc))) }) return file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDescData } @@ -2851,308 +2816,6 @@ func file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_init() { if File_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Notification); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Update); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*TypedValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*Path); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*PathElem); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*Error); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*Decimal64); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ScalarArray); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*SubscribeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*Poll); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*SubscribeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*SubscriptionList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*Subscription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*QOSMarking); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*Alias); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*AliasList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*SetRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*SetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*UpdateResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*GetRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*GetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*CapabilityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*CapabilityResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*ModelData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_msgTypes[2].OneofWrappers = []any{ (*TypedValue_StringVal)(nil), (*TypedValue_IntVal)(nil), @@ -3182,7 +2845,7 @@ func file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc)), NumEnums: 5, NumMessages: 26, NumExtensions: 1, @@ -3195,7 +2858,6 @@ func file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_init() { ExtensionInfos: file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_extTypes, }.Build() File_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto = out.File - file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_rawDesc = nil file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_goTypes = nil file_github_com_openconfig_gnmi_proto_gnmi_gnmi_proto_depIdxs = nil } diff --git a/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go b/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go index 4a5a86104..84ee798b7 100644 --- a/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go +++ b/api/go/github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.pb.go @@ -16,7 +16,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: github.com/openconfig/gnmi/proto/gnmi_ext/gnmi_ext.proto @@ -32,6 +32,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -93,25 +94,22 @@ func (ExtensionID) EnumDescriptor() ([]byte, []int) { // The Extension message contains a single gNMI extension. type Extension struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Ext: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Ext: // // *Extension_RegisteredExt // *Extension_MasterArbitration // *Extension_History - Ext isExtension_Ext `protobuf_oneof:"ext"` + Ext isExtension_Ext `protobuf_oneof:"ext"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Extension) Reset() { *x = Extension{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Extension) String() string { @@ -122,7 +120,7 @@ func (*Extension) ProtoMessage() {} func (x *Extension) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -137,30 +135,36 @@ func (*Extension) Descriptor() ([]byte, []int) { return file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescGZIP(), []int{0} } -func (m *Extension) GetExt() isExtension_Ext { - if m != nil { - return m.Ext +func (x *Extension) GetExt() isExtension_Ext { + if x != nil { + return x.Ext } return nil } func (x *Extension) GetRegisteredExt() *RegisteredExtension { - if x, ok := x.GetExt().(*Extension_RegisteredExt); ok { - return x.RegisteredExt + if x != nil { + if x, ok := x.Ext.(*Extension_RegisteredExt); ok { + return x.RegisteredExt + } } return nil } func (x *Extension) GetMasterArbitration() *MasterArbitration { - if x, ok := x.GetExt().(*Extension_MasterArbitration); ok { - return x.MasterArbitration + if x != nil { + if x, ok := x.Ext.(*Extension_MasterArbitration); ok { + return x.MasterArbitration + } } return nil } func (x *Extension) GetHistory() *History { - if x, ok := x.GetExt().(*Extension_History); ok { - return x.History + if x != nil { + if x, ok := x.Ext.(*Extension_History); ok { + return x.History + } } return nil } @@ -191,21 +195,18 @@ func (*Extension_History) isExtension_Ext() {} // The RegisteredExtension message defines an extension which is defined outside // of this file. type RegisteredExtension struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id ExtensionID `protobuf:"varint,1,opt,name=id,proto3,enum=gnmi_ext.ExtensionID" json:"id,omitempty"` // The unique ID assigned to this extension. + Msg []byte `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` // The binary-marshalled protobuf extension payload. unknownFields protoimpl.UnknownFields - - Id ExtensionID `protobuf:"varint,1,opt,name=id,proto3,enum=gnmi_ext.ExtensionID" json:"id,omitempty"` // The unique ID assigned to this extension. - Msg []byte `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` // The binary-marshalled protobuf extension payload. + sizeCache protoimpl.SizeCache } func (x *RegisteredExtension) Reset() { *x = RegisteredExtension{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RegisteredExtension) String() string { @@ -216,7 +217,7 @@ func (*RegisteredExtension) ProtoMessage() {} func (x *RegisteredExtension) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -251,21 +252,18 @@ func (x *RegisteredExtension) GetMsg() []byte { // The document about gNMI master arbitration can be found at // https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-master-arbitration.md type MasterArbitration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Role *Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` + ElectionId *Uint128 `protobuf:"bytes,2,opt,name=election_id,json=electionId,proto3" json:"election_id,omitempty"` unknownFields protoimpl.UnknownFields - - Role *Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` - ElectionId *Uint128 `protobuf:"bytes,2,opt,name=election_id,json=electionId,proto3" json:"election_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MasterArbitration) Reset() { *x = MasterArbitration{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MasterArbitration) String() string { @@ -276,7 +274,7 @@ func (*MasterArbitration) ProtoMessage() {} func (x *MasterArbitration) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -307,21 +305,18 @@ func (x *MasterArbitration) GetElectionId() *Uint128 { // Representation of unsigned 128-bit integer. type Uint128 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + High uint64 `protobuf:"varint,1,opt,name=high,proto3" json:"high,omitempty"` + Low uint64 `protobuf:"varint,2,opt,name=low,proto3" json:"low,omitempty"` unknownFields protoimpl.UnknownFields - - High uint64 `protobuf:"varint,1,opt,name=high,proto3" json:"high,omitempty"` - Low uint64 `protobuf:"varint,2,opt,name=low,proto3" json:"low,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Uint128) Reset() { *x = Uint128{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Uint128) String() string { @@ -332,7 +327,7 @@ func (*Uint128) ProtoMessage() {} func (x *Uint128) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -363,20 +358,17 @@ func (x *Uint128) GetLow() uint64 { // There can be one master for each role. The role is identified by its id. type Role struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Role) Reset() { *x = Role{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Role) String() string { @@ -387,7 +379,7 @@ func (*Role) ProtoMessage() {} func (x *Role) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -413,24 +405,21 @@ func (x *Role) GetId() string { // spec can be found at // https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-history.md type History struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Request: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Request: // // *History_SnapshotTime // *History_Range - Request isHistory_Request `protobuf_oneof:"request"` + Request isHistory_Request `protobuf_oneof:"request"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *History) Reset() { *x = History{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *History) String() string { @@ -441,7 +430,7 @@ func (*History) ProtoMessage() {} func (x *History) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -456,23 +445,27 @@ func (*History) Descriptor() ([]byte, []int) { return file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescGZIP(), []int{5} } -func (m *History) GetRequest() isHistory_Request { - if m != nil { - return m.Request +func (x *History) GetRequest() isHistory_Request { + if x != nil { + return x.Request } return nil } func (x *History) GetSnapshotTime() int64 { - if x, ok := x.GetRequest().(*History_SnapshotTime); ok { - return x.SnapshotTime + if x != nil { + if x, ok := x.Request.(*History_SnapshotTime); ok { + return x.SnapshotTime + } } return 0 } func (x *History) GetRange() *TimeRange { - if x, ok := x.GetRequest().(*History_Range); ok { - return x.Range + if x != nil { + if x, ok := x.Request.(*History_Range); ok { + return x.Range + } } return nil } @@ -494,21 +487,18 @@ func (*History_SnapshotTime) isHistory_Request() {} func (*History_Range) isHistory_Request() {} type TimeRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` // Nanoseconds since the epoch + End int64 `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` // Nanoseconds since the epoch unknownFields protoimpl.UnknownFields - - Start int64 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"` // Nanoseconds since the epoch - End int64 `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` // Nanoseconds since the epoch + sizeCache protoimpl.SizeCache } func (x *TimeRange) Reset() { *x = TimeRange{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TimeRange) String() string { @@ -519,7 +509,7 @@ func (*TimeRange) ProtoMessage() {} func (x *TimeRange) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -550,7 +540,7 @@ func (x *TimeRange) GetEnd() int64 { var File_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto protoreflect.FileDescriptor -var file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc = []byte{ +var file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc = string([]byte{ 0x0a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x5f, 0x65, 0x78, 0x74, 0x2f, 0x67, 0x6e, 0x6d, 0x69, @@ -602,16 +592,16 @@ var file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc = []by 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x5f, 0x65, 0x78, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescOnce sync.Once - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescData = file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc + file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescData []byte ) func file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescGZIP() []byte { file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescOnce.Do(func() { - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescData) + file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc))) }) return file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDescData } @@ -648,92 +638,6 @@ func file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_init() { if File_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Extension); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*RegisteredExtension); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*MasterArbitration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*Uint128); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*Role); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*History); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*TimeRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes[0].OneofWrappers = []any{ (*Extension_RegisteredExt)(nil), (*Extension_MasterArbitration)(nil), @@ -747,7 +651,7 @@ func file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc)), NumEnums: 1, NumMessages: 7, NumExtensions: 0, @@ -759,7 +663,6 @@ func file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_init() { MessageInfos: file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_msgTypes, }.Build() File_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto = out.File - file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_rawDesc = nil file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_goTypes = nil file_github_com_openconfig_gnmi_proto_gnmi_ext_gnmi_ext_proto_depIdxs = nil } diff --git a/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go b/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go index 1d8bdcf02..f76d4b320 100644 --- a/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go +++ b/api/go/github.com/openconfig/gnmi/proto/target/target.pb.go @@ -16,7 +16,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: github.com/openconfig/gnmi/proto/target/target.proto @@ -31,6 +31,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -43,21 +44,18 @@ const ( // Configuration holds all information necessary for a caching gNMI collector // to establish subscriptions to a list of gNMI targets. type Configuration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Request is a keyed list of all SubscriptionRequests that can be sent to // to targets in the Configuration. // The request must have at minimum a SubscriptionList with a prefix // containing origin and one or more Subscriptions. Only the STREAM mode is // supported. - Request map[string]*gnmi.SubscribeRequest `protobuf:"bytes,1,rep,name=request,proto3" json:"request,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Request map[string]*gnmi.SubscribeRequest `protobuf:"bytes,1,rep,name=request,proto3" json:"request,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Target is the full list of targets connected to by a caching gNMI // collector. The key of the map is a unique name to identify a target and // is set in the prefix.target of a SubscriptionRequest message when connecting // to each respective target. - Target map[string]*Target `protobuf:"bytes,2,rep,name=target,proto3" json:"target,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Target map[string]*Target `protobuf:"bytes,2,rep,name=target,proto3" json:"target,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Identifier for the caching collector. InstanceId string `protobuf:"bytes,3,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` // Revision for this Configuration. Systems that non-atomically write @@ -65,16 +63,16 @@ type Configuration struct { // protobuf serialization of fields in order. Presence of this field makes no // guarantee. Consumers should account for atomicity constraints of their // environment and any custom encoding. - Revision int64 `protobuf:"varint,536870911,opt,name=revision,proto3" json:"revision,omitempty"` + Revision int64 `protobuf:"varint,536870911,opt,name=revision,proto3" json:"revision,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Configuration) Reset() { *x = Configuration{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Configuration) String() string { @@ -85,7 +83,7 @@ func (*Configuration) ProtoMessage() {} func (x *Configuration) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -131,10 +129,7 @@ func (x *Configuration) GetRevision() int64 { // Target is the information necessary to establish a single gNMI Subscribe RPC // to be collected and cached. type Target struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // A list of address and port or name that resolves to an address and port. Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` // Credentials to use in metadata for authorization of the RPC @@ -143,16 +138,16 @@ type Target struct { // the request map of the Configuration message. Request string `protobuf:"bytes,3,opt,name=request,proto3" json:"request,omitempty"` // Additional target metadata. - Meta map[string]string `protobuf:"bytes,4,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Meta map[string]string `protobuf:"bytes,4,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Target) Reset() { *x = Target{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Target) String() string { @@ -163,7 +158,7 @@ func (*Target) ProtoMessage() {} func (x *Target) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -209,23 +204,20 @@ func (x *Target) GetMeta() map[string]string { // Credentials contains the fields necessary for authentication of the client to // the target. type Credentials struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` // Password lookup ID. - PasswordId string `protobuf:"bytes,3,opt,name=password_id,json=passwordId,proto3" json:"password_id,omitempty"` + PasswordId string `protobuf:"bytes,3,opt,name=password_id,json=passwordId,proto3" json:"password_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Credentials) Reset() { *x = Credentials{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Credentials) String() string { @@ -236,7 +228,7 @@ func (*Credentials) ProtoMessage() {} func (x *Credentials) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -274,7 +266,7 @@ func (x *Credentials) GetPasswordId() string { var File_github_com_openconfig_gnmi_proto_target_target_proto protoreflect.FileDescriptor -var file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc = []byte{ +var file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc = string([]byte{ 0x0a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, @@ -329,16 +321,16 @@ var file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc = []byte{ 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescOnce sync.Once - file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescData = file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc + file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescData []byte ) func file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescGZIP() []byte { file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescOnce.Do(func() { - file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescData) + file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc))) }) return file_github_com_openconfig_gnmi_proto_target_target_proto_rawDescData } @@ -372,49 +364,11 @@ func file_github_com_openconfig_gnmi_proto_target_target_proto_init() { if File_github_com_openconfig_gnmi_proto_target_target_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Configuration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Target); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*Credentials); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc), len(file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc)), NumEnums: 0, NumMessages: 6, NumExtensions: 0, @@ -425,7 +379,6 @@ func file_github_com_openconfig_gnmi_proto_target_target_proto_init() { MessageInfos: file_github_com_openconfig_gnmi_proto_target_target_proto_msgTypes, }.Build() File_github_com_openconfig_gnmi_proto_target_target_proto = out.File - file_github_com_openconfig_gnmi_proto_target_target_proto_rawDesc = nil file_github_com_openconfig_gnmi_proto_target_target_proto_goTypes = nil file_github_com_openconfig_gnmi_proto_target_target_proto_depIdxs = nil } diff --git a/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go b/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go index 0c0a049ba..e2efcc837 100644 --- a/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go +++ b/api/go/github.com/openconfig/gnmi/testing/fake/proto/fake.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: github.com/openconfig/gnmi/testing/fake/proto/fake.proto @@ -17,6 +17,7 @@ import ( anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -130,21 +131,18 @@ func (Config_ClientType) EnumDescriptor() ([]byte, []int) { // Configuration is used to store all agent configuration for the fake agent // server. Each config describes a single agent hosted on the server. type Configuration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Repeated list of targets to emulate. - Config []*Config `protobuf:"bytes,1,rep,name=config,proto3" json:"config,omitempty"` + Config []*Config `protobuf:"bytes,1,rep,name=config,proto3" json:"config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Configuration) Reset() { *x = Configuration{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Configuration) String() string { @@ -155,7 +153,7 @@ func (*Configuration) ProtoMessage() {} func (x *Configuration) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -178,21 +176,18 @@ func (x *Configuration) GetConfig() []*Config { } type Credentials struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` unknownFields protoimpl.UnknownFields - - Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Credentials) Reset() { *x = Credentials{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Credentials) String() string { @@ -203,7 +198,7 @@ func (*Credentials) ProtoMessage() {} func (x *Credentials) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -235,10 +230,7 @@ func (x *Credentials) GetPassword() string { // Config is a collection of values that together represent the update streams // for one or more fake devices. type Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The target for which the fake will publish values for. Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` // Port for the agent to listen on. If 0 or unset the agent will pick a port @@ -273,7 +265,7 @@ type Config struct { EnableDelay bool `protobuf:"varint,10,opt,name=enable_delay,json=enableDelay,proto3" json:"enable_delay,omitempty"` // Generator for value series for the target. // - // Types that are assignable to Generator: + // Types that are valid to be assigned to Generator: // // *Config_Custom // *Config_Random @@ -282,16 +274,16 @@ type Config struct { // tunnel_addr is the address of the tunnel server. TunnelAddr string `protobuf:"bytes,11,opt,name=tunnel_addr,json=tunnelAddr,proto3" json:"tunnel_addr,omitempty"` // tunnel_crt is the certificate file for the tunnel conection. - TunnelCrt string `protobuf:"bytes,12,opt,name=tunnel_crt,json=tunnelCrt,proto3" json:"tunnel_crt,omitempty"` + TunnelCrt string `protobuf:"bytes,12,opt,name=tunnel_crt,json=tunnelCrt,proto3" json:"tunnel_crt,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Config) Reset() { *x = Config{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Config) String() string { @@ -302,7 +294,7 @@ func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -389,30 +381,36 @@ func (x *Config) GetEnableDelay() bool { return false } -func (m *Config) GetGenerator() isConfig_Generator { - if m != nil { - return m.Generator +func (x *Config) GetGenerator() isConfig_Generator { + if x != nil { + return x.Generator } return nil } func (x *Config) GetCustom() *anypb.Any { - if x, ok := x.GetGenerator().(*Config_Custom); ok { - return x.Custom + if x != nil { + if x, ok := x.Generator.(*Config_Custom); ok { + return x.Custom + } } return nil } func (x *Config) GetRandom() *RandomGenerator { - if x, ok := x.GetGenerator().(*Config_Random); ok { - return x.Random + if x != nil { + if x, ok := x.Generator.(*Config_Random); ok { + return x.Random + } } return nil } func (x *Config) GetFixed() *FixedGenerator { - if x, ok := x.GetGenerator().(*Config_Fixed); ok { - return x.Fixed + if x != nil { + if x, ok := x.Generator.(*Config_Fixed); ok { + return x.Fixed + } } return nil } @@ -454,20 +452,17 @@ func (*Config_Random) isConfig_Generator() {} func (*Config_Fixed) isConfig_Generator() {} type FixedGenerator struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Responses []*gnmi.SubscribeResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"` unknownFields protoimpl.UnknownFields - - Responses []*gnmi.SubscribeResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"` + sizeCache protoimpl.SizeCache } func (x *FixedGenerator) Reset() { *x = FixedGenerator{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FixedGenerator) String() string { @@ -478,7 +473,7 @@ func (*FixedGenerator) ProtoMessage() {} func (x *FixedGenerator) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -501,21 +496,18 @@ func (x *FixedGenerator) GetResponses() []*gnmi.SubscribeResponse { } type RandomGenerator struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Seed int64 `protobuf:"varint,1,opt,name=seed,proto3" json:"seed,omitempty"` + Values []*Value `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"` unknownFields protoimpl.UnknownFields - - Seed int64 `protobuf:"varint,1,opt,name=seed,proto3" json:"seed,omitempty"` - Values []*Value `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RandomGenerator) Reset() { *x = RandomGenerator{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RandomGenerator) String() string { @@ -526,7 +518,7 @@ func (*RandomGenerator) ProtoMessage() {} func (x *RandomGenerator) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -557,18 +549,16 @@ func (x *RandomGenerator) GetValues() []*Value { // Delete will cause the value to be deleted at the Value's path. type DeleteValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteValue) Reset() { *x = DeleteValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteValue) String() string { @@ -579,7 +569,7 @@ func (*DeleteValue) ProtoMessage() {} func (x *DeleteValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -598,10 +588,7 @@ func (*DeleteValue) Descriptor() ([]byte, []int) { // path. A file containing a list of values can be used to simulate a network // device for integration tests. type Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The device specific, or OpenConfig path corresponding to a value. Path []string `protobuf:"bytes,1,rep,name=path,proto3" json:"path,omitempty"` // The initial timestamp and configuration on how the timestamp will change @@ -617,7 +604,7 @@ type Value struct { // The initial value of the chosen type including configuration on how the // value will mutate for subsequent updates. // - // Types that are assignable to Value: + // Types that are valid to be assigned to Value: // // *Value_IntValue // *Value_DoubleValue @@ -627,16 +614,16 @@ type Value struct { // *Value_BoolValue // *Value_UintValue // *Value_StringListValue - Value isValue_Value `protobuf_oneof:"value"` + Value isValue_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Value) Reset() { *x = Value{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Value) String() string { @@ -647,7 +634,7 @@ func (*Value) ProtoMessage() {} func (x *Value) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -690,65 +677,81 @@ func (x *Value) GetSeed() int64 { return 0 } -func (m *Value) GetValue() isValue_Value { - if m != nil { - return m.Value +func (x *Value) GetValue() isValue_Value { + if x != nil { + return x.Value } return nil } func (x *Value) GetIntValue() *IntValue { - if x, ok := x.GetValue().(*Value_IntValue); ok { - return x.IntValue + if x != nil { + if x, ok := x.Value.(*Value_IntValue); ok { + return x.IntValue + } } return nil } func (x *Value) GetDoubleValue() *DoubleValue { - if x, ok := x.GetValue().(*Value_DoubleValue); ok { - return x.DoubleValue + if x != nil { + if x, ok := x.Value.(*Value_DoubleValue); ok { + return x.DoubleValue + } } return nil } func (x *Value) GetStringValue() *StringValue { - if x, ok := x.GetValue().(*Value_StringValue); ok { - return x.StringValue + if x != nil { + if x, ok := x.Value.(*Value_StringValue); ok { + return x.StringValue + } } return nil } func (x *Value) GetSync() uint64 { - if x, ok := x.GetValue().(*Value_Sync); ok { - return x.Sync + if x != nil { + if x, ok := x.Value.(*Value_Sync); ok { + return x.Sync + } } return 0 } func (x *Value) GetDelete() *DeleteValue { - if x, ok := x.GetValue().(*Value_Delete); ok { - return x.Delete + if x != nil { + if x, ok := x.Value.(*Value_Delete); ok { + return x.Delete + } } return nil } func (x *Value) GetBoolValue() *BoolValue { - if x, ok := x.GetValue().(*Value_BoolValue); ok { - return x.BoolValue + if x != nil { + if x, ok := x.Value.(*Value_BoolValue); ok { + return x.BoolValue + } } return nil } func (x *Value) GetUintValue() *UintValue { - if x, ok := x.GetValue().(*Value_UintValue); ok { - return x.UintValue + if x != nil { + if x, ok := x.Value.(*Value_UintValue); ok { + return x.UintValue + } } return nil } func (x *Value) GetStringListValue() *StringListValue { - if x, ok := x.GetValue().(*Value_StringListValue); ok { - return x.StringListValue + if x != nil { + if x, ok := x.Value.(*Value_StringListValue); ok { + return x.StringListValue + } } return nil } @@ -806,10 +809,7 @@ func (*Value_UintValue) isValue_Value() {} func (*Value_StringListValue) isValue_Value() {} type Timestamp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Initial timestamp for the corresponding value, nanoseconds since epoch. // This value need have no relation to absolute real-time as the stream of // of updates is generated without regard to the real clock and can be run @@ -818,17 +818,17 @@ type Timestamp struct { // These values will vary the change in the timestamp for subsequent outputs // by a value between delta_min and delta_max. Set to the same value to force // a set periodic interval. - DeltaMin int64 `protobuf:"varint,2,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` - DeltaMax int64 `protobuf:"varint,3,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + DeltaMin int64 `protobuf:"varint,2,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` + DeltaMax int64 `protobuf:"varint,3,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Timestamp) Reset() { *x = Timestamp{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Timestamp) String() string { @@ -839,7 +839,7 @@ func (*Timestamp) ProtoMessage() {} func (x *Timestamp) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -876,10 +876,7 @@ func (x *Timestamp) GetDeltaMax() int64 { } type IntValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // If distribution is IntRange, value is used as the initial value // inside [minimum, maximum] and hold the value as it mutates. // If distribution is IntList, value is only used to hold the value as it @@ -887,20 +884,20 @@ type IntValue struct { // If no distribution is set, value is used as it mutates, i.e. constant // update. Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` - // Types that are assignable to Distribution: + // Types that are valid to be assigned to Distribution: // // *IntValue_Range // *IntValue_List - Distribution isIntValue_Distribution `protobuf_oneof:"distribution"` + Distribution isIntValue_Distribution `protobuf_oneof:"distribution"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *IntValue) Reset() { *x = IntValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *IntValue) String() string { @@ -911,7 +908,7 @@ func (*IntValue) ProtoMessage() {} func (x *IntValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -933,23 +930,27 @@ func (x *IntValue) GetValue() int64 { return 0 } -func (m *IntValue) GetDistribution() isIntValue_Distribution { - if m != nil { - return m.Distribution +func (x *IntValue) GetDistribution() isIntValue_Distribution { + if x != nil { + return x.Distribution } return nil } func (x *IntValue) GetRange() *IntRange { - if x, ok := x.GetDistribution().(*IntValue_Range); ok { - return x.Range + if x != nil { + if x, ok := x.Distribution.(*IntValue_Range); ok { + return x.Range + } } return nil } func (x *IntValue) GetList() *IntList { - if x, ok := x.GetDistribution().(*IntValue_List); ok { - return x.List + if x != nil { + if x, ok := x.Distribution.(*IntValue_List); ok { + return x.List + } } return nil } @@ -971,10 +972,7 @@ func (*IntValue_Range) isIntValue_Distribution() {} func (*IntValue_List) isIntValue_Distribution() {} type IntRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The range of the value allowed. Minimum int64 `protobuf:"varint,1,opt,name=minimum,proto3" json:"minimum,omitempty"` Maximum int64 `protobuf:"varint,2,opt,name=maximum,proto3" json:"maximum,omitempty"` @@ -983,17 +981,17 @@ type IntRange struct { // minimum and maximum are still respected and values will saturate at the // boundaries if they are exceeded. If not set subsequent value is a value // randomly chosen between minimum and maximum. - DeltaMin int64 `protobuf:"varint,3,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` - DeltaMax int64 `protobuf:"varint,4,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + DeltaMin int64 `protobuf:"varint,3,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` + DeltaMax int64 `protobuf:"varint,4,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *IntRange) Reset() { *x = IntRange{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *IntRange) String() string { @@ -1004,7 +1002,7 @@ func (*IntRange) ProtoMessage() {} func (x *IntRange) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1048,24 +1046,21 @@ func (x *IntRange) GetDeltaMax() int64 { } type IntList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The set of values which can be used. Options []int64 `protobuf:"varint,1,rep,packed,name=options,proto3" json:"options,omitempty"` // Set to true to randomize selection of value from options. If false, the // values are cycled in order, starting at index 0. - Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *IntList) Reset() { *x = IntList{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *IntList) String() string { @@ -1076,7 +1071,7 @@ func (*IntList) ProtoMessage() {} func (x *IntList) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1106,10 +1101,7 @@ func (x *IntList) GetRandom() bool { } type DoubleValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // If distribution is DoubleRange, value is used as the initial value // inside [minimum, maximum] and hold the value as it mutates. // If distribution is DoubleList, value is only used to hold the value as it @@ -1117,20 +1109,20 @@ type DoubleValue struct { // If no distribution is set, value is used as it mutates, i.e. constant // update. Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` - // Types that are assignable to Distribution: + // Types that are valid to be assigned to Distribution: // // *DoubleValue_Range // *DoubleValue_List - Distribution isDoubleValue_Distribution `protobuf_oneof:"distribution"` + Distribution isDoubleValue_Distribution `protobuf_oneof:"distribution"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DoubleValue) Reset() { *x = DoubleValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DoubleValue) String() string { @@ -1141,7 +1133,7 @@ func (*DoubleValue) ProtoMessage() {} func (x *DoubleValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1163,23 +1155,27 @@ func (x *DoubleValue) GetValue() float64 { return 0 } -func (m *DoubleValue) GetDistribution() isDoubleValue_Distribution { - if m != nil { - return m.Distribution +func (x *DoubleValue) GetDistribution() isDoubleValue_Distribution { + if x != nil { + return x.Distribution } return nil } func (x *DoubleValue) GetRange() *DoubleRange { - if x, ok := x.GetDistribution().(*DoubleValue_Range); ok { - return x.Range + if x != nil { + if x, ok := x.Distribution.(*DoubleValue_Range); ok { + return x.Range + } } return nil } func (x *DoubleValue) GetList() *DoubleList { - if x, ok := x.GetDistribution().(*DoubleValue_List); ok { - return x.List + if x != nil { + if x, ok := x.Distribution.(*DoubleValue_List); ok { + return x.List + } } return nil } @@ -1201,10 +1197,7 @@ func (*DoubleValue_Range) isDoubleValue_Distribution() {} func (*DoubleValue_List) isDoubleValue_Distribution() {} type DoubleRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The range of the value allowed. Minimum float64 `protobuf:"fixed64,1,opt,name=minimum,proto3" json:"minimum,omitempty"` Maximum float64 `protobuf:"fixed64,2,opt,name=maximum,proto3" json:"maximum,omitempty"` @@ -1212,17 +1205,17 @@ type DoubleRange struct { // where delta is randomly chosen between delta_min and delta_max. The range // minimum and maximum are still respected. If not set subsequent value is a // value randomly chosen between minimum and maximum. - DeltaMin float64 `protobuf:"fixed64,3,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` - DeltaMax float64 `protobuf:"fixed64,4,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + DeltaMin float64 `protobuf:"fixed64,3,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` + DeltaMax float64 `protobuf:"fixed64,4,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DoubleRange) Reset() { *x = DoubleRange{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DoubleRange) String() string { @@ -1233,7 +1226,7 @@ func (*DoubleRange) ProtoMessage() {} func (x *DoubleRange) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1277,24 +1270,21 @@ func (x *DoubleRange) GetDeltaMax() float64 { } type DoubleList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The set of values which can be used. Options []float64 `protobuf:"fixed64,1,rep,packed,name=options,proto3" json:"options,omitempty"` // Set to true to randomize selection of value from options. If false, the // values are cycled in order. - Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DoubleList) Reset() { *x = DoubleList{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DoubleList) String() string { @@ -1305,7 +1295,7 @@ func (*DoubleList) ProtoMessage() {} func (x *DoubleList) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1335,28 +1325,25 @@ func (x *DoubleList) GetRandom() bool { } type StringValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // If distribution is StringList, value is used to hold the value as it // mutates. // If no distribution is set, value is used as it mutates, i.e. constant // update. Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - // Types that are assignable to Distribution: + // Types that are valid to be assigned to Distribution: // // *StringValue_List - Distribution isStringValue_Distribution `protobuf_oneof:"distribution"` + Distribution isStringValue_Distribution `protobuf_oneof:"distribution"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StringValue) Reset() { *x = StringValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StringValue) String() string { @@ -1367,7 +1354,7 @@ func (*StringValue) ProtoMessage() {} func (x *StringValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1389,16 +1376,18 @@ func (x *StringValue) GetValue() string { return "" } -func (m *StringValue) GetDistribution() isStringValue_Distribution { - if m != nil { - return m.Distribution +func (x *StringValue) GetDistribution() isStringValue_Distribution { + if x != nil { + return x.Distribution } return nil } func (x *StringValue) GetList() *StringList { - if x, ok := x.GetDistribution().(*StringValue_List); ok { - return x.List + if x != nil { + if x, ok := x.Distribution.(*StringValue_List); ok { + return x.List + } } return nil } @@ -1414,24 +1403,21 @@ type StringValue_List struct { func (*StringValue_List) isStringValue_Distribution() {} type StringList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The set of strings which can be used. Options []string `protobuf:"bytes,1,rep,name=options,proto3" json:"options,omitempty"` // Set to true to randomize selection of value from options. If false, the // values are cycled in order, starting at index 0. - Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StringList) Reset() { *x = StringList{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StringList) String() string { @@ -1442,7 +1428,7 @@ func (*StringList) ProtoMessage() {} func (x *StringList) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1472,28 +1458,25 @@ func (x *StringList) GetRandom() bool { } type StringListValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // If distribution is StringList, value is used to hold the value as it // mutates. // If no distribution is set, value is used as it mutates, i.e. constant // update. Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` - // Types that are assignable to Distribution: + // Types that are valid to be assigned to Distribution: // // *StringListValue_List - Distribution isStringListValue_Distribution `protobuf_oneof:"distribution"` + Distribution isStringListValue_Distribution `protobuf_oneof:"distribution"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StringListValue) Reset() { *x = StringListValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StringListValue) String() string { @@ -1504,7 +1487,7 @@ func (*StringListValue) ProtoMessage() {} func (x *StringListValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1526,16 +1509,18 @@ func (x *StringListValue) GetValue() []string { return nil } -func (m *StringListValue) GetDistribution() isStringListValue_Distribution { - if m != nil { - return m.Distribution +func (x *StringListValue) GetDistribution() isStringListValue_Distribution { + if x != nil { + return x.Distribution } return nil } func (x *StringListValue) GetList() *StringList { - if x, ok := x.GetDistribution().(*StringListValue_List); ok { - return x.List + if x != nil { + if x, ok := x.Distribution.(*StringListValue_List); ok { + return x.List + } } return nil } @@ -1551,28 +1536,25 @@ type StringListValue_List struct { func (*StringListValue_List) isStringListValue_Distribution() {} type BoolValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // If distribution is BoolList, value is only used to hold the value as it // mutates. // If no distribution is set, value is used as it mutates, i.e. constant // update. Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` - // Types that are assignable to Distribution: + // Types that are valid to be assigned to Distribution: // // *BoolValue_List - Distribution isBoolValue_Distribution `protobuf_oneof:"distribution"` + Distribution isBoolValue_Distribution `protobuf_oneof:"distribution"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BoolValue) Reset() { *x = BoolValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BoolValue) String() string { @@ -1583,7 +1565,7 @@ func (*BoolValue) ProtoMessage() {} func (x *BoolValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1605,16 +1587,18 @@ func (x *BoolValue) GetValue() bool { return false } -func (m *BoolValue) GetDistribution() isBoolValue_Distribution { - if m != nil { - return m.Distribution +func (x *BoolValue) GetDistribution() isBoolValue_Distribution { + if x != nil { + return x.Distribution } return nil } func (x *BoolValue) GetList() *BoolList { - if x, ok := x.GetDistribution().(*BoolValue_List); ok { - return x.List + if x != nil { + if x, ok := x.Distribution.(*BoolValue_List); ok { + return x.List + } } return nil } @@ -1630,24 +1614,21 @@ type BoolValue_List struct { func (*BoolValue_List) isBoolValue_Distribution() {} type BoolList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The set of values which can be used. Options []bool `protobuf:"varint,1,rep,packed,name=options,proto3" json:"options,omitempty"` // Set to true to randomize selection of value from options. If false, the // values are cycled in order, starting at index 0. - Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BoolList) Reset() { *x = BoolList{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BoolList) String() string { @@ -1658,7 +1639,7 @@ func (*BoolList) ProtoMessage() {} func (x *BoolList) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1688,10 +1669,7 @@ func (x *BoolList) GetRandom() bool { } type UintValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // If distribution is UintRange, value is used as the initial value // inside [minimum, maximum] and hold the value as it mutates. // If distribution is UintList, value is only used to hold the value as it @@ -1699,20 +1677,20 @@ type UintValue struct { // If no distribution is set, value is used as it mutates, i.e. constant // update. Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` - // Types that are assignable to Distribution: + // Types that are valid to be assigned to Distribution: // // *UintValue_Range // *UintValue_List - Distribution isUintValue_Distribution `protobuf_oneof:"distribution"` + Distribution isUintValue_Distribution `protobuf_oneof:"distribution"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UintValue) Reset() { *x = UintValue{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UintValue) String() string { @@ -1723,7 +1701,7 @@ func (*UintValue) ProtoMessage() {} func (x *UintValue) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1745,23 +1723,27 @@ func (x *UintValue) GetValue() uint64 { return 0 } -func (m *UintValue) GetDistribution() isUintValue_Distribution { - if m != nil { - return m.Distribution +func (x *UintValue) GetDistribution() isUintValue_Distribution { + if x != nil { + return x.Distribution } return nil } func (x *UintValue) GetRange() *UintRange { - if x, ok := x.GetDistribution().(*UintValue_Range); ok { - return x.Range + if x != nil { + if x, ok := x.Distribution.(*UintValue_Range); ok { + return x.Range + } } return nil } func (x *UintValue) GetList() *UintList { - if x, ok := x.GetDistribution().(*UintValue_List); ok { - return x.List + if x != nil { + if x, ok := x.Distribution.(*UintValue_List); ok { + return x.List + } } return nil } @@ -1783,10 +1765,7 @@ func (*UintValue_Range) isUintValue_Distribution() {} func (*UintValue_List) isUintValue_Distribution() {} type UintRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The range of the value allowed. Minimum uint64 `protobuf:"varint,1,opt,name=minimum,proto3" json:"minimum,omitempty"` Maximum uint64 `protobuf:"varint,2,opt,name=maximum,proto3" json:"maximum,omitempty"` @@ -1795,17 +1774,17 @@ type UintRange struct { // minimum and maximum are still respected and values will saturate at the // boundaries if they are exceeded. If not set subsequent value is a value // randomly chosen between minimum and maximum. - DeltaMin int64 `protobuf:"varint,3,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` - DeltaMax int64 `protobuf:"varint,4,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + DeltaMin int64 `protobuf:"varint,3,opt,name=delta_min,json=deltaMin,proto3" json:"delta_min,omitempty"` + DeltaMax int64 `protobuf:"varint,4,opt,name=delta_max,json=deltaMax,proto3" json:"delta_max,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UintRange) Reset() { *x = UintRange{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UintRange) String() string { @@ -1816,7 +1795,7 @@ func (*UintRange) ProtoMessage() {} func (x *UintRange) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1860,24 +1839,21 @@ func (x *UintRange) GetDeltaMax() int64 { } type UintList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The set of values which can be used. Options []uint64 `protobuf:"varint,1,rep,packed,name=options,proto3" json:"options,omitempty"` // Set to true to randomize selection of value from options. If false, the // values are cycled in order, starting at index 0. - Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + Random bool `protobuf:"varint,2,opt,name=random,proto3" json:"random,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UintList) Reset() { *x = UintList{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UintList) String() string { @@ -1888,7 +1864,7 @@ func (*UintList) ProtoMessage() {} func (x *UintList) ProtoReflect() protoreflect.Message { mi := &file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1919,7 +1895,7 @@ func (x *UintList) GetRandom() bool { var File_github_com_openconfig_gnmi_testing_fake_proto_fake_proto protoreflect.FileDescriptor -var file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc = []byte{ +var file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc = string([]byte{ 0x0a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x66, 0x61, 0x6b, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, @@ -2136,16 +2112,16 @@ var file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc = []by 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x6d, 0x69, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x66, 0x61, 0x6b, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x67, 0x6e, 0x6d, 0x69, 0x5f, 0x66, 0x61, 0x6b, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescOnce sync.Once - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescData = file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc + file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescData []byte ) func file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescGZIP() []byte { file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescOnce.Do(func() { - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescData) + file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc), len(file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc))) }) return file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDescData } @@ -2225,272 +2201,6 @@ func file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_init() { if File_github_com_openconfig_gnmi_testing_fake_proto_fake_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Configuration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Credentials); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*FixedGenerator); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*RandomGenerator); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*DeleteValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*Timestamp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*IntValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*IntRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*IntList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*DoubleValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*DoubleRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*DoubleList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*StringValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*StringList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*StringListValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*BoolValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*BoolList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*UintValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*UintRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*UintList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes[2].OneofWrappers = []any{ (*Config_Custom)(nil), (*Config_Random)(nil), @@ -2531,7 +2241,7 @@ func file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc), len(file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc)), NumEnums: 2, NumMessages: 22, NumExtensions: 0, @@ -2543,7 +2253,6 @@ func file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_init() { MessageInfos: file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_msgTypes, }.Build() File_github_com_openconfig_gnmi_testing_fake_proto_fake_proto = out.File - file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_rawDesc = nil file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_goTypes = nil file_github_com_openconfig_gnmi_testing_fake_proto_fake_proto_depIdxs = nil } diff --git a/api/go/gosdn/app/app.pb.go b/api/go/gosdn/app/app.pb.go index 30ffd0da2..4d4910459 100644 --- a/api/go/gosdn/app/app.pb.go +++ b/api/go/gosdn/app/app.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/app/app.proto @@ -15,6 +15,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -25,22 +26,19 @@ const ( ) type AppRegisterRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Appname string `protobuf:"bytes,2,opt,name=appname,proto3" json:"appname,omitempty"` + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Appname string `protobuf:"bytes,2,opt,name=appname,proto3" json:"appname,omitempty"` - Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AppRegisterRequest) Reset() { *x = AppRegisterRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_app_app_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_app_app_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AppRegisterRequest) String() string { @@ -51,7 +49,7 @@ func (*AppRegisterRequest) ProtoMessage() {} func (x *AppRegisterRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_app_app_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -88,21 +86,18 @@ func (x *AppRegisterRequest) GetToken() string { } type AppRegisterResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Queueconnection string `protobuf:"bytes,2,opt,name=queueconnection,proto3" json:"queueconnection,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Queueconnection string `protobuf:"bytes,2,opt,name=queueconnection,proto3" json:"queueconnection,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AppRegisterResponse) Reset() { *x = AppRegisterResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_app_app_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_app_app_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AppRegisterResponse) String() string { @@ -113,7 +108,7 @@ func (*AppRegisterResponse) ProtoMessage() {} func (x *AppRegisterResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_app_app_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -143,21 +138,18 @@ func (x *AppRegisterResponse) GetQueueconnection() string { } type AppDeregisterRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Appname string `protobuf:"bytes,2,opt,name=appname,proto3" json:"appname,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Appname string `protobuf:"bytes,2,opt,name=appname,proto3" json:"appname,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AppDeregisterRequest) Reset() { *x = AppDeregisterRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_app_app_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_app_app_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AppDeregisterRequest) String() string { @@ -168,7 +160,7 @@ func (*AppDeregisterRequest) ProtoMessage() {} func (x *AppDeregisterRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_app_app_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -198,20 +190,17 @@ func (x *AppDeregisterRequest) GetAppname() string { } type AppDeregisterResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AppDeregisterResponse) Reset() { *x = AppDeregisterResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_app_app_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_app_app_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AppDeregisterResponse) String() string { @@ -222,7 +211,7 @@ func (*AppDeregisterResponse) ProtoMessage() {} func (x *AppDeregisterResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_app_app_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -246,7 +235,7 @@ func (x *AppDeregisterResponse) GetTimestamp() int64 { var File_gosdn_app_app_proto protoreflect.FileDescriptor -var file_gosdn_app_app_proto_rawDesc = []byte{ +var file_gosdn_app_app_proto_rawDesc = string([]byte{ 0x0a, 0x13, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, @@ -298,16 +287,16 @@ var file_gosdn_app_app_proto_rawDesc = []byte{ 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_app_app_proto_rawDescOnce sync.Once - file_gosdn_app_app_proto_rawDescData = file_gosdn_app_app_proto_rawDesc + file_gosdn_app_app_proto_rawDescData []byte ) func file_gosdn_app_app_proto_rawDescGZIP() []byte { file_gosdn_app_app_proto_rawDescOnce.Do(func() { - file_gosdn_app_app_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_app_app_proto_rawDescData) + file_gosdn_app_app_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_app_app_proto_rawDesc), len(file_gosdn_app_app_proto_rawDesc))) }) return file_gosdn_app_app_proto_rawDescData } @@ -336,61 +325,11 @@ func file_gosdn_app_app_proto_init() { if File_gosdn_app_app_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_app_app_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*AppRegisterRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_app_app_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*AppRegisterResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_app_app_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*AppDeregisterRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_app_app_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*AppDeregisterResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_app_app_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_app_app_proto_rawDesc), len(file_gosdn_app_app_proto_rawDesc)), NumEnums: 0, NumMessages: 4, NumExtensions: 0, @@ -401,7 +340,6 @@ func file_gosdn_app_app_proto_init() { MessageInfos: file_gosdn_app_app_proto_msgTypes, }.Build() File_gosdn_app_app_proto = out.File - file_gosdn_app_app_proto_rawDesc = nil file_gosdn_app_app_proto_goTypes = nil file_gosdn_app_app_proto_depIdxs = nil } diff --git a/api/go/gosdn/app/app.pb.gw.go b/api/go/gosdn/app/app.pb.gw.go index 8ff05688f..852173e5a 100644 --- a/api/go/gosdn/app/app.pb.gw.go +++ b/api/go/gosdn/app/app.pb.gw.go @@ -10,6 +10,7 @@ package app import ( "context" + "errors" "io" "net/http" @@ -24,63 +25,62 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_AppService_Register_0(ctx context.Context, marshaler runtime.Marshaler, client AppServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AppRegisterRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AppRegisterRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Register(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AppService_Register_0(ctx context.Context, marshaler runtime.Marshaler, server AppServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AppRegisterRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AppRegisterRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Register(ctx, &protoReq) return msg, metadata, err - } func request_AppService_Deregister_0(ctx context.Context, marshaler runtime.Marshaler, client AppServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AppDeregisterRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AppDeregisterRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Deregister(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AppService_Deregister_0(ctx context.Context, marshaler runtime.Marshaler, server AppServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AppDeregisterRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AppDeregisterRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Deregister(ctx, &protoReq) return msg, metadata, err - } // RegisterAppServiceHandlerServer registers the http handlers for service AppService to "mux". @@ -89,16 +89,13 @@ func local_request_AppService_Deregister_0(ctx context.Context, marshaler runtim // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAppServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterAppServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AppServiceServer) error { - - mux.Handle("POST", pattern_AppService_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AppService_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.app.AppService/Register", runtime.WithHTTPPathPattern("/register")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.app.AppService/Register", runtime.WithHTTPPathPattern("/register")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -110,20 +107,15 @@ func RegisterAppServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AppService_Register_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AppService_Deregister_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AppService_Deregister_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.app.AppService/Deregister", runtime.WithHTTPPathPattern("/deregister")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.app.AppService/Deregister", runtime.WithHTTPPathPattern("/deregister")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -135,9 +127,7 @@ func RegisterAppServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AppService_Deregister_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -164,7 +154,6 @@ func RegisterAppServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Ser } }() }() - return RegisterAppServiceHandler(ctx, mux, conn) } @@ -180,14 +169,11 @@ func RegisterAppServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "AppServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterAppServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AppServiceClient) error { - - mux.Handle("POST", pattern_AppService_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AppService_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.app.AppService/Register", runtime.WithHTTPPathPattern("/register")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.app.AppService/Register", runtime.WithHTTPPathPattern("/register")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -198,18 +184,13 @@ func RegisterAppServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AppService_Register_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AppService_Deregister_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AppService_Deregister_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.app.AppService/Deregister", runtime.WithHTTPPathPattern("/deregister")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.app.AppService/Deregister", runtime.WithHTTPPathPattern("/deregister")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -220,22 +201,17 @@ func RegisterAppServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AppService_Deregister_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_AppService_Register_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"register"}, "")) - + pattern_AppService_Register_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"register"}, "")) pattern_AppService_Deregister_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"deregister"}, "")) ) var ( - forward_AppService_Register_0 = runtime.ForwardResponseMessage - + forward_AppService_Register_0 = runtime.ForwardResponseMessage forward_AppService_Deregister_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go index c999d4db4..257316482 100644 --- a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go +++ b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/configurationmanagement/configurationmanagement.proto @@ -14,6 +14,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -24,21 +25,18 @@ const ( ) type ExportSDNConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExportSDNConfigRequest) Reset() { *x = ExportSDNConfigRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExportSDNConfigRequest) String() string { @@ -49,7 +47,7 @@ func (*ExportSDNConfigRequest) ProtoMessage() {} func (x *ExportSDNConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -79,21 +77,18 @@ func (x *ExportSDNConfigRequest) GetPid() string { } type ExportSDNConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + SdnConfigData string `protobuf:"bytes,2,opt,name=sdnConfigData,proto3" json:"sdnConfigData,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - SdnConfigData string `protobuf:"bytes,2,opt,name=sdnConfigData,proto3" json:"sdnConfigData,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExportSDNConfigResponse) Reset() { *x = ExportSDNConfigResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExportSDNConfigResponse) String() string { @@ -104,7 +99,7 @@ func (*ExportSDNConfigResponse) ProtoMessage() {} func (x *ExportSDNConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -134,22 +129,19 @@ func (x *ExportSDNConfigResponse) GetSdnConfigData() string { } type ImportSDNConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + SdnConfigData string `protobuf:"bytes,3,opt,name=sdnConfigData,proto3" json:"sdnConfigData,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` - SdnConfigData string `protobuf:"bytes,3,opt,name=sdnConfigData,proto3" json:"sdnConfigData,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ImportSDNConfigRequest) Reset() { *x = ImportSDNConfigRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ImportSDNConfigRequest) String() string { @@ -160,7 +152,7 @@ func (*ImportSDNConfigRequest) ProtoMessage() {} func (x *ImportSDNConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -197,20 +189,17 @@ func (x *ImportSDNConfigRequest) GetSdnConfigData() string { } type ImportSDNConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *ImportSDNConfigResponse) Reset() { *x = ImportSDNConfigResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ImportSDNConfigResponse) String() string { @@ -221,7 +210,7 @@ func (*ImportSDNConfigResponse) ProtoMessage() {} func (x *ImportSDNConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -245,7 +234,7 @@ func (x *ImportSDNConfigResponse) GetTimestamp() int64 { var File_gosdn_configurationmanagement_configurationmanagement_proto protoreflect.FileDescriptor -var file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc = []byte{ +var file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc = string([]byte{ 0x0a, 0x3b, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x6e, @@ -305,16 +294,16 @@ var file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc = [ 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescOnce sync.Once - file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescData = file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc + file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescData []byte ) func file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescGZIP() []byte { file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescOnce.Do(func() { - file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescData) + file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc), len(file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc))) }) return file_gosdn_configurationmanagement_configurationmanagement_proto_rawDescData } @@ -343,61 +332,11 @@ func file_gosdn_configurationmanagement_configurationmanagement_proto_init() { if File_gosdn_configurationmanagement_configurationmanagement_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ExportSDNConfigRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*ExportSDNConfigResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*ImportSDNConfigRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ImportSDNConfigResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc), len(file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc)), NumEnums: 0, NumMessages: 4, NumExtensions: 0, @@ -408,7 +347,6 @@ func file_gosdn_configurationmanagement_configurationmanagement_proto_init() { MessageInfos: file_gosdn_configurationmanagement_configurationmanagement_proto_msgTypes, }.Build() File_gosdn_configurationmanagement_configurationmanagement_proto = out.File - file_gosdn_configurationmanagement_configurationmanagement_proto_rawDesc = nil file_gosdn_configurationmanagement_configurationmanagement_proto_goTypes = nil file_gosdn_configurationmanagement_configurationmanagement_proto_depIdxs = nil } diff --git a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go index a0a3160e0..5c5c9924c 100644 --- a/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go +++ b/api/go/gosdn/configurationmanagement/configurationmanagement.pb.gw.go @@ -10,6 +10,7 @@ package core import ( "context" + "errors" "io" "net/http" @@ -24,151 +25,116 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - var ( - filter_ConfigurationManagementService_ExportSDNConfig_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join ) -func request_ConfigurationManagementService_ExportSDNConfig_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigurationManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExportSDNConfigRequest - var metadata runtime.ServerMetadata +var filter_ConfigurationManagementService_ExportSDNConfig_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +func request_ConfigurationManagementService_ExportSDNConfig_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigurationManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( - val string - ok bool - err error - _ = err + protoReq ExportSDNConfigRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ConfigurationManagementService_ExportSDNConfig_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ExportSDNConfig(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_ConfigurationManagementService_ExportSDNConfig_0(ctx context.Context, marshaler runtime.Marshaler, server ConfigurationManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExportSDNConfigRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ExportSDNConfigRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ConfigurationManagementService_ExportSDNConfig_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ExportSDNConfig(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_ConfigurationManagementService_ImportSDNConfig_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_ConfigurationManagementService_ImportSDNConfig_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_ConfigurationManagementService_ImportSDNConfig_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigurationManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ImportSDNConfigRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ImportSDNConfigRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ConfigurationManagementService_ImportSDNConfig_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ImportSDNConfig(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_ConfigurationManagementService_ImportSDNConfig_0(ctx context.Context, marshaler runtime.Marshaler, server ConfigurationManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ImportSDNConfigRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ImportSDNConfigRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ConfigurationManagementService_ImportSDNConfig_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ImportSDNConfig(ctx, &protoReq) return msg, metadata, err - } // RegisterConfigurationManagementServiceHandlerServer registers the http handlers for service ConfigurationManagementService to "mux". @@ -177,16 +143,13 @@ func local_request_ConfigurationManagementService_ImportSDNConfig_0(ctx context. // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterConfigurationManagementServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterConfigurationManagementServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ConfigurationManagementServiceServer) error { - - mux.Handle("GET", pattern_ConfigurationManagementService_ExportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_ConfigurationManagementService_ExportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ExportSDNConfig", runtime.WithHTTPPathPattern("/export/{pid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ExportSDNConfig", runtime.WithHTTPPathPattern("/export/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -198,20 +161,15 @@ func RegisterConfigurationManagementServiceHandlerServer(ctx context.Context, mu runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ConfigurationManagementService_ExportSDNConfig_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_ConfigurationManagementService_ImportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_ConfigurationManagementService_ImportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ImportSDNConfig", runtime.WithHTTPPathPattern("/import/{pid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ImportSDNConfig", runtime.WithHTTPPathPattern("/import/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -223,9 +181,7 @@ func RegisterConfigurationManagementServiceHandlerServer(ctx context.Context, mu runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ConfigurationManagementService_ImportSDNConfig_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -252,7 +208,6 @@ func RegisterConfigurationManagementServiceHandlerFromEndpoint(ctx context.Conte } }() }() - return RegisterConfigurationManagementServiceHandler(ctx, mux, conn) } @@ -268,14 +223,11 @@ func RegisterConfigurationManagementServiceHandler(ctx context.Context, mux *run // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "ConfigurationManagementServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterConfigurationManagementServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ConfigurationManagementServiceClient) error { - - mux.Handle("GET", pattern_ConfigurationManagementService_ExportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_ConfigurationManagementService_ExportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ExportSDNConfig", runtime.WithHTTPPathPattern("/export/{pid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ExportSDNConfig", runtime.WithHTTPPathPattern("/export/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -286,18 +238,13 @@ func RegisterConfigurationManagementServiceHandlerClient(ctx context.Context, mu runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ConfigurationManagementService_ExportSDNConfig_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_ConfigurationManagementService_ImportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_ConfigurationManagementService_ImportSDNConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ImportSDNConfig", runtime.WithHTTPPathPattern("/import/{pid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.configurationmanagement.ConfigurationManagementService/ImportSDNConfig", runtime.WithHTTPPathPattern("/import/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -308,22 +255,17 @@ func RegisterConfigurationManagementServiceHandlerClient(ctx context.Context, mu runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ConfigurationManagementService_ImportSDNConfig_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( pattern_ConfigurationManagementService_ExportSDNConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"export", "pid"}, "")) - pattern_ConfigurationManagementService_ImportSDNConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"import", "pid"}, "")) ) var ( forward_ConfigurationManagementService_ExportSDNConfig_0 = runtime.ForwardResponseMessage - forward_ConfigurationManagementService_ImportSDNConfig_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/conflict/conflict.pb.go b/api/go/gosdn/conflict/conflict.pb.go index b43d09bf5..193bf7cb4 100644 --- a/api/go/gosdn/conflict/conflict.pb.go +++ b/api/go/gosdn/conflict/conflict.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/conflict/conflict.proto @@ -12,6 +12,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,20 +23,17 @@ const ( ) type Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ResourceVersion int64 `protobuf:"varint,1,opt,name=resourceVersion,proto3" json:"resourceVersion,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ResourceVersion int64 `protobuf:"varint,1,opt,name=resourceVersion,proto3" json:"resourceVersion,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Metadata) Reset() { *x = Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_conflict_conflict_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_conflict_conflict_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Metadata) String() string { @@ -46,7 +44,7 @@ func (*Metadata) ProtoMessage() {} func (x *Metadata) ProtoReflect() protoreflect.Message { mi := &file_gosdn_conflict_conflict_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -70,7 +68,7 @@ func (x *Metadata) GetResourceVersion() int64 { var File_gosdn_conflict_conflict_proto protoreflect.FileDescriptor -var file_gosdn_conflict_conflict_proto_rawDesc = []byte{ +var file_gosdn_conflict_conflict_proto_rawDesc = string([]byte{ 0x0a, 0x1d, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x1a, @@ -84,16 +82,16 @@ var file_gosdn_conflict_conflict_proto_rawDesc = []byte{ 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_conflict_conflict_proto_rawDescOnce sync.Once - file_gosdn_conflict_conflict_proto_rawDescData = file_gosdn_conflict_conflict_proto_rawDesc + file_gosdn_conflict_conflict_proto_rawDescData []byte ) func file_gosdn_conflict_conflict_proto_rawDescGZIP() []byte { file_gosdn_conflict_conflict_proto_rawDescOnce.Do(func() { - file_gosdn_conflict_conflict_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_conflict_conflict_proto_rawDescData) + file_gosdn_conflict_conflict_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_conflict_conflict_proto_rawDesc), len(file_gosdn_conflict_conflict_proto_rawDesc))) }) return file_gosdn_conflict_conflict_proto_rawDescData } @@ -115,25 +113,11 @@ func file_gosdn_conflict_conflict_proto_init() { if File_gosdn_conflict_conflict_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_conflict_conflict_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_conflict_conflict_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_conflict_conflict_proto_rawDesc), len(file_gosdn_conflict_conflict_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -144,7 +128,6 @@ func file_gosdn_conflict_conflict_proto_init() { MessageInfos: file_gosdn_conflict_conflict_proto_msgTypes, }.Build() File_gosdn_conflict_conflict_proto = out.File - file_gosdn_conflict_conflict_proto_rawDesc = nil file_gosdn_conflict_conflict_proto_goTypes = nil file_gosdn_conflict_conflict_proto_depIdxs = nil } diff --git a/api/go/gosdn/csbi/csbi.pb.go b/api/go/gosdn/csbi/csbi.pb.go index 6fd657bc9..6331c0957 100644 --- a/api/go/gosdn/csbi/csbi.pb.go +++ b/api/go/gosdn/csbi/csbi.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/csbi/csbi.proto @@ -13,6 +13,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -81,22 +82,19 @@ func (State) EnumDescriptor() ([]byte, []int) { } type Syn struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Syn) Reset() { *x = Syn{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Syn) String() string { @@ -107,7 +105,7 @@ func (*Syn) ProtoMessage() {} func (x *Syn) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -144,21 +142,18 @@ func (x *Syn) GetAddress() string { } type Ack struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. TransportOption *transport.TransportOption `protobuf:"bytes,2,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Ack) Reset() { *x = Ack{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Ack) String() string { @@ -169,7 +164,7 @@ func (*Ack) ProtoMessage() {} func (x *Ack) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -199,22 +194,19 @@ func (x *Ack) GetTransportOption() *transport.TransportOption { } type GetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + All bool `protobuf:"varint,2,opt,name=all,proto3" json:"all,omitempty"` + Did []string `protobuf:"bytes,3,rep,name=did,proto3" json:"did,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - All bool `protobuf:"varint,2,opt,name=all,proto3" json:"all,omitempty"` - Did []string `protobuf:"bytes,3,rep,name=did,proto3" json:"did,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRequest) Reset() { *x = GetRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRequest) String() string { @@ -225,7 +217,7 @@ func (*GetRequest) ProtoMessage() {} func (x *GetRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -262,22 +254,19 @@ func (x *GetRequest) GetDid() []string { } type GetPayloadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Did string `protobuf:"bytes,2,opt,name=did,proto3" json:"did,omitempty"` + File string `protobuf:"bytes,3,opt,name=file,proto3" json:"file,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Did string `protobuf:"bytes,2,opt,name=did,proto3" json:"did,omitempty"` - File string `protobuf:"bytes,3,opt,name=file,proto3" json:"file,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPayloadRequest) Reset() { *x = GetPayloadRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPayloadRequest) String() string { @@ -288,7 +277,7 @@ func (*GetPayloadRequest) ProtoMessage() {} func (x *GetPayloadRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -325,21 +314,18 @@ func (x *GetPayloadRequest) GetFile() string { } type GetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Deployments []*Deployment `protobuf:"bytes,2,rep,name=deployments,proto3" json:"deployments,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Deployments []*Deployment `protobuf:"bytes,2,rep,name=deployments,proto3" json:"deployments,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetResponse) Reset() { *x = GetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetResponse) String() string { @@ -350,7 +336,7 @@ func (*GetResponse) ProtoMessage() {} func (x *GetResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -380,22 +366,19 @@ func (x *GetResponse) GetDeployments() []*Deployment { } type Deployment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + State State `protobuf:"varint,3,opt,name=state,proto3,enum=gosdn.csbi.State" json:"state,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - State State `protobuf:"varint,3,opt,name=state,proto3,enum=gosdn.csbi.State" json:"state,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Deployment) Reset() { *x = Deployment{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Deployment) String() string { @@ -406,7 +389,7 @@ func (*Deployment) ProtoMessage() {} func (x *Deployment) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -443,21 +426,18 @@ func (x *Deployment) GetState() State { } type CreateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. TransportOption []*transport.TransportOption `protobuf:"bytes,2,rep,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateRequest) Reset() { *x = CreateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateRequest) String() string { @@ -468,7 +448,7 @@ func (*CreateRequest) ProtoMessage() {} func (x *CreateRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -498,21 +478,18 @@ func (x *CreateRequest) GetTransportOption() []*transport.TransportOption { } type CreateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Deployments []*Deployment `protobuf:"bytes,2,rep,name=deployments,proto3" json:"deployments,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Deployments []*Deployment `protobuf:"bytes,2,rep,name=deployments,proto3" json:"deployments,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateResponse) Reset() { *x = CreateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateResponse) String() string { @@ -523,7 +500,7 @@ func (*CreateResponse) ProtoMessage() {} func (x *CreateResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -553,20 +530,17 @@ func (x *CreateResponse) GetDeployments() []*Deployment { } type Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` unknownFields protoimpl.UnknownFields - - Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Payload) Reset() { *x = Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Payload) String() string { @@ -577,7 +551,7 @@ func (*Payload) ProtoMessage() {} func (x *Payload) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -600,21 +574,18 @@ func (x *Payload) GetChunk() []byte { } type DeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Did []string `protobuf:"bytes,2,rep,name=did,proto3" json:"did,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Did []string `protobuf:"bytes,2,rep,name=did,proto3" json:"did,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRequest) Reset() { *x = DeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRequest) String() string { @@ -625,7 +596,7 @@ func (*DeleteRequest) ProtoMessage() {} func (x *DeleteRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -655,20 +626,17 @@ func (x *DeleteRequest) GetDid() []string { } type DeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *DeleteResponse) Reset() { *x = DeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_csbi_csbi_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_csbi_csbi_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteResponse) String() string { @@ -679,7 +647,7 @@ func (*DeleteResponse) ProtoMessage() {} func (x *DeleteResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_csbi_csbi_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -703,7 +671,7 @@ func (x *DeleteResponse) GetTimestamp() int64 { var File_gosdn_csbi_csbi_proto protoreflect.FileDescriptor -var file_gosdn_csbi_csbi_proto_rawDesc = []byte{ +var file_gosdn_csbi_csbi_proto_rawDesc = string([]byte{ 0x0a, 0x15, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x73, 0x62, 0x69, 0x2f, 0x63, 0x73, 0x62, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x63, 0x73, 0x62, 0x69, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, @@ -808,16 +776,16 @@ var file_gosdn_csbi_csbi_proto_rawDesc = []byte{ 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x63, 0x73, 0x62, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_csbi_csbi_proto_rawDescOnce sync.Once - file_gosdn_csbi_csbi_proto_rawDescData = file_gosdn_csbi_csbi_proto_rawDesc + file_gosdn_csbi_csbi_proto_rawDescData []byte ) func file_gosdn_csbi_csbi_proto_rawDescGZIP() []byte { file_gosdn_csbi_csbi_proto_rawDescOnce.Do(func() { - file_gosdn_csbi_csbi_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_csbi_csbi_proto_rawDescData) + file_gosdn_csbi_csbi_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_csbi_csbi_proto_rawDesc), len(file_gosdn_csbi_csbi_proto_rawDesc))) }) return file_gosdn_csbi_csbi_proto_rawDescData } @@ -869,145 +837,11 @@ func file_gosdn_csbi_csbi_proto_init() { if File_gosdn_csbi_csbi_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_csbi_csbi_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Syn); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Ack); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GetRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetPayloadRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*Deployment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*CreateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*CreateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_csbi_csbi_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*DeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_csbi_csbi_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_csbi_csbi_proto_rawDesc), len(file_gosdn_csbi_csbi_proto_rawDesc)), NumEnums: 1, NumMessages: 11, NumExtensions: 0, @@ -1019,7 +853,6 @@ func file_gosdn_csbi_csbi_proto_init() { MessageInfos: file_gosdn_csbi_csbi_proto_msgTypes, }.Build() File_gosdn_csbi_csbi_proto = out.File - file_gosdn_csbi_csbi_proto_rawDesc = nil file_gosdn_csbi_csbi_proto_goTypes = nil file_gosdn_csbi_csbi_proto_depIdxs = nil } diff --git a/api/go/gosdn/networkelement/networkelement.pb.go b/api/go/gosdn/networkelement/networkelement.pb.go index 6ed237be7..78d740a42 100644 --- a/api/go/gosdn/networkelement/networkelement.pb.go +++ b/api/go/gosdn/networkelement/networkelement.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/networkelement/networkelement.proto @@ -19,6 +19,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -293,21 +294,18 @@ func (StreamMode) EnumDescriptor() ([]byte, []int) { // TODO: change name to fit the rest type UpdateNetworkElementRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` NetworkElement *ManagedNetworkElement `protobuf:"bytes,2,opt,name=network_element,json=networkElement,proto3" json:"network_element,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UpdateNetworkElementRequest) Reset() { *x = UpdateNetworkElementRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateNetworkElementRequest) String() string { @@ -318,7 +316,7 @@ func (*UpdateNetworkElementRequest) ProtoMessage() {} func (x *UpdateNetworkElementRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -348,20 +346,17 @@ func (x *UpdateNetworkElementRequest) GetNetworkElement() *ManagedNetworkElement } type UpdateNetworkElementResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateNetworkElementResponse) Reset() { *x = UpdateNetworkElementResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateNetworkElementResponse) String() string { @@ -372,7 +367,7 @@ func (*UpdateNetworkElementResponse) ProtoMessage() {} func (x *UpdateNetworkElementResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -395,10 +390,7 @@ func (x *UpdateNetworkElementResponse) GetTimestamp() int64 { } type ManagedNetworkElement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Model string `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"` @@ -409,15 +401,15 @@ type ManagedNetworkElement struct { Metadata *conflict.Metadata `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` AssociatedPnd string `protobuf:"bytes,9,opt,name=associated_pnd,json=associatedPnd,proto3" json:"associated_pnd,omitempty"` GnmiSubscribePaths []string `protobuf:"bytes,10,rep,name=gnmi_subscribe_paths,json=gnmiSubscribePaths,proto3" json:"gnmi_subscribe_paths,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ManagedNetworkElement) Reset() { *x = ManagedNetworkElement{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ManagedNetworkElement) String() string { @@ -428,7 +420,7 @@ func (*ManagedNetworkElement) ProtoMessage() {} func (x *ManagedNetworkElement) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -514,23 +506,20 @@ func (x *ManagedNetworkElement) GetGnmiSubscribePaths() []string { } type FlattenedManagedNetworkElement struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + Pluginid string `protobuf:"bytes,4,opt,name=pluginid,proto3" json:"pluginid,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` - Pluginid string `protobuf:"bytes,4,opt,name=pluginid,proto3" json:"pluginid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *FlattenedManagedNetworkElement) Reset() { *x = FlattenedManagedNetworkElement{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FlattenedManagedNetworkElement) String() string { @@ -541,7 +530,7 @@ func (*FlattenedManagedNetworkElement) ProtoMessage() {} func (x *FlattenedManagedNetworkElement) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -585,21 +574,18 @@ func (x *FlattenedManagedNetworkElement) GetPluginid() string { } type GetAllRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllRequest) Reset() { *x = GetAllRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllRequest) String() string { @@ -610,7 +596,7 @@ func (*GetAllRequest) ProtoMessage() {} func (x *GetAllRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -640,24 +626,21 @@ func (x *GetAllRequest) GetPid() string { } type GetAllResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. // TODO: Check if this is really needed. Perhaps a reference to the PND's ID // is also sufficient. - Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne []*ManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne []*ManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetAllResponse) Reset() { *x = GetAllResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllResponse) String() string { @@ -668,7 +651,7 @@ func (*GetAllResponse) ProtoMessage() {} func (x *GetAllResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -705,21 +688,18 @@ func (x *GetAllResponse) GetMne() []*ManagedNetworkElement { } type GetAllFlattenedRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllFlattenedRequest) Reset() { *x = GetAllFlattenedRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllFlattenedRequest) String() string { @@ -730,7 +710,7 @@ func (*GetAllFlattenedRequest) ProtoMessage() {} func (x *GetAllFlattenedRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -760,24 +740,21 @@ func (x *GetAllFlattenedRequest) GetPid() string { } type GetAllFlattenedResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. // TODO: Check if this is really needed. Perhaps a reference to the PND's ID // is also sufficient. - Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne []*FlattenedManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne []*FlattenedManagedNetworkElement `protobuf:"bytes,3,rep,name=mne,proto3" json:"mne,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetAllFlattenedResponse) Reset() { *x = GetAllFlattenedResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllFlattenedResponse) String() string { @@ -788,7 +765,7 @@ func (*GetAllFlattenedResponse) ProtoMessage() {} func (x *GetAllFlattenedResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -825,22 +802,19 @@ func (x *GetAllFlattenedResponse) GetMne() []*FlattenedManagedNetworkElement { } type GetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRequest) Reset() { *x = GetRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRequest) String() string { @@ -851,7 +825,7 @@ func (*GetRequest) ProtoMessage() {} func (x *GetRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -888,24 +862,21 @@ func (x *GetRequest) GetPid() string { } type GetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. // TODO: Check if this is really needed. Perhaps a reference to the PND's ID // is also sufficient. - Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne *ManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne *ManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetResponse) Reset() { *x = GetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetResponse) String() string { @@ -916,7 +887,7 @@ func (*GetResponse) ProtoMessage() {} func (x *GetResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -953,22 +924,19 @@ func (x *GetResponse) GetMne() *ManagedNetworkElement { } type GetFlattenedRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetFlattenedRequest) Reset() { *x = GetFlattenedRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetFlattenedRequest) String() string { @@ -979,7 +947,7 @@ func (*GetFlattenedRequest) ProtoMessage() {} func (x *GetFlattenedRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1016,24 +984,21 @@ func (x *GetFlattenedRequest) GetPid() string { } type GetFlattenedResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. // TODO: Check if this is really needed. Perhaps a reference to the PND's ID // is also sufficient. - Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Mne *FlattenedManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Mne *FlattenedManagedNetworkElement `protobuf:"bytes,3,opt,name=mne,proto3" json:"mne,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetFlattenedResponse) Reset() { *x = GetFlattenedResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetFlattenedResponse) String() string { @@ -1044,7 +1009,7 @@ func (*GetFlattenedResponse) ProtoMessage() {} func (x *GetFlattenedResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1081,10 +1046,7 @@ func (x *GetFlattenedResponse) GetMne() *FlattenedManagedNetworkElement { } type SetMne struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` PluginId string `protobuf:"bytes,3,opt,name=pluginId,proto3" json:"pluginId,omitempty"` @@ -1092,15 +1054,15 @@ type SetMne struct { TransportOption *transport.TransportOption `protobuf:"bytes,5,opt,name=transport_option,json=transportOption,proto3" json:"transport_option,omitempty"` GnmiSubscribePaths []string `protobuf:"bytes,6,rep,name=gnmi_subscribe_paths,json=gnmiSubscribePaths,proto3" json:"gnmi_subscribe_paths,omitempty"` MneId string `protobuf:"bytes,7,opt,name=mne_id,json=mneId,proto3" json:"mne_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetMne) Reset() { *x = SetMne{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetMne) String() string { @@ -1111,7 +1073,7 @@ func (*SetMne) ProtoMessage() {} func (x *SetMne) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1176,22 +1138,19 @@ func (x *SetMne) GetMneId() string { } type AddListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mne []*SetMne `protobuf:"bytes,2,rep,name=mne,proto3" json:"mne,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mne []*SetMne `protobuf:"bytes,2,rep,name=mne,proto3" json:"mne,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddListRequest) Reset() { *x = AddListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddListRequest) String() string { @@ -1202,7 +1161,7 @@ func (*AddListRequest) ProtoMessage() {} func (x *AddListRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1239,21 +1198,18 @@ func (x *AddListRequest) GetPid() string { } type AddListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Responses []*SetResponse `protobuf:"bytes,2,rep,name=responses,proto3" json:"responses,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Responses []*SetResponse `protobuf:"bytes,2,rep,name=responses,proto3" json:"responses,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddListResponse) Reset() { *x = AddListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddListResponse) String() string { @@ -1264,7 +1220,7 @@ func (*AddListResponse) ProtoMessage() {} func (x *AddListResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1294,23 +1250,20 @@ func (x *AddListResponse) GetResponses() []*SetResponse { } type GetPathRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` - Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPathRequest) Reset() { *x = GetPathRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPathRequest) String() string { @@ -1321,7 +1274,7 @@ func (*GetPathRequest) ProtoMessage() {} func (x *GetPathRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1365,24 +1318,21 @@ func (x *GetPathRequest) GetPid() string { } type GetPathResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. // TODO: Check if this is really needed. Perhaps a reference to the PND's ID // is also sufficient. Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` MneNotification []*gnmi.Notification `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetPathResponse) Reset() { *x = GetPathResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPathResponse) String() string { @@ -1393,7 +1343,7 @@ func (*GetPathResponse) ProtoMessage() {} func (x *GetPathResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1430,23 +1380,20 @@ func (x *GetPathResponse) GetMneNotification() []*gnmi.Notification { } type GetIntendedPathRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + IntendedPath string `protobuf:"bytes,3,opt,name=intended_path,json=intendedPath,proto3" json:"intended_path,omitempty"` + Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - IntendedPath string `protobuf:"bytes,3,opt,name=intended_path,json=intendedPath,proto3" json:"intended_path,omitempty"` - Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetIntendedPathRequest) Reset() { *x = GetIntendedPathRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetIntendedPathRequest) String() string { @@ -1457,7 +1404,7 @@ func (*GetIntendedPathRequest) ProtoMessage() {} func (x *GetIntendedPathRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1501,22 +1448,19 @@ func (x *GetIntendedPathRequest) GetPid() string { } type GetIntendedPathResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Timestamp int64 `protobuf:"varint,64,opt,name=timestamp,proto3" json:"timestamp,omitempty"` Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` MneNotification []*gnmi.Notification `protobuf:"bytes,3,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetIntendedPathResponse) Reset() { *x = GetIntendedPathResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetIntendedPathResponse) String() string { @@ -1527,7 +1471,7 @@ func (*GetIntendedPathResponse) ProtoMessage() {} func (x *GetIntendedPathResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1564,21 +1508,18 @@ func (x *GetIntendedPathResponse) GetMneNotification() []*gnmi.Notification { } type SetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetResponse) Reset() { *x = SetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetResponse) String() string { @@ -1589,7 +1530,7 @@ func (*SetResponse) ProtoMessage() {} func (x *SetResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1619,22 +1560,19 @@ func (x *SetResponse) GetId() string { } type SetPathListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + ChangeRequest []*ChangeRequest `protobuf:"bytes,2,rep,name=change_request,json=changeRequest,proto3" json:"change_request,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - ChangeRequest []*ChangeRequest `protobuf:"bytes,2,rep,name=change_request,json=changeRequest,proto3" json:"change_request,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetPathListRequest) Reset() { *x = SetPathListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetPathListRequest) String() string { @@ -1645,7 +1583,7 @@ func (*SetPathListRequest) ProtoMessage() {} func (x *SetPathListRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1682,21 +1620,18 @@ func (x *SetPathListRequest) GetPid() string { } type SetPathListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Responses []*SetResponse `protobuf:"bytes,2,rep,name=responses,proto3" json:"responses,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Responses []*SetResponse `protobuf:"bytes,2,rep,name=responses,proto3" json:"responses,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetPathListResponse) Reset() { *x = SetPathListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetPathListResponse) String() string { @@ -1707,7 +1642,7 @@ func (*SetPathListResponse) ProtoMessage() {} func (x *SetPathListResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1737,22 +1672,19 @@ func (x *SetPathListResponse) GetResponses() []*SetResponse { } type DeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + Mneid string `protobuf:"bytes,3,opt,name=mneid,proto3" json:"mneid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` - Mneid string `protobuf:"bytes,3,opt,name=mneid,proto3" json:"mneid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRequest) Reset() { *x = DeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRequest) String() string { @@ -1763,7 +1695,7 @@ func (*DeleteRequest) ProtoMessage() {} func (x *DeleteRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1800,20 +1732,17 @@ func (x *DeleteRequest) GetMneid() string { } type DeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *DeleteResponse) Reset() { *x = DeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteResponse) String() string { @@ -1824,7 +1753,7 @@ func (*DeleteResponse) ProtoMessage() {} func (x *DeleteResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1847,23 +1776,20 @@ func (x *DeleteResponse) GetTimestamp() int64 { } type Change struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Age int64 `protobuf:"varint,2,opt,name=age,proto3" json:"age,omitempty"` + State ChangeState `protobuf:"varint,3,opt,name=state,proto3,enum=gosdn.networkelement.ChangeState" json:"state,omitempty"` + Diff *gnmi.Notification `protobuf:"bytes,4,opt,name=diff,proto3" json:"diff,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Age int64 `protobuf:"varint,2,opt,name=age,proto3" json:"age,omitempty"` - State ChangeState `protobuf:"varint,3,opt,name=state,proto3,enum=gosdn.networkelement.ChangeState" json:"state,omitempty"` - Diff *gnmi.Notification `protobuf:"bytes,4,opt,name=diff,proto3" json:"diff,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Change) Reset() { *x = Change{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Change) String() string { @@ -1874,7 +1800,7 @@ func (*Change) ProtoMessage() {} func (x *Change) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1918,23 +1844,20 @@ func (x *Change) GetDiff() *gnmi.Notification { } type ChangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Mneid string `protobuf:"bytes,1,opt,name=mneid,proto3" json:"mneid,omitempty"` + Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + ApiOp ApiOperation `protobuf:"varint,4,opt,name=api_op,json=apiOp,proto3,enum=gosdn.networkelement.ApiOperation" json:"api_op,omitempty"` unknownFields protoimpl.UnknownFields - - Mneid string `protobuf:"bytes,1,opt,name=mneid,proto3" json:"mneid,omitempty"` - Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - ApiOp ApiOperation `protobuf:"varint,4,opt,name=api_op,json=apiOp,proto3,enum=gosdn.networkelement.ApiOperation" json:"api_op,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChangeRequest) Reset() { *x = ChangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ChangeRequest) String() string { @@ -1945,7 +1868,7 @@ func (*ChangeRequest) ProtoMessage() {} func (x *ChangeRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1989,21 +1912,18 @@ func (x *ChangeRequest) GetApiOp() ApiOperation { } type SetChange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cuid string `protobuf:"bytes,1,opt,name=cuid,proto3" json:"cuid,omitempty"` + Op Operation `protobuf:"varint,2,opt,name=op,proto3,enum=gosdn.networkelement.Operation" json:"op,omitempty"` unknownFields protoimpl.UnknownFields - - Cuid string `protobuf:"bytes,1,opt,name=cuid,proto3" json:"cuid,omitempty"` - Op Operation `protobuf:"varint,2,opt,name=op,proto3,enum=gosdn.networkelement.Operation" json:"op,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetChange) Reset() { *x = SetChange{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetChange) String() string { @@ -2014,7 +1934,7 @@ func (*SetChange) ProtoMessage() {} func (x *SetChange) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2044,21 +1964,18 @@ func (x *SetChange) GetOp() Operation { } type GetChangeListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetChangeListRequest) Reset() { *x = GetChangeListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetChangeListRequest) String() string { @@ -2069,7 +1986,7 @@ func (*GetChangeListRequest) ProtoMessage() {} func (x *GetChangeListRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2099,24 +2016,21 @@ func (x *GetChangeListRequest) GetPid() string { } type GetChangeListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. // TODO: Check if this is really needed. Perhaps a reference to the PND's ID // is also sufficient. - Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetChangeListResponse) Reset() { *x = GetChangeListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetChangeListResponse) String() string { @@ -2127,7 +2041,7 @@ func (*GetChangeListResponse) ProtoMessage() {} func (x *GetChangeListResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2164,22 +2078,19 @@ func (x *GetChangeListResponse) GetChange() []*Change { } type GetChangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Cuid []string `protobuf:"bytes,2,rep,name=cuid,proto3" json:"cuid,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Cuid []string `protobuf:"bytes,2,rep,name=cuid,proto3" json:"cuid,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetChangeRequest) Reset() { *x = GetChangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetChangeRequest) String() string { @@ -2190,7 +2101,7 @@ func (*GetChangeRequest) ProtoMessage() {} func (x *GetChangeRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2227,24 +2138,21 @@ func (x *GetChangeRequest) GetPid() string { } type GetChangeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. // TODO: Check if this is really needed. Perhaps a reference to the PND's ID // is also sufficient. - Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` - Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` + Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + Change []*Change `protobuf:"bytes,3,rep,name=change,proto3" json:"change,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetChangeResponse) Reset() { *x = GetChangeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetChangeResponse) String() string { @@ -2255,7 +2163,7 @@ func (*GetChangeResponse) ProtoMessage() {} func (x *GetChangeResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2292,22 +2200,19 @@ func (x *GetChangeResponse) GetChange() []*Change { } type SetChangeListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Change []*SetChange `protobuf:"bytes,2,rep,name=change,proto3" json:"change,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Change []*SetChange `protobuf:"bytes,2,rep,name=change,proto3" json:"change,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetChangeListRequest) Reset() { *x = SetChangeListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetChangeListRequest) String() string { @@ -2318,7 +2223,7 @@ func (*SetChangeListRequest) ProtoMessage() {} func (x *SetChangeListRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2355,21 +2260,18 @@ func (x *SetChangeListRequest) GetPid() string { } type SetChangeListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Responses []*SetResponse `protobuf:"bytes,2,rep,name=responses,proto3" json:"responses,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Responses []*SetResponse `protobuf:"bytes,2,rep,name=responses,proto3" json:"responses,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetChangeListResponse) Reset() { *x = SetChangeListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetChangeListResponse) String() string { @@ -2380,7 +2282,7 @@ func (*SetChangeListResponse) ProtoMessage() {} func (x *SetChangeListResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2412,21 +2314,18 @@ func (x *SetChangeListResponse) GetResponses() []*SetResponse { // The mode determines how the target should trigger updates to be sent. // Reference: gNMI Specification Section 3.5.1.2 type SubscriptionList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Subscription []*Subscription `protobuf:"bytes,1,rep,name=subscription,proto3" json:"subscription,omitempty"` + Mode SubscriptionMode `protobuf:"varint,2,opt,name=mode,proto3,enum=gosdn.networkelement.SubscriptionMode" json:"mode,omitempty"` unknownFields protoimpl.UnknownFields - - Subscription []*Subscription `protobuf:"bytes,1,rep,name=subscription,proto3" json:"subscription,omitempty"` - Mode SubscriptionMode `protobuf:"varint,2,opt,name=mode,proto3,enum=gosdn.networkelement.SubscriptionMode" json:"mode,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubscriptionList) Reset() { *x = SubscriptionList{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscriptionList) String() string { @@ -2437,7 +2336,7 @@ func (*SubscriptionList) ProtoMessage() {} func (x *SubscriptionList) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2467,22 +2366,19 @@ func (x *SubscriptionList) GetMode() SubscriptionMode { } type Subscription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - StreamMode StreamMode `protobuf:"varint,2,opt,name=stream_mode,json=streamMode,proto3,enum=gosdn.networkelement.StreamMode" json:"stream_mode,omitempty"` - SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` // time in ns between samples in SAMPLE mode. + state protoimpl.MessageState `protogen:"open.v1"` + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + StreamMode StreamMode `protobuf:"varint,2,opt,name=stream_mode,json=streamMode,proto3,enum=gosdn.networkelement.StreamMode" json:"stream_mode,omitempty"` + SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` // time in ns between samples in SAMPLE mode. + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Subscription) Reset() { *x = Subscription{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Subscription) String() string { @@ -2493,7 +2389,7 @@ func (*Subscription) ProtoMessage() {} func (x *Subscription) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2530,23 +2426,20 @@ func (x *Subscription) GetSampleInterval() uint64 { } type SubscribePathRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` + Sublist *SubscriptionList `protobuf:"bytes,4,opt,name=sublist,proto3" json:"sublist,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Pid string `protobuf:"bytes,3,opt,name=pid,proto3" json:"pid,omitempty"` - Sublist *SubscriptionList `protobuf:"bytes,4,opt,name=sublist,proto3" json:"sublist,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubscribePathRequest) Reset() { *x = SubscribePathRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribePathRequest) String() string { @@ -2557,7 +2450,7 @@ func (*SubscribePathRequest) ProtoMessage() {} func (x *SubscribePathRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2601,21 +2494,18 @@ func (x *SubscribePathRequest) GetSublist() *SubscriptionList { } type SubscribePathResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - MneNotification []*gnmi.Notification `protobuf:"bytes,2,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + MneNotification []*gnmi.Notification `protobuf:"bytes,2,rep,name=mne_notification,json=mneNotification,proto3" json:"mne_notification,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribePathResponse) Reset() { *x = SubscribePathResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribePathResponse) String() string { @@ -2626,7 +2516,7 @@ func (*SubscribePathResponse) ProtoMessage() {} func (x *SubscribePathResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_networkelement_networkelement_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2657,7 +2547,7 @@ func (x *SubscribePathResponse) GetMneNotification() []*gnmi.Notification { var File_gosdn_networkelement_networkelement_proto protoreflect.FileDescriptor -var file_gosdn_networkelement_networkelement_proto_rawDesc = []byte{ +var file_gosdn_networkelement_networkelement_proto_rawDesc = string([]byte{ 0x0a, 0x29, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x6f, 0x73, @@ -3163,16 +3053,16 @@ var file_gosdn_networkelement_networkelement_proto_rawDesc = []byte{ 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_networkelement_networkelement_proto_rawDescOnce sync.Once - file_gosdn_networkelement_networkelement_proto_rawDescData = file_gosdn_networkelement_networkelement_proto_rawDesc + file_gosdn_networkelement_networkelement_proto_rawDescData []byte ) func file_gosdn_networkelement_networkelement_proto_rawDescGZIP() []byte { file_gosdn_networkelement_networkelement_proto_rawDescOnce.Do(func() { - file_gosdn_networkelement_networkelement_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_networkelement_networkelement_proto_rawDescData) + file_gosdn_networkelement_networkelement_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_networkelement_networkelement_proto_rawDesc), len(file_gosdn_networkelement_networkelement_proto_rawDesc))) }) return file_gosdn_networkelement_networkelement_proto_rawDescData } @@ -3310,457 +3200,11 @@ func file_gosdn_networkelement_networkelement_proto_init() { if File_gosdn_networkelement_networkelement_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_networkelement_networkelement_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*UpdateNetworkElementRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*UpdateNetworkElementResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*ManagedNetworkElement); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*FlattenedManagedNetworkElement); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetAllRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetAllResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*GetAllFlattenedRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*GetAllFlattenedResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*GetRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*GetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*GetFlattenedRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*GetFlattenedResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*SetMne); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*AddListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*AddListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*GetPathRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*GetPathResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*GetIntendedPathRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*GetIntendedPathResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*SetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*SetPathListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*SetPathListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*DeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*Change); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*ChangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*SetChange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*GetChangeListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*GetChangeListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*GetChangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*GetChangeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*SetChangeListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*SetChangeListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*SubscriptionList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*Subscription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*SubscribePathRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_networkelement_networkelement_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*SubscribePathResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_networkelement_networkelement_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_networkelement_networkelement_proto_rawDesc), len(file_gosdn_networkelement_networkelement_proto_rawDesc)), NumEnums: 5, NumMessages: 37, NumExtensions: 0, @@ -3772,7 +3216,6 @@ func file_gosdn_networkelement_networkelement_proto_init() { MessageInfos: file_gosdn_networkelement_networkelement_proto_msgTypes, }.Build() File_gosdn_networkelement_networkelement_proto = out.File - file_gosdn_networkelement_networkelement_proto_rawDesc = nil file_gosdn_networkelement_networkelement_proto_goTypes = nil file_gosdn_networkelement_networkelement_proto_depIdxs = nil } diff --git a/api/go/gosdn/networkelement/networkelement.pb.gw.go b/api/go/gosdn/networkelement/networkelement.pb.gw.go index fc794e3c4..ff792ae8e 100644 --- a/api/go/gosdn/networkelement/networkelement.pb.gw.go +++ b/api/go/gosdn/networkelement/networkelement.pb.gw.go @@ -10,6 +10,7 @@ package networkelement import ( "context" + "errors" "io" "net/http" @@ -24,577 +25,463 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_NetworkElementService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateNetworkElementRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateNetworkElementRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateNetworkElementRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateNetworkElementRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Update(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_NetworkElementService_GetAllFlattened_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_NetworkElementService_GetAllFlattened_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_NetworkElementService_GetAllFlattened_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetAllFlattenedRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetAllFlattenedRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetAllFlattened_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetAllFlattened(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_GetAllFlattened_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetAllFlattenedRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetAllFlattenedRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetAllFlattened_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetAllFlattened(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_NetworkElementService_Get_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_NetworkElementService_Get_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_NetworkElementService_Get_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_Get_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Get(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_Get_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_Get_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Get(ctx, &protoReq) return msg, metadata, err - } func request_NetworkElementService_AddList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.AddList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_AddList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AddList(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_NetworkElementService_GetPath_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0, "path": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) +var filter_NetworkElementService_GetPath_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0, "path": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} func request_NetworkElementService_GetPath_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPathRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetPathRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - val, ok = pathParams["path"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path") } - protoReq.Path, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetPath_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetPath(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_GetPath_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPathRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetPathRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - val, ok = pathParams["path"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path") } - protoReq.Path, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetPath_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetPath(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_NetworkElementService_GetIntendedPath_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0, "intended_path": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) +var filter_NetworkElementService_GetIntendedPath_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0, "intended_path": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} func request_NetworkElementService_GetIntendedPath_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetIntendedPathRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetIntendedPathRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - val, ok = pathParams["intended_path"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "intended_path") } - protoReq.IntendedPath, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "intended_path", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetIntendedPath_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetIntendedPath(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_GetIntendedPath_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetIntendedPathRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetIntendedPathRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - val, ok = pathParams["intended_path"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "intended_path") } - protoReq.IntendedPath, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "intended_path", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetIntendedPath_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetIntendedPath(ctx, &protoReq) return msg, metadata, err - } func request_NetworkElementService_SetPathList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetPathListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq SetPathListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.SetPathList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_SetPathList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetPathListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq SetPathListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.SetPathList(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_NetworkElementService_Delete_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_NetworkElementService_Delete_0 = &utilities.DoubleArray{Encoding: map[string]int{"mneid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_NetworkElementService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeleteRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_Delete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeleteRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_Delete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Delete(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_NetworkElementService_GetChangeList_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_NetworkElementService_GetChangeList_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_NetworkElementService_GetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeListRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetChangeListRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChangeList_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetChangeList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_GetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeListRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetChangeListRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChangeList_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetChangeList(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_NetworkElementService_GetChange_0 = &utilities.DoubleArray{Encoding: map[string]int{"cuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_NetworkElementService_GetChange_0 = &utilities.DoubleArray{Encoding: map[string]int{"cuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_NetworkElementService_GetChange_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetChangeRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["cuid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["cuid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cuid") } - protoReq.Cuid, err = runtime.StringSlice(val, ",") if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cuid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChange_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetChange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_GetChange_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetChangeRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetChangeRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["cuid"] + val, ok := pathParams["cuid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cuid") } - protoReq.Cuid, err = runtime.StringSlice(val, ",") if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cuid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NetworkElementService_GetChange_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetChange(ctx, &protoReq) return msg, metadata, err - } func request_NetworkElementService_SetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, client NetworkElementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetChangeListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq SetChangeListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.SetChangeList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_NetworkElementService_SetChangeList_0(ctx context.Context, marshaler runtime.Marshaler, server NetworkElementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetChangeListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq SetChangeListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.SetChangeList(ctx, &protoReq) return msg, metadata, err - } // RegisterNetworkElementServiceHandlerServer registers the http handlers for service NetworkElementService to "mux". @@ -603,16 +490,13 @@ func local_request_NetworkElementService_SetChangeList_0(ctx context.Context, ma // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterNetworkElementServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server NetworkElementServiceServer) error { - - mux.Handle("POST", pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -624,20 +508,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetAllFlattened_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetAllFlattened_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAllFlattened", runtime.WithHTTPPathPattern("/mnes")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAllFlattened", runtime.WithHTTPPathPattern("/mnes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -649,20 +528,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetAllFlattened_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/mnes/{mneid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/mnes/{mneid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -674,20 +548,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_NetworkElementService_AddList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_AddList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/AddList", runtime.WithHTTPPathPattern("/mnes")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/AddList", runtime.WithHTTPPathPattern("/mnes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -699,20 +568,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_AddList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/paths/{path}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/paths/{path}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -724,20 +588,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetPath_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetIntendedPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetIntendedPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetIntendedPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/intendedpaths/{intended_path}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetIntendedPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/intendedpaths/{intended_path}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -749,20 +608,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetIntendedPath_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_NetworkElementService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetPathList", runtime.WithHTTPPathPattern("/mnes/paths")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetPathList", runtime.WithHTTPPathPattern("/mnes/paths")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -774,20 +628,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_SetPathList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_NetworkElementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_NetworkElementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Delete", runtime.WithHTTPPathPattern("/mnes/{mneid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Delete", runtime.WithHTTPPathPattern("/mnes/{mneid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -799,20 +648,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -824,20 +668,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetChangeList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChange", runtime.WithHTTPPathPattern("/mnes/changes/{cuid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChange", runtime.WithHTTPPathPattern("/mnes/changes/{cuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -849,20 +688,15 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetChange_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_NetworkElementService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -874,9 +708,7 @@ func RegisterNetworkElementServiceHandlerServer(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_SetChangeList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -903,7 +735,6 @@ func RegisterNetworkElementServiceHandlerFromEndpoint(ctx context.Context, mux * } }() }() - return RegisterNetworkElementServiceHandler(ctx, mux, conn) } @@ -919,14 +750,11 @@ func RegisterNetworkElementServiceHandler(ctx context.Context, mux *runtime.Serv // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "NetworkElementServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client NetworkElementServiceClient) error { - - mux.Handle("POST", pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Update", runtime.WithHTTPPathPattern("/network-element/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -937,18 +765,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetAllFlattened_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetAllFlattened_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAllFlattened", runtime.WithHTTPPathPattern("/mnes")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetAllFlattened", runtime.WithHTTPPathPattern("/mnes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -959,18 +782,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetAllFlattened_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/mnes/{mneid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Get", runtime.WithHTTPPathPattern("/mnes/{mneid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -981,18 +799,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_NetworkElementService_AddList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_AddList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/AddList", runtime.WithHTTPPathPattern("/mnes")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/AddList", runtime.WithHTTPPathPattern("/mnes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1003,18 +816,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_AddList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/paths/{path}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/paths/{path}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1025,18 +833,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetPath_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetIntendedPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetIntendedPath_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetIntendedPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/intendedpaths/{intended_path}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetIntendedPath", runtime.WithHTTPPathPattern("/mnes/{mneid}/intendedpaths/{intended_path}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1047,18 +850,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetIntendedPath_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_NetworkElementService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_SetPathList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetPathList", runtime.WithHTTPPathPattern("/mnes/paths")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetPathList", runtime.WithHTTPPathPattern("/mnes/paths")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1069,18 +867,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_SetPathList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_NetworkElementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_NetworkElementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Delete", runtime.WithHTTPPathPattern("/mnes/{mneid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/Delete", runtime.WithHTTPPathPattern("/mnes/{mneid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1091,18 +884,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1113,18 +901,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetChangeList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_NetworkElementService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_NetworkElementService_GetChange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChange", runtime.WithHTTPPathPattern("/mnes/changes/{cuid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/GetChange", runtime.WithHTTPPathPattern("/mnes/changes/{cuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1135,18 +918,13 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_GetChange_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_NetworkElementService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_NetworkElementService_SetChangeList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.networkelement.NetworkElementService/SetChangeList", runtime.WithHTTPPathPattern("/mnes/changes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1157,58 +935,35 @@ func RegisterNetworkElementServiceHandlerClient(ctx context.Context, mux *runtim runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NetworkElementService_SetChangeList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_NetworkElementService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"network-element", "update"}, "")) - + pattern_NetworkElementService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"network-element", "update"}, "")) pattern_NetworkElementService_GetAllFlattened_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"mnes"}, "")) - - pattern_NetworkElementService_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"mnes", "mneid"}, "")) - - pattern_NetworkElementService_AddList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"mnes"}, "")) - - pattern_NetworkElementService_GetPath_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"mnes", "mneid", "paths", "path"}, "")) - + pattern_NetworkElementService_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"mnes", "mneid"}, "")) + pattern_NetworkElementService_AddList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"mnes"}, "")) + pattern_NetworkElementService_GetPath_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"mnes", "mneid", "paths", "path"}, "")) pattern_NetworkElementService_GetIntendedPath_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"mnes", "mneid", "intendedpaths", "intended_path"}, "")) - - pattern_NetworkElementService_SetPathList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"mnes", "paths"}, "")) - - pattern_NetworkElementService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"mnes", "mneid"}, "")) - - pattern_NetworkElementService_GetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"mnes", "changes"}, "")) - - pattern_NetworkElementService_GetChange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"mnes", "changes", "cuid"}, "")) - - pattern_NetworkElementService_SetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"mnes", "changes"}, "")) + pattern_NetworkElementService_SetPathList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"mnes", "paths"}, "")) + pattern_NetworkElementService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"mnes", "mneid"}, "")) + pattern_NetworkElementService_GetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"mnes", "changes"}, "")) + pattern_NetworkElementService_GetChange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"mnes", "changes", "cuid"}, "")) + pattern_NetworkElementService_SetChangeList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"mnes", "changes"}, "")) ) var ( - forward_NetworkElementService_Update_0 = runtime.ForwardResponseMessage - + forward_NetworkElementService_Update_0 = runtime.ForwardResponseMessage forward_NetworkElementService_GetAllFlattened_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_Get_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_AddList_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_GetPath_0 = runtime.ForwardResponseMessage - + forward_NetworkElementService_Get_0 = runtime.ForwardResponseMessage + forward_NetworkElementService_AddList_0 = runtime.ForwardResponseMessage + forward_NetworkElementService_GetPath_0 = runtime.ForwardResponseMessage forward_NetworkElementService_GetIntendedPath_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_SetPathList_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_Delete_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_GetChangeList_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_GetChange_0 = runtime.ForwardResponseMessage - - forward_NetworkElementService_SetChangeList_0 = runtime.ForwardResponseMessage + forward_NetworkElementService_SetPathList_0 = runtime.ForwardResponseMessage + forward_NetworkElementService_Delete_0 = runtime.ForwardResponseMessage + forward_NetworkElementService_GetChangeList_0 = runtime.ForwardResponseMessage + forward_NetworkElementService_GetChange_0 = runtime.ForwardResponseMessage + forward_NetworkElementService_SetChangeList_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/plugin-internal/plugin-internal.pb.go b/api/go/gosdn/plugin-internal/plugin-internal.pb.go index 119fb45b0..5e04dfcd9 100644 --- a/api/go/gosdn/plugin-internal/plugin-internal.pb.go +++ b/api/go/gosdn/plugin-internal/plugin-internal.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/plugin-internal/plugin-internal.proto @@ -9,10 +9,12 @@ package plugin_internal import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" plugin_registry "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" + _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -23,20 +25,17 @@ const ( ) type GetAvailablePluginsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAvailablePluginsRequest) Reset() { *x = GetAvailablePluginsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAvailablePluginsRequest) String() string { @@ -47,7 +46,7 @@ func (*GetAvailablePluginsRequest) ProtoMessage() {} func (x *GetAvailablePluginsRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -69,77 +68,19 @@ func (x *GetAvailablePluginsRequest) GetTimestamp() int64 { return 0 } -type GetAvailablePluginsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Plugins []*plugin_registry.Plugin `protobuf:"bytes,2,rep,name=plugins,proto3" json:"plugins,omitempty"` -} - -func (x *GetAvailablePluginsResponse) Reset() { - *x = GetAvailablePluginsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetAvailablePluginsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetAvailablePluginsResponse) ProtoMessage() {} - -func (x *GetAvailablePluginsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetAvailablePluginsResponse.ProtoReflect.Descriptor instead. -func (*GetAvailablePluginsResponse) Descriptor() ([]byte, []int) { - return file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP(), []int{1} -} - -func (x *GetAvailablePluginsResponse) GetTimestamp() int64 { - if x != nil { - return x.Timestamp - } - return 0 -} - -func (x *GetAvailablePluginsResponse) GetPlugins() []*plugin_registry.Plugin { - if x != nil { - return x.Plugins - } - return nil -} - type GetPluginSchemaRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPluginSchemaRequest) Reset() { *x = GetPluginSchemaRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPluginSchemaRequest) String() string { @@ -149,8 +90,8 @@ func (x *GetPluginSchemaRequest) String() string { func (*GetPluginSchemaRequest) ProtoMessage() {} func (x *GetPluginSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[1] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -162,7 +103,7 @@ func (x *GetPluginSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPluginSchemaRequest.ProtoReflect.Descriptor instead. func (*GetPluginSchemaRequest) Descriptor() ([]byte, []int) { - return file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP(), []int{2} + return file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP(), []int{1} } func (x *GetPluginSchemaRequest) GetTimestamp() int64 { @@ -180,20 +121,17 @@ func (x *GetPluginSchemaRequest) GetPid() string { } type PluginSchemaPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` unknownFields protoimpl.UnknownFields - - Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PluginSchemaPayload) Reset() { *x = PluginSchemaPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PluginSchemaPayload) String() string { @@ -203,8 +141,8 @@ func (x *PluginSchemaPayload) String() string { func (*PluginSchemaPayload) ProtoMessage() {} func (x *PluginSchemaPayload) ProtoReflect() protoreflect.Message { - mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[2] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -216,7 +154,7 @@ func (x *PluginSchemaPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use PluginSchemaPayload.ProtoReflect.Descriptor instead. func (*PluginSchemaPayload) Descriptor() ([]byte, []int) { - return file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP(), []int{3} + return file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP(), []int{2} } func (x *PluginSchemaPayload) GetChunk() []byte { @@ -228,7 +166,7 @@ func (x *PluginSchemaPayload) GetChunk() []byte { var File_gosdn_plugin_internal_plugin_internal_proto protoreflect.FileDescriptor -var file_gosdn_plugin_internal_plugin_internal_proto_rawDesc = []byte{ +var file_gosdn_plugin_internal_plugin_internal_proto_rawDesc = string([]byte{ 0x0a, 0x2b, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x67, @@ -237,80 +175,73 @@ var file_gosdn_plugin_internal_plugin_internal_proto_rawDesc = []byte{ 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2b, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3a, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x74, 0x0a, 0x1b, 0x47, 0x65, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3a, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x50, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x18, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x13, 0x50, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x32, 0x84, 0x02, 0x0a, 0x15, 0x50, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x7b, 0x0a, 0x10, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x37, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, - 0x22, 0x50, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x70, - 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x13, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, - 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x32, - 0xf2, 0x01, 0x0a, 0x15, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x41, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x31, 0x2e, - 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x50, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x30, 0x01, 0x42, 0x3b, 0x5a, 0x39, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, - 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, - 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, - 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x6e, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x42, 0x3b, + 0x5a, 0x39, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, + 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +}) var ( file_gosdn_plugin_internal_plugin_internal_proto_rawDescOnce sync.Once - file_gosdn_plugin_internal_plugin_internal_proto_rawDescData = file_gosdn_plugin_internal_plugin_internal_proto_rawDesc + file_gosdn_plugin_internal_plugin_internal_proto_rawDescData []byte ) func file_gosdn_plugin_internal_plugin_internal_proto_rawDescGZIP() []byte { file_gosdn_plugin_internal_plugin_internal_proto_rawDescOnce.Do(func() { - file_gosdn_plugin_internal_plugin_internal_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_plugin_internal_plugin_internal_proto_rawDescData) + file_gosdn_plugin_internal_plugin_internal_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_plugin_internal_plugin_internal_proto_rawDesc), len(file_gosdn_plugin_internal_plugin_internal_proto_rawDesc))) }) return file_gosdn_plugin_internal_plugin_internal_proto_rawDescData } -var file_gosdn_plugin_internal_plugin_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_gosdn_plugin_internal_plugin_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 3) var file_gosdn_plugin_internal_plugin_internal_proto_goTypes = []any{ (*GetAvailablePluginsRequest)(nil), // 0: gosdn.plugin_internal.GetAvailablePluginsRequest - (*GetAvailablePluginsResponse)(nil), // 1: gosdn.plugin_internal.GetAvailablePluginsResponse - (*GetPluginSchemaRequest)(nil), // 2: gosdn.plugin_internal.GetPluginSchemaRequest - (*PluginSchemaPayload)(nil), // 3: gosdn.plugin_internal.PluginSchemaPayload - (*plugin_registry.Plugin)(nil), // 4: gosdn.plugin_registry.Plugin - (*plugin_registry.GetResponse)(nil), // 5: gosdn.plugin_registry.GetResponse + (*GetPluginSchemaRequest)(nil), // 1: gosdn.plugin_internal.GetPluginSchemaRequest + (*PluginSchemaPayload)(nil), // 2: gosdn.plugin_internal.PluginSchemaPayload + (*plugin_registry.GetResponse)(nil), // 3: gosdn.plugin_registry.GetResponse } var file_gosdn_plugin_internal_plugin_internal_proto_depIdxs = []int32{ - 4, // 0: gosdn.plugin_internal.GetAvailablePluginsResponse.plugins:type_name -> gosdn.plugin_registry.Plugin - 0, // 1: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:input_type -> gosdn.plugin_internal.GetAvailablePluginsRequest - 2, // 2: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:input_type -> gosdn.plugin_internal.GetPluginSchemaRequest - 5, // 3: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:output_type -> gosdn.plugin_registry.GetResponse - 3, // 4: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:output_type -> gosdn.plugin_internal.PluginSchemaPayload - 3, // [3:5] is the sub-list for method output_type - 1, // [1:3] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 0, // 0: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:input_type -> gosdn.plugin_internal.GetAvailablePluginsRequest + 1, // 1: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:input_type -> gosdn.plugin_internal.GetPluginSchemaRequest + 3, // 2: gosdn.plugin_internal.PluginInternalService.AvailablePlugins:output_type -> gosdn.plugin_registry.GetResponse + 2, // 3: gosdn.plugin_internal.PluginInternalService.GetPluginSchema:output_type -> gosdn.plugin_internal.PluginSchemaPayload + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } func init() { file_gosdn_plugin_internal_plugin_internal_proto_init() } @@ -318,63 +249,13 @@ func file_gosdn_plugin_internal_plugin_internal_proto_init() { if File_gosdn_plugin_internal_plugin_internal_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*GetAvailablePluginsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*GetAvailablePluginsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GetPluginSchemaRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_internal_plugin_internal_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*PluginSchemaPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_plugin_internal_plugin_internal_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_plugin_internal_plugin_internal_proto_rawDesc), len(file_gosdn_plugin_internal_plugin_internal_proto_rawDesc)), NumEnums: 0, - NumMessages: 4, + NumMessages: 3, NumExtensions: 0, NumServices: 1, }, @@ -383,7 +264,6 @@ func file_gosdn_plugin_internal_plugin_internal_proto_init() { MessageInfos: file_gosdn_plugin_internal_plugin_internal_proto_msgTypes, }.Build() File_gosdn_plugin_internal_plugin_internal_proto = out.File - file_gosdn_plugin_internal_plugin_internal_proto_rawDesc = nil file_gosdn_plugin_internal_plugin_internal_proto_goTypes = nil file_gosdn_plugin_internal_plugin_internal_proto_depIdxs = nil } diff --git a/api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go b/api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go new file mode 100644 index 000000000..e319b9d24 --- /dev/null +++ b/api/go/gosdn/plugin-internal/plugin-internal.pb.gw.go @@ -0,0 +1,163 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: gosdn/plugin-internal/plugin-internal.proto + +/* +Package plugin_internal is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package plugin_internal + +import ( + "context" + "errors" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) + +var filter_PluginInternalService_AvailablePlugins_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + +func request_PluginInternalService_AvailablePlugins_0(ctx context.Context, marshaler runtime.Marshaler, client PluginInternalServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetAvailablePluginsRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginInternalService_AvailablePlugins_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.AvailablePlugins(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_PluginInternalService_AvailablePlugins_0(ctx context.Context, marshaler runtime.Marshaler, server PluginInternalServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetAvailablePluginsRequest + metadata runtime.ServerMetadata + ) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginInternalService_AvailablePlugins_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.AvailablePlugins(ctx, &protoReq) + return msg, metadata, err +} + +// RegisterPluginInternalServiceHandlerServer registers the http handlers for service PluginInternalService to "mux". +// UnaryRPC :call PluginInternalServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPluginInternalServiceHandlerFromEndpoint instead. +// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. +func RegisterPluginInternalServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PluginInternalServiceServer) error { + mux.Handle(http.MethodGet, pattern_PluginInternalService_AvailablePlugins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins", runtime.WithHTTPPathPattern("/plugins")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PluginInternalService_AvailablePlugins_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_PluginInternalService_AvailablePlugins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + + return nil +} + +// RegisterPluginInternalServiceHandlerFromEndpoint is same as RegisterPluginInternalServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterPluginInternalServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.NewClient(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + return RegisterPluginInternalServiceHandler(ctx, mux, conn) +} + +// RegisterPluginInternalServiceHandler registers the http handlers for service PluginInternalService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterPluginInternalServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterPluginInternalServiceHandlerClient(ctx, mux, NewPluginInternalServiceClient(conn)) +} + +// RegisterPluginInternalServiceHandlerClient registers the http handlers for service PluginInternalService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PluginInternalServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PluginInternalServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "PluginInternalServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. +func RegisterPluginInternalServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PluginInternalServiceClient) error { + mux.Handle(http.MethodGet, pattern_PluginInternalService_AvailablePlugins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.plugin_internal.PluginInternalService/AvailablePlugins", runtime.WithHTTPPathPattern("/plugins")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PluginInternalService_AvailablePlugins_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_PluginInternalService_AvailablePlugins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + return nil +} + +var ( + pattern_PluginInternalService_AvailablePlugins_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"plugins"}, "")) +) + +var ( + forward_PluginInternalService_AvailablePlugins_0 = runtime.ForwardResponseMessage +) diff --git a/api/go/gosdn/plugin-registry/plugin-registry.pb.go b/api/go/gosdn/plugin-registry/plugin-registry.pb.go index 44f88183f..abedd4ee0 100644 --- a/api/go/gosdn/plugin-registry/plugin-registry.pb.go +++ b/api/go/gosdn/plugin-registry/plugin-registry.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/plugin-registry/plugin-registry.proto @@ -13,6 +13,7 @@ import ( _ "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -23,21 +24,18 @@ const ( ) type GetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Query []*Query `protobuf:"bytes,2,rep,name=query,proto3" json:"query,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Query []*Query `protobuf:"bytes,2,rep,name=query,proto3" json:"query,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRequest) Reset() { *x = GetRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRequest) String() string { @@ -48,7 +46,7 @@ func (*GetRequest) ProtoMessage() {} func (x *GetRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -78,20 +76,17 @@ func (x *GetRequest) GetQuery() []*Query { } type GetAllRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *GetAllRequest) Reset() { *x = GetAllRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllRequest) String() string { @@ -102,7 +97,7 @@ func (*GetAllRequest) ProtoMessage() {} func (x *GetAllRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -125,24 +120,21 @@ func (x *GetAllRequest) GetTimestamp() int64 { } type Query struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Identifier: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Identifier: // // *Query_Id // *Query_Name - Identifier isQuery_Identifier `protobuf_oneof:"identifier"` + Identifier isQuery_Identifier `protobuf_oneof:"identifier"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Query) Reset() { *x = Query{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Query) String() string { @@ -153,7 +145,7 @@ func (*Query) ProtoMessage() {} func (x *Query) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -168,23 +160,27 @@ func (*Query) Descriptor() ([]byte, []int) { return file_gosdn_plugin_registry_plugin_registry_proto_rawDescGZIP(), []int{2} } -func (m *Query) GetIdentifier() isQuery_Identifier { - if m != nil { - return m.Identifier +func (x *Query) GetIdentifier() isQuery_Identifier { + if x != nil { + return x.Identifier } return nil } func (x *Query) GetId() string { - if x, ok := x.GetIdentifier().(*Query_Id); ok { - return x.Id + if x != nil { + if x, ok := x.Identifier.(*Query_Id); ok { + return x.Id + } } return "" } func (x *Query) GetName() string { - if x, ok := x.GetIdentifier().(*Query_Name); ok { - return x.Name + if x != nil { + if x, ok := x.Identifier.(*Query_Name); ok { + return x.Name + } } return "" } @@ -206,21 +202,18 @@ func (*Query_Id) isQuery_Identifier() {} func (*Query_Name) isQuery_Identifier() {} type GetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Plugins []*Plugin `protobuf:"bytes,2,rep,name=plugins,proto3" json:"plugins,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Plugins []*Plugin `protobuf:"bytes,2,rep,name=plugins,proto3" json:"plugins,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetResponse) Reset() { *x = GetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetResponse) String() string { @@ -231,7 +224,7 @@ func (*GetResponse) ProtoMessage() {} func (x *GetResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -261,21 +254,18 @@ func (x *GetResponse) GetPlugins() []*Plugin { } type GetDownloadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDownloadRequest) Reset() { *x = GetDownloadRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetDownloadRequest) String() string { @@ -286,7 +276,7 @@ func (*GetDownloadRequest) ProtoMessage() {} func (x *GetDownloadRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -316,20 +306,17 @@ func (x *GetDownloadRequest) GetId() string { } type GetDownloadPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` unknownFields protoimpl.UnknownFields - - Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDownloadPayload) Reset() { *x = GetDownloadPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetDownloadPayload) String() string { @@ -340,7 +327,7 @@ func (*GetDownloadPayload) ProtoMessage() {} func (x *GetDownloadPayload) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -363,21 +350,18 @@ func (x *GetDownloadPayload) GetChunk() []byte { } type DeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Id []string `protobuf:"bytes,2,rep,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Id []string `protobuf:"bytes,2,rep,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRequest) Reset() { *x = DeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRequest) String() string { @@ -388,7 +372,7 @@ func (*DeleteRequest) ProtoMessage() {} func (x *DeleteRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -418,20 +402,17 @@ func (x *DeleteRequest) GetId() []string { } type DeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *DeleteResponse) Reset() { *x = DeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteResponse) String() string { @@ -442,7 +423,7 @@ func (*DeleteResponse) ProtoMessage() {} func (x *DeleteResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -465,21 +446,18 @@ func (x *DeleteResponse) GetTimestamp() int64 { } type Plugin struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Manifest *Manifest `protobuf:"bytes,2,opt,name=manifest,proto3" json:"manifest,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Manifest *Manifest `protobuf:"bytes,2,opt,name=manifest,proto3" json:"manifest,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Plugin) Reset() { *x = Plugin{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Plugin) String() string { @@ -490,7 +468,7 @@ func (*Plugin) ProtoMessage() {} func (x *Plugin) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -520,23 +498,20 @@ func (x *Plugin) GetManifest() *Manifest { } type Manifest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Firmware string `protobuf:"bytes,2,opt,name=firmware,proto3" json:"firmware,omitempty"` + Author string `protobuf:"bytes,3,opt,name=author,proto3" json:"author,omitempty"` + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Firmware string `protobuf:"bytes,2,opt,name=firmware,proto3" json:"firmware,omitempty"` - Author string `protobuf:"bytes,3,opt,name=author,proto3" json:"author,omitempty"` - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Manifest) Reset() { *x = Manifest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Manifest) String() string { @@ -547,7 +522,7 @@ func (*Manifest) ProtoMessage() {} func (x *Manifest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -592,7 +567,7 @@ func (x *Manifest) GetVersion() string { var File_gosdn_plugin_registry_plugin_registry_proto protoreflect.FileDescriptor -var file_gosdn_plugin_registry_plugin_registry_proto_rawDesc = []byte{ +var file_gosdn_plugin_registry_plugin_registry_proto_rawDesc = string([]byte{ 0x0a, 0x2b, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x67, @@ -677,16 +652,16 @@ var file_gosdn_plugin_registry_plugin_registry_proto_rawDesc = []byte{ 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_plugin_registry_plugin_registry_proto_rawDescOnce sync.Once - file_gosdn_plugin_registry_plugin_registry_proto_rawDescData = file_gosdn_plugin_registry_plugin_registry_proto_rawDesc + file_gosdn_plugin_registry_plugin_registry_proto_rawDescData []byte ) func file_gosdn_plugin_registry_plugin_registry_proto_rawDescGZIP() []byte { file_gosdn_plugin_registry_plugin_registry_proto_rawDescOnce.Do(func() { - file_gosdn_plugin_registry_plugin_registry_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_plugin_registry_plugin_registry_proto_rawDescData) + file_gosdn_plugin_registry_plugin_registry_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_plugin_registry_plugin_registry_proto_rawDesc), len(file_gosdn_plugin_registry_plugin_registry_proto_rawDesc))) }) return file_gosdn_plugin_registry_plugin_registry_proto_rawDescData } @@ -728,128 +703,6 @@ func file_gosdn_plugin_registry_plugin_registry_proto_init() { if File_gosdn_plugin_registry_plugin_registry_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*GetRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*GetAllRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*Query); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetDownloadRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetDownloadPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*DeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*Plugin); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*Manifest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_gosdn_plugin_registry_plugin_registry_proto_msgTypes[2].OneofWrappers = []any{ (*Query_Id)(nil), (*Query_Name)(nil), @@ -858,7 +711,7 @@ func file_gosdn_plugin_registry_plugin_registry_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_plugin_registry_plugin_registry_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_plugin_registry_plugin_registry_proto_rawDesc), len(file_gosdn_plugin_registry_plugin_registry_proto_rawDesc)), NumEnums: 0, NumMessages: 10, NumExtensions: 0, @@ -869,7 +722,6 @@ func file_gosdn_plugin_registry_plugin_registry_proto_init() { MessageInfos: file_gosdn_plugin_registry_plugin_registry_proto_msgTypes, }.Build() File_gosdn_plugin_registry_plugin_registry_proto = out.File - file_gosdn_plugin_registry_plugin_registry_proto_rawDesc = nil file_gosdn_plugin_registry_plugin_registry_proto_goTypes = nil file_gosdn_plugin_registry_plugin_registry_proto_depIdxs = nil } diff --git a/api/go/gosdn/plugin-registry/plugin-registry.pb.gw.go b/api/go/gosdn/plugin-registry/plugin-registry.pb.gw.go new file mode 100644 index 000000000..bd500348f --- /dev/null +++ b/api/go/gosdn/plugin-registry/plugin-registry.pb.gw.go @@ -0,0 +1,162 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: gosdn/plugin-registry/plugin-registry.proto + +/* +Package plugin_registry is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package plugin_registry + +import ( + "context" + "errors" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) + +var filter_PluginRegistryService_GetAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + +func request_PluginRegistryService_GetAll_0(ctx context.Context, marshaler runtime.Marshaler, client PluginRegistryServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetAllRequest + metadata runtime.ServerMetadata + ) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginRegistryService_GetAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.GetAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_PluginRegistryService_GetAll_0(ctx context.Context, marshaler runtime.Marshaler, server PluginRegistryServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetAllRequest + metadata runtime.ServerMetadata + ) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PluginRegistryService_GetAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.GetAll(ctx, &protoReq) + return msg, metadata, err +} + +// RegisterPluginRegistryServiceHandlerServer registers the http handlers for service PluginRegistryService to "mux". +// UnaryRPC :call PluginRegistryServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPluginRegistryServiceHandlerFromEndpoint instead. +// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. +func RegisterPluginRegistryServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PluginRegistryServiceServer) error { + mux.Handle(http.MethodGet, pattern_PluginRegistryService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.plugin_registry.PluginRegistryService/GetAll", runtime.WithHTTPPathPattern("/plugins/here")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PluginRegistryService_GetAll_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_PluginRegistryService_GetAll_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + + return nil +} + +// RegisterPluginRegistryServiceHandlerFromEndpoint is same as RegisterPluginRegistryServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterPluginRegistryServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.NewClient(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + return RegisterPluginRegistryServiceHandler(ctx, mux, conn) +} + +// RegisterPluginRegistryServiceHandler registers the http handlers for service PluginRegistryService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterPluginRegistryServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterPluginRegistryServiceHandlerClient(ctx, mux, NewPluginRegistryServiceClient(conn)) +} + +// RegisterPluginRegistryServiceHandlerClient registers the http handlers for service PluginRegistryService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PluginRegistryServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PluginRegistryServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "PluginRegistryServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. +func RegisterPluginRegistryServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PluginRegistryServiceClient) error { + mux.Handle(http.MethodGet, pattern_PluginRegistryService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.plugin_registry.PluginRegistryService/GetAll", runtime.WithHTTPPathPattern("/plugins/here")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PluginRegistryService_GetAll_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_PluginRegistryService_GetAll_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + return nil +} + +var ( + pattern_PluginRegistryService_GetAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"plugins", "here"}, "")) +) + +var ( + forward_PluginRegistryService_GetAll_0 = runtime.ForwardResponseMessage +) diff --git a/api/go/gosdn/plugin/plugin.pb.go b/api/go/gosdn/plugin/plugin.pb.go index 3f6402531..0a66a1963 100644 --- a/api/go/gosdn/plugin/plugin.pb.go +++ b/api/go/gosdn/plugin/plugin.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/plugin/plugin.proto @@ -14,6 +14,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -24,22 +25,19 @@ const ( ) type UnmarshalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Json []byte `protobuf:"bytes,1,opt,name=json,proto3" json:"json,omitempty"` + Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Json []byte `protobuf:"bytes,1,opt,name=json,proto3" json:"json,omitempty"` - Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnmarshalRequest) Reset() { *x = UnmarshalRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UnmarshalRequest) String() string { @@ -50,7 +48,7 @@ func (*UnmarshalRequest) ProtoMessage() {} func (x *UnmarshalRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -87,20 +85,17 @@ func (x *UnmarshalRequest) GetValue() *gnmi.TypedValue { } type UnmarshalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` unknownFields protoimpl.UnknownFields - - Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnmarshalResponse) Reset() { *x = UnmarshalResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UnmarshalResponse) String() string { @@ -111,7 +106,7 @@ func (*UnmarshalResponse) ProtoMessage() {} func (x *UnmarshalResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -134,21 +129,18 @@ func (x *UnmarshalResponse) GetValid() bool { } type SetNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetNodeRequest) Reset() { *x = SetNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetNodeRequest) String() string { @@ -159,7 +151,7 @@ func (*SetNodeRequest) ProtoMessage() {} func (x *SetNodeRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -189,20 +181,17 @@ func (x *SetNodeRequest) GetValue() *gnmi.TypedValue { } type SetNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` unknownFields protoimpl.UnknownFields - - Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetNodeResponse) Reset() { *x = SetNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetNodeResponse) String() string { @@ -213,7 +202,7 @@ func (*SetNodeResponse) ProtoMessage() {} func (x *SetNodeResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -236,21 +225,18 @@ func (x *SetNodeResponse) GetValid() bool { } type GetNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - RequestForIntendedState bool `protobuf:"varint,3,opt,name=requestForIntendedState,proto3" json:"requestForIntendedState,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + RequestForIntendedState bool `protobuf:"varint,3,opt,name=requestForIntendedState,proto3" json:"requestForIntendedState,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetNodeRequest) Reset() { *x = GetNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetNodeRequest) String() string { @@ -261,7 +247,7 @@ func (*GetNodeRequest) ProtoMessage() {} func (x *GetNodeRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -291,20 +277,17 @@ func (x *GetNodeRequest) GetRequestForIntendedState() bool { } type GetNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Nodes []*gnmi.Notification `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` unknownFields protoimpl.UnknownFields - - Nodes []*gnmi.Notification `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetNodeResponse) Reset() { *x = GetNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetNodeResponse) String() string { @@ -315,7 +298,7 @@ func (*GetNodeResponse) ProtoMessage() {} func (x *GetNodeResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -338,20 +321,17 @@ func (x *GetNodeResponse) GetNodes() []*gnmi.Notification { } type DeleteNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` unknownFields protoimpl.UnknownFields - - Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteNodeRequest) Reset() { *x = DeleteNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteNodeRequest) String() string { @@ -362,7 +342,7 @@ func (*DeleteNodeRequest) ProtoMessage() {} func (x *DeleteNodeRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -385,20 +365,17 @@ func (x *DeleteNodeRequest) GetPath() *gnmi.Path { } type DeleteNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` unknownFields protoimpl.UnknownFields - - Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteNodeResponse) Reset() { *x = DeleteNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteNodeResponse) String() string { @@ -409,7 +386,7 @@ func (*DeleteNodeResponse) ProtoMessage() {} func (x *DeleteNodeResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -432,20 +409,17 @@ func (x *DeleteNodeResponse) GetValid() bool { } type ModelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FilterReadOnly bool `protobuf:"varint,1,opt,name=filterReadOnly,proto3" json:"filterReadOnly,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + FilterReadOnly bool `protobuf:"varint,1,opt,name=filterReadOnly,proto3" json:"filterReadOnly,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ModelRequest) Reset() { *x = ModelRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ModelRequest) String() string { @@ -456,7 +430,7 @@ func (*ModelRequest) ProtoMessage() {} func (x *ModelRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -479,20 +453,17 @@ func (x *ModelRequest) GetFilterReadOnly() bool { } type ModelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Json []byte `protobuf:"bytes,1,opt,name=json,proto3" json:"json,omitempty"` // JSON-encoded text per RFC7951. unknownFields protoimpl.UnknownFields - - Json []byte `protobuf:"bytes,1,opt,name=json,proto3" json:"json,omitempty"` // JSON-encoded text per RFC7951. + sizeCache protoimpl.SizeCache } func (x *ModelResponse) Reset() { *x = ModelResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ModelResponse) String() string { @@ -503,7 +474,7 @@ func (*ModelResponse) ProtoMessage() {} func (x *ModelResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -526,21 +497,18 @@ func (x *ModelResponse) GetJson() []byte { } type DiffRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Original []byte `protobuf:"bytes,1,opt,name=original,proto3" json:"original,omitempty"` // JSON-encoded text per RFC7951. + Modified []byte `protobuf:"bytes,2,opt,name=modified,proto3" json:"modified,omitempty"` // JSON-encoded text per RFC7951. unknownFields protoimpl.UnknownFields - - Original []byte `protobuf:"bytes,1,opt,name=original,proto3" json:"original,omitempty"` // JSON-encoded text per RFC7951. - Modified []byte `protobuf:"bytes,2,opt,name=modified,proto3" json:"modified,omitempty"` // JSON-encoded text per RFC7951. + sizeCache protoimpl.SizeCache } func (x *DiffRequest) Reset() { *x = DiffRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DiffRequest) String() string { @@ -551,7 +519,7 @@ func (*DiffRequest) ProtoMessage() {} func (x *DiffRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -581,20 +549,17 @@ func (x *DiffRequest) GetModified() []byte { } type DiffResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Notification *gnmi.Notification `protobuf:"bytes,1,opt,name=notification,proto3" json:"notification,omitempty"` unknownFields protoimpl.UnknownFields - - Notification *gnmi.Notification `protobuf:"bytes,1,opt,name=notification,proto3" json:"notification,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DiffResponse) Reset() { *x = DiffResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DiffResponse) String() string { @@ -605,7 +570,7 @@ func (*DiffResponse) ProtoMessage() {} func (x *DiffResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -628,22 +593,19 @@ func (x *DiffResponse) GetNotification() *gnmi.Notification { } type ValidateChangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Operation networkelement.ApiOperation `protobuf:"varint,1,opt,name=operation,proto3,enum=gosdn.networkelement.ApiOperation" json:"operation,omitempty"` + Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Operation networkelement.ApiOperation `protobuf:"varint,1,opt,name=operation,proto3,enum=gosdn.networkelement.ApiOperation" json:"operation,omitempty"` - Path *gnmi.Path `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - Value *gnmi.TypedValue `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ValidateChangeRequest) Reset() { *x = ValidateChangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValidateChangeRequest) String() string { @@ -654,7 +616,7 @@ func (*ValidateChangeRequest) ProtoMessage() {} func (x *ValidateChangeRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -691,20 +653,17 @@ func (x *ValidateChangeRequest) GetValue() *gnmi.TypedValue { } type ValidateChangeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Model []byte `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` // JSON-encoded text per RFC7951. unknownFields protoimpl.UnknownFields - - Model []byte `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` // JSON-encoded text per RFC7951. + sizeCache protoimpl.SizeCache } func (x *ValidateChangeResponse) Reset() { *x = ValidateChangeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValidateChangeResponse) String() string { @@ -715,7 +674,7 @@ func (*ValidateChangeResponse) ProtoMessage() {} func (x *ValidateChangeResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -738,20 +697,17 @@ func (x *ValidateChangeResponse) GetModel() []byte { } type PruneConfigFalseRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // JSON-encoded text per RFC7951. unknownFields protoimpl.UnknownFields - - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // JSON-encoded text per RFC7951. + sizeCache protoimpl.SizeCache } func (x *PruneConfigFalseRequest) Reset() { *x = PruneConfigFalseRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PruneConfigFalseRequest) String() string { @@ -762,7 +718,7 @@ func (*PruneConfigFalseRequest) ProtoMessage() {} func (x *PruneConfigFalseRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -785,20 +741,17 @@ func (x *PruneConfigFalseRequest) GetValue() []byte { } type PruneConfigFalseResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Model []byte `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` // JSON-encoded text per RFC7951. unknownFields protoimpl.UnknownFields - - Model []byte `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"` // JSON-encoded text per RFC7951. + sizeCache protoimpl.SizeCache } func (x *PruneConfigFalseResponse) Reset() { *x = PruneConfigFalseResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PruneConfigFalseResponse) String() string { @@ -809,7 +762,7 @@ func (*PruneConfigFalseResponse) ProtoMessage() {} func (x *PruneConfigFalseResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -832,18 +785,16 @@ func (x *PruneConfigFalseResponse) GetModel() []byte { } type SchemaTreeGzipRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SchemaTreeGzipRequest) Reset() { *x = SchemaTreeGzipRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SchemaTreeGzipRequest) String() string { @@ -854,7 +805,7 @@ func (*SchemaTreeGzipRequest) ProtoMessage() {} func (x *SchemaTreeGzipRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -870,20 +821,17 @@ func (*SchemaTreeGzipRequest) Descriptor() ([]byte, []int) { } type Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` unknownFields protoimpl.UnknownFields - - Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Payload) Reset() { *x = Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_plugin_plugin_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_plugin_plugin_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Payload) String() string { @@ -894,7 +842,7 @@ func (*Payload) ProtoMessage() {} func (x *Payload) ProtoReflect() protoreflect.Message { mi := &file_gosdn_plugin_plugin_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -918,7 +866,7 @@ func (x *Payload) GetChunk() []byte { var File_gosdn_plugin_plugin_proto protoreflect.FileDescriptor -var file_gosdn_plugin_plugin_proto_rawDesc = []byte{ +var file_gosdn_plugin_plugin_proto_rawDesc = string([]byte{ 0x0a, 0x19, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, @@ -1057,16 +1005,16 @@ var file_gosdn_plugin_plugin_proto_rawDesc = []byte{ 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_plugin_plugin_proto_rawDescOnce sync.Once - file_gosdn_plugin_plugin_proto_rawDescData = file_gosdn_plugin_plugin_proto_rawDesc + file_gosdn_plugin_plugin_proto_rawDescData []byte ) func file_gosdn_plugin_plugin_proto_rawDescGZIP() []byte { file_gosdn_plugin_plugin_proto_rawDescOnce.Do(func() { - file_gosdn_plugin_plugin_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_plugin_plugin_proto_rawDescData) + file_gosdn_plugin_plugin_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_plugin_plugin_proto_rawDesc), len(file_gosdn_plugin_plugin_proto_rawDesc))) }) return file_gosdn_plugin_plugin_proto_rawDescData } @@ -1138,229 +1086,11 @@ func file_gosdn_plugin_plugin_proto_init() { if File_gosdn_plugin_plugin_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_plugin_plugin_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*UnmarshalRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*UnmarshalResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*SetNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*SetNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*DeleteNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*DeleteNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ModelRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*ModelResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*DiffRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*DiffResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ValidateChangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*ValidateChangeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*PruneConfigFalseRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*PruneConfigFalseResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*SchemaTreeGzipRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_plugin_plugin_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_plugin_plugin_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_plugin_plugin_proto_rawDesc), len(file_gosdn_plugin_plugin_proto_rawDesc)), NumEnums: 0, NumMessages: 18, NumExtensions: 0, @@ -1371,7 +1101,6 @@ func file_gosdn_plugin_plugin_proto_init() { MessageInfos: file_gosdn_plugin_plugin_proto_msgTypes, }.Build() File_gosdn_plugin_plugin_proto = out.File - file_gosdn_plugin_plugin_proto_rawDesc = nil file_gosdn_plugin_plugin_proto_goTypes = nil file_gosdn_plugin_plugin_proto_depIdxs = nil } diff --git a/api/go/gosdn/pnd/pnd.pb.go b/api/go/gosdn/pnd/pnd.pb.go index 8c73f1394..8d056e2d8 100644 --- a/api/go/gosdn/pnd/pnd.pb.go +++ b/api/go/gosdn/pnd/pnd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/pnd/pnd.proto @@ -17,6 +17,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -27,22 +28,19 @@ const ( ) type PrincipalNetworkDomain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PrincipalNetworkDomain) Reset() { *x = PrincipalNetworkDomain{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PrincipalNetworkDomain) String() string { @@ -53,7 +51,7 @@ func (*PrincipalNetworkDomain) ProtoMessage() {} func (x *PrincipalNetworkDomain) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -90,21 +88,18 @@ func (x *PrincipalNetworkDomain) GetDescription() string { } type GetPndRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPndRequest) Reset() { *x = GetPndRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPndRequest) String() string { @@ -115,7 +110,7 @@ func (*GetPndRequest) ProtoMessage() {} func (x *GetPndRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -145,21 +140,18 @@ func (x *GetPndRequest) GetPid() string { } type GetPndResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pnd *PrincipalNetworkDomain `protobuf:"bytes,2,opt,name=pnd,proto3" json:"pnd,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPndResponse) Reset() { *x = GetPndResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPndResponse) String() string { @@ -170,7 +162,7 @@ func (*GetPndResponse) ProtoMessage() {} func (x *GetPndResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -200,20 +192,17 @@ func (x *GetPndResponse) GetPnd() *PrincipalNetworkDomain { } type GetPndListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *GetPndListRequest) Reset() { *x = GetPndListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPndListRequest) String() string { @@ -224,7 +213,7 @@ func (*GetPndListRequest) ProtoMessage() {} func (x *GetPndListRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -247,21 +236,18 @@ func (x *GetPndListRequest) GetTimestamp() int64 { } type GetPndListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pnd []*PrincipalNetworkDomain `protobuf:"bytes,2,rep,name=pnd,proto3" json:"pnd,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pnd []*PrincipalNetworkDomain `protobuf:"bytes,2,rep,name=pnd,proto3" json:"pnd,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPndListResponse) Reset() { *x = GetPndListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPndListResponse) String() string { @@ -272,7 +258,7 @@ func (*GetPndListResponse) ProtoMessage() {} func (x *GetPndListResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -302,21 +288,18 @@ func (x *GetPndListResponse) GetPnd() []*PrincipalNetworkDomain { } type CreatePndListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pnd []*PndCreateProperties `protobuf:"bytes,2,rep,name=pnd,proto3" json:"pnd,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pnd []*PndCreateProperties `protobuf:"bytes,2,rep,name=pnd,proto3" json:"pnd,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreatePndListRequest) Reset() { *x = CreatePndListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreatePndListRequest) String() string { @@ -327,7 +310,7 @@ func (*CreatePndListRequest) ProtoMessage() {} func (x *CreatePndListRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -357,21 +340,18 @@ func (x *CreatePndListRequest) GetPnd() []*PndCreateProperties { } type PndCreateProperties struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PndCreateProperties) Reset() { *x = PndCreateProperties{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PndCreateProperties) String() string { @@ -382,7 +362,7 @@ func (*PndCreateProperties) ProtoMessage() {} func (x *PndCreateProperties) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -412,20 +392,17 @@ func (x *PndCreateProperties) GetDescription() string { } type CreatePndListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *CreatePndListResponse) Reset() { *x = CreatePndListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreatePndListResponse) String() string { @@ -436,7 +413,7 @@ func (*CreatePndListResponse) ProtoMessage() {} func (x *CreatePndListResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -459,21 +436,18 @@ func (x *CreatePndListResponse) GetTimestamp() int64 { } type DeletePndRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. - Pid string `protobuf:"bytes,4,opt,name=pid,proto3" json:"pid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeletePndRequest) Reset() { *x = DeletePndRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeletePndRequest) String() string { @@ -484,7 +458,7 @@ func (*DeletePndRequest) ProtoMessage() {} func (x *DeletePndRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -514,20 +488,17 @@ func (x *DeletePndRequest) GetPid() string { } type DeletePndResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch. + sizeCache protoimpl.SizeCache } func (x *DeletePndResponse) Reset() { *x = DeletePndResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_pnd_pnd_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_pnd_pnd_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeletePndResponse) String() string { @@ -538,7 +509,7 @@ func (*DeletePndResponse) ProtoMessage() {} func (x *DeletePndResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_pnd_pnd_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -562,7 +533,7 @@ func (x *DeletePndResponse) GetTimestamp() int64 { var File_gosdn_pnd_pnd_proto protoreflect.FileDescriptor -var file_gosdn_pnd_pnd_proto_rawDesc = []byte{ +var file_gosdn_pnd_pnd_proto_rawDesc = string([]byte{ 0x0a, 0x13, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e, 0x64, 0x2f, 0x70, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, @@ -673,16 +644,16 @@ var file_gosdn_pnd_pnd_proto_rawDesc = []byte{ 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_pnd_pnd_proto_rawDescOnce sync.Once - file_gosdn_pnd_pnd_proto_rawDescData = file_gosdn_pnd_pnd_proto_rawDesc + file_gosdn_pnd_pnd_proto_rawDescData []byte ) func file_gosdn_pnd_pnd_proto_rawDescGZIP() []byte { file_gosdn_pnd_pnd_proto_rawDescOnce.Do(func() { - file_gosdn_pnd_pnd_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_pnd_pnd_proto_rawDescData) + file_gosdn_pnd_pnd_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_pnd_pnd_proto_rawDesc), len(file_gosdn_pnd_pnd_proto_rawDesc))) }) return file_gosdn_pnd_pnd_proto_rawDescData } @@ -724,133 +695,11 @@ func file_gosdn_pnd_pnd_proto_init() { if File_gosdn_pnd_pnd_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_pnd_pnd_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*PrincipalNetworkDomain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*GetPndRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GetPndResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetPndListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetPndListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*CreatePndListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*PndCreateProperties); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*CreatePndListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*DeletePndRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_pnd_pnd_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*DeletePndResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_pnd_pnd_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_pnd_pnd_proto_rawDesc), len(file_gosdn_pnd_pnd_proto_rawDesc)), NumEnums: 0, NumMessages: 10, NumExtensions: 0, @@ -861,7 +710,6 @@ func file_gosdn_pnd_pnd_proto_init() { MessageInfos: file_gosdn_pnd_pnd_proto_msgTypes, }.Build() File_gosdn_pnd_pnd_proto = out.File - file_gosdn_pnd_pnd_proto_rawDesc = nil file_gosdn_pnd_pnd_proto_goTypes = nil file_gosdn_pnd_pnd_proto_depIdxs = nil } diff --git a/api/go/gosdn/pnd/pnd.pb.gw.go b/api/go/gosdn/pnd/pnd.pb.gw.go index 6aace9934..f24e132eb 100644 --- a/api/go/gosdn/pnd/pnd.pb.gw.go +++ b/api/go/gosdn/pnd/pnd.pb.gw.go @@ -10,6 +10,7 @@ package pnd import ( "context" + "errors" "io" "net/http" @@ -24,213 +25,173 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - var ( - filter_PndService_GetPnd_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join ) -func request_PndService_GetPnd_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPndRequest - var metadata runtime.ServerMetadata +var filter_PndService_GetPnd_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +func request_PndService_GetPnd_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( - val string - ok bool - err error - _ = err + protoReq GetPndRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetPnd_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetPnd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_PndService_GetPnd_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPndRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetPndRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetPnd_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetPnd(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_PndService_GetPndList_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_PndService_GetPndList_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_PndService_GetPndList_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPndListRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetPndListRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetPndList_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetPndList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_PndService_GetPndList_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetPndListRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetPndListRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_GetPndList_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetPndList(ctx, &protoReq) return msg, metadata, err - } func request_PndService_CreatePndList_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreatePndListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreatePndListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreatePndList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_PndService_CreatePndList_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreatePndListRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreatePndListRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.CreatePndList(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_PndService_DeletePnd_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_PndService_DeletePnd_0 = &utilities.DoubleArray{Encoding: map[string]int{"pid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_PndService_DeletePnd_0(ctx context.Context, marshaler runtime.Marshaler, client PndServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeletePndRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeletePndRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_DeletePnd_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.DeletePnd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_PndService_DeletePnd_0(ctx context.Context, marshaler runtime.Marshaler, server PndServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeletePndRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeletePndRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["pid"] + val, ok := pathParams["pid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pid") } - protoReq.Pid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PndService_DeletePnd_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.DeletePnd(ctx, &protoReq) return msg, metadata, err - } // RegisterPndServiceHandlerServer registers the http handlers for service PndService to "mux". @@ -239,16 +200,13 @@ func local_request_PndService_DeletePnd_0(ctx context.Context, marshaler runtime // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPndServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterPndServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PndServiceServer) error { - - mux.Handle("GET", pattern_PndService_GetPnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_PndService_GetPnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPnd", runtime.WithHTTPPathPattern("/pnd/{pid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPnd", runtime.WithHTTPPathPattern("/pnd/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -260,20 +218,15 @@ func RegisterPndServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_GetPnd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_PndService_GetPndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_PndService_GetPndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPndList", runtime.WithHTTPPathPattern("/pnds")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPndList", runtime.WithHTTPPathPattern("/pnds")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -285,20 +238,15 @@ func RegisterPndServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_GetPndList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_PndService_CreatePndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_PndService_CreatePndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/CreatePndList", runtime.WithHTTPPathPattern("/pnds")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/CreatePndList", runtime.WithHTTPPathPattern("/pnds")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -310,20 +258,15 @@ func RegisterPndServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_CreatePndList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_PndService_DeletePnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_PndService_DeletePnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/DeletePnd", runtime.WithHTTPPathPattern("/pnds/{pid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.pnd.PndService/DeletePnd", runtime.WithHTTPPathPattern("/pnds/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -335,9 +278,7 @@ func RegisterPndServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_DeletePnd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -364,7 +305,6 @@ func RegisterPndServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Ser } }() }() - return RegisterPndServiceHandler(ctx, mux, conn) } @@ -380,14 +320,11 @@ func RegisterPndServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "PndServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterPndServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PndServiceClient) error { - - mux.Handle("GET", pattern_PndService_GetPnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_PndService_GetPnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPnd", runtime.WithHTTPPathPattern("/pnd/{pid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPnd", runtime.WithHTTPPathPattern("/pnd/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -398,18 +335,13 @@ func RegisterPndServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_GetPnd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_PndService_GetPndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_PndService_GetPndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPndList", runtime.WithHTTPPathPattern("/pnds")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/GetPndList", runtime.WithHTTPPathPattern("/pnds")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -420,18 +352,13 @@ func RegisterPndServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_GetPndList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_PndService_CreatePndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_PndService_CreatePndList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/CreatePndList", runtime.WithHTTPPathPattern("/pnds")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/CreatePndList", runtime.WithHTTPPathPattern("/pnds")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -442,18 +369,13 @@ func RegisterPndServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_CreatePndList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_PndService_DeletePnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_PndService_DeletePnd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/DeletePnd", runtime.WithHTTPPathPattern("/pnds/{pid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.pnd.PndService/DeletePnd", runtime.WithHTTPPathPattern("/pnds/{pid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -464,30 +386,21 @@ func RegisterPndServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_PndService_DeletePnd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_PndService_GetPnd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"pnd", "pid"}, "")) - - pattern_PndService_GetPndList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"pnds"}, "")) - + pattern_PndService_GetPnd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"pnd", "pid"}, "")) + pattern_PndService_GetPndList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"pnds"}, "")) pattern_PndService_CreatePndList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"pnds"}, "")) - - pattern_PndService_DeletePnd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"pnds", "pid"}, "")) + pattern_PndService_DeletePnd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"pnds", "pid"}, "")) ) var ( - forward_PndService_GetPnd_0 = runtime.ForwardResponseMessage - - forward_PndService_GetPndList_0 = runtime.ForwardResponseMessage - + forward_PndService_GetPnd_0 = runtime.ForwardResponseMessage + forward_PndService_GetPndList_0 = runtime.ForwardResponseMessage forward_PndService_CreatePndList_0 = runtime.ForwardResponseMessage - - forward_PndService_DeletePnd_0 = runtime.ForwardResponseMessage + forward_PndService_DeletePnd_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/rbac/rbac.pb.go b/api/go/gosdn/rbac/rbac.pb.go index ec77ac558..619331c55 100644 --- a/api/go/gosdn/rbac/rbac.pb.go +++ b/api/go/gosdn/rbac/rbac.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/rbac/rbac.proto @@ -15,6 +15,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -26,22 +27,19 @@ const ( // Login type LoginRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + Pwd string `protobuf:"bytes,3,opt,name=pwd,proto3" json:"pwd,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` - Pwd string `protobuf:"bytes,3,opt,name=pwd,proto3" json:"pwd,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LoginRequest) Reset() { *x = LoginRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_rbac_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_rbac_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LoginRequest) String() string { @@ -52,7 +50,7 @@ func (*LoginRequest) ProtoMessage() {} func (x *LoginRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_rbac_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -89,21 +87,18 @@ func (x *LoginRequest) GetPwd() string { } type LoginResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LoginResponse) Reset() { *x = LoginResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_rbac_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_rbac_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LoginResponse) String() string { @@ -114,7 +109,7 @@ func (*LoginResponse) ProtoMessage() {} func (x *LoginResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_rbac_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -145,21 +140,18 @@ func (x *LoginResponse) GetToken() string { // Logout type LogoutRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LogoutRequest) Reset() { *x = LogoutRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_rbac_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_rbac_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LogoutRequest) String() string { @@ -170,7 +162,7 @@ func (*LogoutRequest) ProtoMessage() {} func (x *LogoutRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_rbac_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -200,20 +192,17 @@ func (x *LogoutRequest) GetUsername() string { } type LogoutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LogoutResponse) Reset() { *x = LogoutResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_rbac_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_rbac_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LogoutResponse) String() string { @@ -224,7 +213,7 @@ func (*LogoutResponse) ProtoMessage() {} func (x *LogoutResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_rbac_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -248,7 +237,7 @@ func (x *LogoutResponse) GetTimestamp() int64 { var File_gosdn_rbac_rbac_proto protoreflect.FileDescriptor -var file_gosdn_rbac_rbac_proto_rawDesc = []byte{ +var file_gosdn_rbac_rbac_proto_rawDesc = string([]byte{ 0x0a, 0x15, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, @@ -295,16 +284,16 @@ var file_gosdn_rbac_rbac_proto_rawDesc = []byte{ 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_rbac_rbac_proto_rawDescOnce sync.Once - file_gosdn_rbac_rbac_proto_rawDescData = file_gosdn_rbac_rbac_proto_rawDesc + file_gosdn_rbac_rbac_proto_rawDescData []byte ) func file_gosdn_rbac_rbac_proto_rawDescGZIP() []byte { file_gosdn_rbac_rbac_proto_rawDescOnce.Do(func() { - file_gosdn_rbac_rbac_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_rbac_rbac_proto_rawDescData) + file_gosdn_rbac_rbac_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_rbac_rbac_proto_rawDesc), len(file_gosdn_rbac_rbac_proto_rawDesc))) }) return file_gosdn_rbac_rbac_proto_rawDescData } @@ -333,61 +322,11 @@ func file_gosdn_rbac_rbac_proto_init() { if File_gosdn_rbac_rbac_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_rbac_rbac_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*LoginRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_rbac_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*LoginResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_rbac_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*LogoutRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_rbac_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*LogoutResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_rbac_rbac_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_rbac_rbac_proto_rawDesc), len(file_gosdn_rbac_rbac_proto_rawDesc)), NumEnums: 0, NumMessages: 4, NumExtensions: 0, @@ -398,7 +337,6 @@ func file_gosdn_rbac_rbac_proto_init() { MessageInfos: file_gosdn_rbac_rbac_proto_msgTypes, }.Build() File_gosdn_rbac_rbac_proto = out.File - file_gosdn_rbac_rbac_proto_rawDesc = nil file_gosdn_rbac_rbac_proto_goTypes = nil file_gosdn_rbac_rbac_proto_depIdxs = nil } diff --git a/api/go/gosdn/rbac/rbac.pb.gw.go b/api/go/gosdn/rbac/rbac.pb.gw.go index 46167531e..529d8c78d 100644 --- a/api/go/gosdn/rbac/rbac.pb.gw.go +++ b/api/go/gosdn/rbac/rbac.pb.gw.go @@ -10,6 +10,7 @@ package rbac import ( "context" + "errors" "io" "net/http" @@ -24,107 +25,89 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_AuthService_Login_0(ctx context.Context, marshaler runtime.Marshaler, client AuthServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LoginRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq LoginRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Login(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthService_Login_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LoginRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq LoginRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Login(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_AuthService_Logout_0 = &utilities.DoubleArray{Encoding: map[string]int{"username": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_AuthService_Logout_0 = &utilities.DoubleArray{Encoding: map[string]int{"username": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_AuthService_Logout_0(ctx context.Context, marshaler runtime.Marshaler, client AuthServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LogoutRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq LogoutRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["username"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["username"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "username") } - protoReq.Username, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "username", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AuthService_Logout_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Logout(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthService_Logout_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LogoutRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq LogoutRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["username"] + val, ok := pathParams["username"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "username") } - protoReq.Username, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "username", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AuthService_Logout_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Logout(ctx, &protoReq) return msg, metadata, err - } // RegisterAuthServiceHandlerServer registers the http handlers for service AuthService to "mux". @@ -133,16 +116,13 @@ func local_request_AuthService_Logout_0(ctx context.Context, marshaler runtime.M // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterAuthServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthServiceServer) error { - - mux.Handle("POST", pattern_AuthService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.AuthService/Login", runtime.WithHTTPPathPattern("/login")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.AuthService/Login", runtime.WithHTTPPathPattern("/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -154,20 +134,15 @@ func RegisterAuthServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthService_Login_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.AuthService/Logout", runtime.WithHTTPPathPattern("/logout/{username}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.AuthService/Logout", runtime.WithHTTPPathPattern("/logout/{username}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -179,9 +154,7 @@ func RegisterAuthServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthService_Logout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -208,7 +181,6 @@ func RegisterAuthServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Se } }() }() - return RegisterAuthServiceHandler(ctx, mux, conn) } @@ -224,14 +196,11 @@ func RegisterAuthServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "AuthServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthServiceClient) error { - - mux.Handle("POST", pattern_AuthService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.AuthService/Login", runtime.WithHTTPPathPattern("/login")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.AuthService/Login", runtime.WithHTTPPathPattern("/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -242,18 +211,13 @@ func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthService_Login_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.AuthService/Logout", runtime.WithHTTPPathPattern("/logout/{username}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.AuthService/Logout", runtime.WithHTTPPathPattern("/logout/{username}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -264,22 +228,17 @@ func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthService_Logout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_AuthService_Login_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"login"}, "")) - + pattern_AuthService_Login_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"login"}, "")) pattern_AuthService_Logout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"logout", "username"}, "")) ) var ( - forward_AuthService_Login_0 = runtime.ForwardResponseMessage - + forward_AuthService_Login_0 = runtime.ForwardResponseMessage forward_AuthService_Logout_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/rbac/role.pb.go b/api/go/gosdn/rbac/role.pb.go index 8d138011a..d8ed4796b 100644 --- a/api/go/gosdn/rbac/role.pb.go +++ b/api/go/gosdn/rbac/role.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/rbac/role.proto @@ -15,6 +15,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -25,23 +26,20 @@ const ( ) type Role struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Permissions []string `protobuf:"bytes,4,rep,name=permissions,proto3" json:"permissions,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - Permissions []string `protobuf:"bytes,4,rep,name=permissions,proto3" json:"permissions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Role) Reset() { *x = Role{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Role) String() string { @@ -52,7 +50,7 @@ func (*Role) ProtoMessage() {} func (x *Role) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -97,21 +95,18 @@ func (x *Role) GetPermissions() []string { // CreateRoles type CreateRolesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Roles []*Role `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Roles []*Role `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateRolesRequest) Reset() { *x = CreateRolesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateRolesRequest) String() string { @@ -122,7 +117,7 @@ func (*CreateRolesRequest) ProtoMessage() {} func (x *CreateRolesRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -152,20 +147,17 @@ func (x *CreateRolesRequest) GetRoles() []*Role { } type CreateRolesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateRolesResponse) Reset() { *x = CreateRolesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateRolesResponse) String() string { @@ -176,7 +168,7 @@ func (*CreateRolesResponse) ProtoMessage() {} func (x *CreateRolesResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -200,22 +192,19 @@ func (x *CreateRolesResponse) GetTimestamp() int64 { // GetRole type GetRoleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + RoleName string `protobuf:"bytes,2,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` + Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - RoleName string `protobuf:"bytes,2,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` - Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoleRequest) Reset() { *x = GetRoleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRoleRequest) String() string { @@ -226,7 +215,7 @@ func (*GetRoleRequest) ProtoMessage() {} func (x *GetRoleRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -263,21 +252,18 @@ func (x *GetRoleRequest) GetId() string { } type GetRoleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Role *Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Role *Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoleResponse) Reset() { *x = GetRoleResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRoleResponse) String() string { @@ -288,7 +274,7 @@ func (*GetRoleResponse) ProtoMessage() {} func (x *GetRoleResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -319,20 +305,17 @@ func (x *GetRoleResponse) GetRole() *Role { // GetRoles type GetRolesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRolesRequest) Reset() { *x = GetRolesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRolesRequest) String() string { @@ -343,7 +326,7 @@ func (*GetRolesRequest) ProtoMessage() {} func (x *GetRolesRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -366,21 +349,18 @@ func (x *GetRolesRequest) GetTimestamp() int64 { } type GetRolesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Roles []*Role `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Roles []*Role `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRolesResponse) Reset() { *x = GetRolesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRolesResponse) String() string { @@ -391,7 +371,7 @@ func (*GetRolesResponse) ProtoMessage() {} func (x *GetRolesResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -422,21 +402,18 @@ func (x *GetRolesResponse) GetRoles() []*Role { // UpdateRoles type UpdateRolesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Roles []*Role `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Roles []*Role `protobuf:"bytes,2,rep,name=roles,proto3" json:"roles,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRolesRequest) Reset() { *x = UpdateRolesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateRolesRequest) String() string { @@ -447,7 +424,7 @@ func (*UpdateRolesRequest) ProtoMessage() {} func (x *UpdateRolesRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -477,20 +454,17 @@ func (x *UpdateRolesRequest) GetRoles() []*Role { } type UpdateRolesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateRolesResponse) Reset() { *x = UpdateRolesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateRolesResponse) String() string { @@ -501,7 +475,7 @@ func (*UpdateRolesResponse) ProtoMessage() {} func (x *UpdateRolesResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -525,22 +499,19 @@ func (x *UpdateRolesResponse) GetTimestamp() int64 { // DeletePermissionsForRole type DeletePermissionsForRoleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - RoleName string `protobuf:"bytes,2,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` - PermissionsToDelete []string `protobuf:"bytes,3,rep,name=permissions_to_delete,json=permissionsToDelete,proto3" json:"permissions_to_delete,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + RoleName string `protobuf:"bytes,2,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` + PermissionsToDelete []string `protobuf:"bytes,3,rep,name=permissions_to_delete,json=permissionsToDelete,proto3" json:"permissions_to_delete,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeletePermissionsForRoleRequest) Reset() { *x = DeletePermissionsForRoleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeletePermissionsForRoleRequest) String() string { @@ -551,7 +522,7 @@ func (*DeletePermissionsForRoleRequest) ProtoMessage() {} func (x *DeletePermissionsForRoleRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -588,20 +559,17 @@ func (x *DeletePermissionsForRoleRequest) GetPermissionsToDelete() []string { } type DeletePermissionsForRoleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeletePermissionsForRoleResponse) Reset() { *x = DeletePermissionsForRoleResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeletePermissionsForRoleResponse) String() string { @@ -612,7 +580,7 @@ func (*DeletePermissionsForRoleResponse) ProtoMessage() {} func (x *DeletePermissionsForRoleResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -636,21 +604,18 @@ func (x *DeletePermissionsForRoleResponse) GetTimestamp() int64 { // DeleteRoles type DeleteRolesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + RoleName []string `protobuf:"bytes,2,rep,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - RoleName []string `protobuf:"bytes,2,rep,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRolesRequest) Reset() { *x = DeleteRolesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRolesRequest) String() string { @@ -661,7 +626,7 @@ func (*DeleteRolesRequest) ProtoMessage() {} func (x *DeleteRolesRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -691,20 +656,17 @@ func (x *DeleteRolesRequest) GetRoleName() []string { } type DeleteRolesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRolesResponse) Reset() { *x = DeleteRolesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_role_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_role_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRolesResponse) String() string { @@ -715,7 +677,7 @@ func (*DeleteRolesResponse) ProtoMessage() {} func (x *DeleteRolesResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_role_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -739,7 +701,7 @@ func (x *DeleteRolesResponse) GetTimestamp() int64 { var File_gosdn_rbac_role_proto protoreflect.FileDescriptor -var file_gosdn_rbac_role_proto_rawDesc = []byte{ +var file_gosdn_rbac_role_proto_rawDesc = string([]byte{ 0x0a, 0x15, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, @@ -868,16 +830,16 @@ var file_gosdn_rbac_role_proto_rawDesc = []byte{ 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_rbac_role_proto_rawDescOnce sync.Once - file_gosdn_rbac_role_proto_rawDescData = file_gosdn_rbac_role_proto_rawDesc + file_gosdn_rbac_role_proto_rawDescData []byte ) func file_gosdn_rbac_role_proto_rawDescGZIP() []byte { file_gosdn_rbac_role_proto_rawDescOnce.Do(func() { - file_gosdn_rbac_role_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_rbac_role_proto_rawDescData) + file_gosdn_rbac_role_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_rbac_role_proto_rawDesc), len(file_gosdn_rbac_role_proto_rawDesc))) }) return file_gosdn_rbac_role_proto_rawDescData } @@ -928,169 +890,11 @@ func file_gosdn_rbac_role_proto_init() { return } file_gosdn_rbac_rbac_proto_init() - if !protoimpl.UnsafeEnabled { - file_gosdn_rbac_role_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Role); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*CreateRolesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*CreateRolesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetRoleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetRoleResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetRolesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*GetRolesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*UpdateRolesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*UpdateRolesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*DeletePermissionsForRoleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*DeletePermissionsForRoleResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRolesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_role_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRolesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_rbac_role_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_rbac_role_proto_rawDesc), len(file_gosdn_rbac_role_proto_rawDesc)), NumEnums: 0, NumMessages: 13, NumExtensions: 0, @@ -1101,7 +905,6 @@ func file_gosdn_rbac_role_proto_init() { MessageInfos: file_gosdn_rbac_role_proto_msgTypes, }.Build() File_gosdn_rbac_role_proto = out.File - file_gosdn_rbac_role_proto_rawDesc = nil file_gosdn_rbac_role_proto_goTypes = nil file_gosdn_rbac_role_proto_depIdxs = nil } diff --git a/api/go/gosdn/rbac/role.pb.gw.go b/api/go/gosdn/rbac/role.pb.gw.go index 454fe45f0..e77d968ec 100644 --- a/api/go/gosdn/rbac/role.pb.gw.go +++ b/api/go/gosdn/rbac/role.pb.gw.go @@ -10,6 +10,7 @@ package rbac import ( "context" + "errors" "io" "net/http" @@ -24,207 +25,194 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_RoleService_CreateRoles_0(ctx context.Context, marshaler runtime.Marshaler, client RoleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRolesRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreateRolesRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreateRoles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoleService_CreateRoles_0(ctx context.Context, marshaler runtime.Marshaler, server RoleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRolesRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreateRolesRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.CreateRoles(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_RoleService_GetRole_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_RoleService_GetRole_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_RoleService_GetRole_0(ctx context.Context, marshaler runtime.Marshaler, client RoleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRoleRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetRoleRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_GetRole_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetRole(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoleService_GetRole_0(ctx context.Context, marshaler runtime.Marshaler, server RoleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRoleRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetRoleRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_GetRole_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetRole(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_RoleService_GetRoles_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_RoleService_GetRoles_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_RoleService_GetRoles_0(ctx context.Context, marshaler runtime.Marshaler, client RoleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRolesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetRolesRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_GetRoles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetRoles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoleService_GetRoles_0(ctx context.Context, marshaler runtime.Marshaler, server RoleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRolesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetRolesRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_GetRoles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetRoles(ctx, &protoReq) return msg, metadata, err - } func request_RoleService_UpdateRoles_0(ctx context.Context, marshaler runtime.Marshaler, client RoleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateRolesRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateRolesRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.UpdateRoles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoleService_UpdateRoles_0(ctx context.Context, marshaler runtime.Marshaler, server RoleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateRolesRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateRolesRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.UpdateRoles(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_RoleService_DeletePermissionsForRole_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_RoleService_DeletePermissionsForRole_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_RoleService_DeletePermissionsForRole_0(ctx context.Context, marshaler runtime.Marshaler, client RoleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeletePermissionsForRoleRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeletePermissionsForRoleRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_DeletePermissionsForRole_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.DeletePermissionsForRole(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoleService_DeletePermissionsForRole_0(ctx context.Context, marshaler runtime.Marshaler, server RoleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeletePermissionsForRoleRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeletePermissionsForRoleRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_DeletePermissionsForRole_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.DeletePermissionsForRole(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_RoleService_DeleteRoles_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_RoleService_DeleteRoles_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_RoleService_DeleteRoles_0(ctx context.Context, marshaler runtime.Marshaler, client RoleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRolesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteRolesRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_DeleteRoles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.DeleteRoles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoleService_DeleteRoles_0(ctx context.Context, marshaler runtime.Marshaler, server RoleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRolesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteRolesRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleService_DeleteRoles_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.DeleteRoles(ctx, &protoReq) return msg, metadata, err - } // RegisterRoleServiceHandlerServer registers the http handlers for service RoleService to "mux". @@ -233,16 +221,13 @@ func local_request_RoleService_DeleteRoles_0(ctx context.Context, marshaler runt // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRoleServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterRoleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RoleServiceServer) error { - - mux.Handle("POST", pattern_RoleService_CreateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_RoleService_CreateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/CreateRoles", runtime.WithHTTPPathPattern("/roles/create")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/CreateRoles", runtime.WithHTTPPathPattern("/roles/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -254,20 +239,15 @@ func RegisterRoleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_CreateRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_RoleService_GetRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_RoleService_GetRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRole", runtime.WithHTTPPathPattern("/roles/get")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRole", runtime.WithHTTPPathPattern("/roles/get")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -279,20 +259,15 @@ func RegisterRoleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_GetRole_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_RoleService_GetRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_RoleService_GetRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRoles", runtime.WithHTTPPathPattern("/roles")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRoles", runtime.WithHTTPPathPattern("/roles")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -304,20 +279,15 @@ func RegisterRoleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_GetRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_RoleService_UpdateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_RoleService_UpdateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/UpdateRoles", runtime.WithHTTPPathPattern("/roles/update")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/UpdateRoles", runtime.WithHTTPPathPattern("/roles/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -329,20 +299,15 @@ func RegisterRoleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_UpdateRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_RoleService_DeletePermissionsForRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_RoleService_DeletePermissionsForRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeletePermissionsForRole", runtime.WithHTTPPathPattern("/roles/delete/permissions")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeletePermissionsForRole", runtime.WithHTTPPathPattern("/roles/delete/permissions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -354,20 +319,15 @@ func RegisterRoleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_DeletePermissionsForRole_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_RoleService_DeleteRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_RoleService_DeleteRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeleteRoles", runtime.WithHTTPPathPattern("/roles/delete")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeleteRoles", runtime.WithHTTPPathPattern("/roles/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -379,9 +339,7 @@ func RegisterRoleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_DeleteRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -408,7 +366,6 @@ func RegisterRoleServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Se } }() }() - return RegisterRoleServiceHandler(ctx, mux, conn) } @@ -424,14 +381,11 @@ func RegisterRoleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "RoleServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterRoleServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RoleServiceClient) error { - - mux.Handle("POST", pattern_RoleService_CreateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_RoleService_CreateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/CreateRoles", runtime.WithHTTPPathPattern("/roles/create")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/CreateRoles", runtime.WithHTTPPathPattern("/roles/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -442,18 +396,13 @@ func RegisterRoleServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_CreateRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_RoleService_GetRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_RoleService_GetRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRole", runtime.WithHTTPPathPattern("/roles/get")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRole", runtime.WithHTTPPathPattern("/roles/get")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -464,18 +413,13 @@ func RegisterRoleServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_GetRole_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_RoleService_GetRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_RoleService_GetRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRoles", runtime.WithHTTPPathPattern("/roles")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/GetRoles", runtime.WithHTTPPathPattern("/roles")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -486,18 +430,13 @@ func RegisterRoleServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_GetRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_RoleService_UpdateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_RoleService_UpdateRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/UpdateRoles", runtime.WithHTTPPathPattern("/roles/update")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/UpdateRoles", runtime.WithHTTPPathPattern("/roles/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -508,18 +447,13 @@ func RegisterRoleServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_UpdateRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_RoleService_DeletePermissionsForRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_RoleService_DeletePermissionsForRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeletePermissionsForRole", runtime.WithHTTPPathPattern("/roles/delete/permissions")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeletePermissionsForRole", runtime.WithHTTPPathPattern("/roles/delete/permissions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -530,18 +464,13 @@ func RegisterRoleServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_DeletePermissionsForRole_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_RoleService_DeleteRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_RoleService_DeleteRoles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeleteRoles", runtime.WithHTTPPathPattern("/roles/delete")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.RoleService/DeleteRoles", runtime.WithHTTPPathPattern("/roles/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -552,38 +481,25 @@ func RegisterRoleServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoleService_DeleteRoles_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_RoleService_CreateRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "create"}, "")) - - pattern_RoleService_GetRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "get"}, "")) - - pattern_RoleService_GetRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"roles"}, "")) - - pattern_RoleService_UpdateRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "update"}, "")) - + pattern_RoleService_CreateRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "create"}, "")) + pattern_RoleService_GetRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "get"}, "")) + pattern_RoleService_GetRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"roles"}, "")) + pattern_RoleService_UpdateRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "update"}, "")) pattern_RoleService_DeletePermissionsForRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"roles", "delete", "permissions"}, "")) - - pattern_RoleService_DeleteRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "delete"}, "")) + pattern_RoleService_DeleteRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"roles", "delete"}, "")) ) var ( - forward_RoleService_CreateRoles_0 = runtime.ForwardResponseMessage - - forward_RoleService_GetRole_0 = runtime.ForwardResponseMessage - - forward_RoleService_GetRoles_0 = runtime.ForwardResponseMessage - - forward_RoleService_UpdateRoles_0 = runtime.ForwardResponseMessage - + forward_RoleService_CreateRoles_0 = runtime.ForwardResponseMessage + forward_RoleService_GetRole_0 = runtime.ForwardResponseMessage + forward_RoleService_GetRoles_0 = runtime.ForwardResponseMessage + forward_RoleService_UpdateRoles_0 = runtime.ForwardResponseMessage forward_RoleService_DeletePermissionsForRole_0 = runtime.ForwardResponseMessage - - forward_RoleService_DeleteRoles_0 = runtime.ForwardResponseMessage + forward_RoleService_DeleteRoles_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/rbac/user.pb.go b/api/go/gosdn/rbac/user.pb.go index 745d534cf..b134dea8d 100644 --- a/api/go/gosdn/rbac/user.pb.go +++ b/api/go/gosdn/rbac/user.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/rbac/user.proto @@ -16,6 +16,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -26,25 +27,22 @@ const ( ) type User struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Roles map[string]string `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Key = pnd uuid, value= role name + Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"` + Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"` + Metadata *conflict.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Roles map[string]string `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Key = pnd uuid, value= role name - Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"` - Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"` - Metadata *conflict.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *User) Reset() { *x = User{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *User) String() string { @@ -55,7 +53,7 @@ func (*User) ProtoMessage() {} func (x *User) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -113,25 +111,22 @@ func (x *User) GetMetadata() *conflict.Metadata { } type UpdateUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Roles map[string]string `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Key = pnd uuid, value= role name + Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"` + Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"` + Metadata *conflict.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Roles map[string]string `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Key = pnd uuid, value= role name - Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"` - Token string `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"` - Metadata *conflict.Metadata `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateUser) Reset() { *x = UpdateUser{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateUser) String() string { @@ -142,7 +137,7 @@ func (*UpdateUser) ProtoMessage() {} func (x *UpdateUser) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -201,21 +196,18 @@ func (x *UpdateUser) GetMetadata() *conflict.Metadata { // CreateUsers type CreateUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + User []*User `protobuf:"bytes,2,rep,name=user,proto3" json:"user,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - User []*User `protobuf:"bytes,2,rep,name=user,proto3" json:"user,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateUsersRequest) Reset() { *x = CreateUsersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateUsersRequest) String() string { @@ -226,7 +218,7 @@ func (*CreateUsersRequest) ProtoMessage() {} func (x *CreateUsersRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -256,20 +248,17 @@ func (x *CreateUsersRequest) GetUser() []*User { } type CreateUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateUsersResponse) Reset() { *x = CreateUsersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateUsersResponse) String() string { @@ -280,7 +269,7 @@ func (*CreateUsersResponse) ProtoMessage() {} func (x *CreateUsersResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -304,22 +293,19 @@ func (x *CreateUsersResponse) GetTimestamp() int64 { // GetUser type GetUserRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // TODO(faseid): reconsider if this is necessary as required, but id is not? + Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // TODO(faseid): reconsider if this is necessary as required, but id is not? - Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetUserRequest) Reset() { *x = GetUserRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetUserRequest) String() string { @@ -330,7 +316,7 @@ func (*GetUserRequest) ProtoMessage() {} func (x *GetUserRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -367,21 +353,18 @@ func (x *GetUserRequest) GetId() string { } type GetUserResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetUserResponse) Reset() { *x = GetUserResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetUserResponse) String() string { @@ -392,7 +375,7 @@ func (*GetUserResponse) ProtoMessage() {} func (x *GetUserResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -423,20 +406,17 @@ func (x *GetUserResponse) GetUser() *User { // GetUsers type GetUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetUsersRequest) Reset() { *x = GetUsersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetUsersRequest) String() string { @@ -447,7 +427,7 @@ func (*GetUsersRequest) ProtoMessage() {} func (x *GetUsersRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -470,21 +450,18 @@ func (x *GetUsersRequest) GetTimestamp() int64 { } type GetUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + User []*User `protobuf:"bytes,2,rep,name=user,proto3" json:"user,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - User []*User `protobuf:"bytes,2,rep,name=user,proto3" json:"user,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetUsersResponse) Reset() { *x = GetUsersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetUsersResponse) String() string { @@ -495,7 +472,7 @@ func (*GetUsersResponse) ProtoMessage() {} func (x *GetUsersResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -526,21 +503,18 @@ func (x *GetUsersResponse) GetUser() []*User { // UpdateUsers type UpdateUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + User []*UpdateUser `protobuf:"bytes,2,rep,name=user,proto3" json:"user,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - User []*UpdateUser `protobuf:"bytes,2,rep,name=user,proto3" json:"user,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateUsersRequest) Reset() { *x = UpdateUsersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateUsersRequest) String() string { @@ -551,7 +525,7 @@ func (*UpdateUsersRequest) ProtoMessage() {} func (x *UpdateUsersRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -581,20 +555,17 @@ func (x *UpdateUsersRequest) GetUser() []*UpdateUser { } type UpdateUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateUsersResponse) Reset() { *x = UpdateUsersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateUsersResponse) String() string { @@ -605,7 +576,7 @@ func (*UpdateUsersResponse) ProtoMessage() {} func (x *UpdateUsersResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -629,21 +600,18 @@ func (x *UpdateUsersResponse) GetTimestamp() int64 { // DeleteUsers type DeleteUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Username []string `protobuf:"bytes,2,rep,name=username,proto3" json:"username,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Username []string `protobuf:"bytes,2,rep,name=username,proto3" json:"username,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteUsersRequest) Reset() { *x = DeleteUsersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteUsersRequest) String() string { @@ -654,7 +622,7 @@ func (*DeleteUsersRequest) ProtoMessage() {} func (x *DeleteUsersRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -684,20 +652,17 @@ func (x *DeleteUsersRequest) GetUsername() []string { } type DeleteUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteUsersResponse) Reset() { *x = DeleteUsersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_rbac_user_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_rbac_user_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteUsersResponse) String() string { @@ -708,7 +673,7 @@ func (*DeleteUsersResponse) ProtoMessage() {} func (x *DeleteUsersResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_rbac_user_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -732,7 +697,7 @@ func (x *DeleteUsersResponse) GetTimestamp() int64 { var File_gosdn_rbac_user_proto protoreflect.FileDescriptor -var file_gosdn_rbac_user_proto_rawDesc = []byte{ +var file_gosdn_rbac_user_proto_rawDesc = string([]byte{ 0x0a, 0x15, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, @@ -865,16 +830,16 @@ var file_gosdn_rbac_user_proto_rawDesc = []byte{ 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_rbac_user_proto_rawDescOnce sync.Once - file_gosdn_rbac_user_proto_rawDescData = file_gosdn_rbac_user_proto_rawDesc + file_gosdn_rbac_user_proto_rawDescData []byte ) func file_gosdn_rbac_user_proto_rawDescGZIP() []byte { file_gosdn_rbac_user_proto_rawDescOnce.Do(func() { - file_gosdn_rbac_user_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_rbac_user_proto_rawDescData) + file_gosdn_rbac_user_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_rbac_user_proto_rawDesc), len(file_gosdn_rbac_user_proto_rawDesc))) }) return file_gosdn_rbac_user_proto_rawDescData } @@ -929,157 +894,11 @@ func file_gosdn_rbac_user_proto_init() { return } file_gosdn_rbac_rbac_proto_init() - if !protoimpl.UnsafeEnabled { - file_gosdn_rbac_user_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*User); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*UpdateUser); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*CreateUsersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*CreateUsersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetUserRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetUserResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*GetUsersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*GetUsersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*UpdateUsersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*UpdateUsersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*DeleteUsersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_rbac_user_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*DeleteUsersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_rbac_user_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_rbac_user_proto_rawDesc), len(file_gosdn_rbac_user_proto_rawDesc)), NumEnums: 0, NumMessages: 14, NumExtensions: 0, @@ -1090,7 +909,6 @@ func file_gosdn_rbac_user_proto_init() { MessageInfos: file_gosdn_rbac_user_proto_msgTypes, }.Build() File_gosdn_rbac_user_proto = out.File - file_gosdn_rbac_user_proto_rawDesc = nil file_gosdn_rbac_user_proto_goTypes = nil file_gosdn_rbac_user_proto_depIdxs = nil } diff --git a/api/go/gosdn/rbac/user.pb.gw.go b/api/go/gosdn/rbac/user.pb.gw.go index 2103e85b5..36d72ee8b 100644 --- a/api/go/gosdn/rbac/user.pb.gw.go +++ b/api/go/gosdn/rbac/user.pb.gw.go @@ -10,6 +10,7 @@ package rbac import ( "context" + "errors" "io" "net/http" @@ -24,171 +25,161 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_UserService_CreateUsers_0(ctx context.Context, marshaler runtime.Marshaler, client UserServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateUsersRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreateUsersRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CreateUsers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_UserService_CreateUsers_0(ctx context.Context, marshaler runtime.Marshaler, server UserServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateUsersRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreateUsersRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.CreateUsers(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_UserService_GetUser_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_UserService_GetUser_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_UserService_GetUser_0(ctx context.Context, marshaler runtime.Marshaler, client UserServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetUserRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetUserRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UserService_GetUser_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetUser(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_UserService_GetUser_0(ctx context.Context, marshaler runtime.Marshaler, server UserServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetUserRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetUserRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UserService_GetUser_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetUser(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_UserService_GetUsers_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_UserService_GetUsers_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_UserService_GetUsers_0(ctx context.Context, marshaler runtime.Marshaler, client UserServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetUsersRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetUsersRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UserService_GetUsers_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetUsers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_UserService_GetUsers_0(ctx context.Context, marshaler runtime.Marshaler, server UserServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetUsersRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetUsersRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UserService_GetUsers_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetUsers(ctx, &protoReq) return msg, metadata, err - } func request_UserService_UpdateUsers_0(ctx context.Context, marshaler runtime.Marshaler, client UserServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateUsersRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateUsersRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.UpdateUsers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_UserService_UpdateUsers_0(ctx context.Context, marshaler runtime.Marshaler, server UserServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateUsersRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateUsersRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.UpdateUsers(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_UserService_DeleteUsers_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_UserService_DeleteUsers_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_UserService_DeleteUsers_0(ctx context.Context, marshaler runtime.Marshaler, client UserServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteUsersRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteUsersRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UserService_DeleteUsers_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.DeleteUsers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_UserService_DeleteUsers_0(ctx context.Context, marshaler runtime.Marshaler, server UserServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteUsersRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteUsersRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UserService_DeleteUsers_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.DeleteUsers(ctx, &protoReq) return msg, metadata, err - } // RegisterUserServiceHandlerServer registers the http handlers for service UserService to "mux". @@ -197,16 +188,13 @@ func local_request_UserService_DeleteUsers_0(ctx context.Context, marshaler runt // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterUserServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UserServiceServer) error { - - mux.Handle("POST", pattern_UserService_CreateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_UserService_CreateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/CreateUsers", runtime.WithHTTPPathPattern("/users/create")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/CreateUsers", runtime.WithHTTPPathPattern("/users/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -218,20 +206,15 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_CreateUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_UserService_GetUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_UserService_GetUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUser", runtime.WithHTTPPathPattern("/users/get")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUser", runtime.WithHTTPPathPattern("/users/get")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -243,20 +226,15 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_GetUser_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_UserService_GetUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_UserService_GetUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUsers", runtime.WithHTTPPathPattern("/users")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUsers", runtime.WithHTTPPathPattern("/users")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -268,20 +246,15 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_GetUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_UserService_UpdateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_UserService_UpdateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/UpdateUsers", runtime.WithHTTPPathPattern("/users/update")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/UpdateUsers", runtime.WithHTTPPathPattern("/users/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -293,20 +266,15 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_UpdateUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_UserService_DeleteUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_UserService_DeleteUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/DeleteUsers", runtime.WithHTTPPathPattern("/users/delete")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.rbac.UserService/DeleteUsers", runtime.WithHTTPPathPattern("/users/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -318,9 +286,7 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_DeleteUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -347,7 +313,6 @@ func RegisterUserServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Se } }() }() - return RegisterUserServiceHandler(ctx, mux, conn) } @@ -363,14 +328,11 @@ func RegisterUserServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "UserServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client UserServiceClient) error { - - mux.Handle("POST", pattern_UserService_CreateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_UserService_CreateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/CreateUsers", runtime.WithHTTPPathPattern("/users/create")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/CreateUsers", runtime.WithHTTPPathPattern("/users/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -381,18 +343,13 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_CreateUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_UserService_GetUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_UserService_GetUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUser", runtime.WithHTTPPathPattern("/users/get")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUser", runtime.WithHTTPPathPattern("/users/get")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -403,18 +360,13 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_GetUser_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_UserService_GetUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_UserService_GetUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUsers", runtime.WithHTTPPathPattern("/users")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/GetUsers", runtime.WithHTTPPathPattern("/users")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -425,18 +377,13 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_GetUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_UserService_UpdateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_UserService_UpdateUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/UpdateUsers", runtime.WithHTTPPathPattern("/users/update")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/UpdateUsers", runtime.WithHTTPPathPattern("/users/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -447,18 +394,13 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_UpdateUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_UserService_DeleteUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_UserService_DeleteUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/DeleteUsers", runtime.WithHTTPPathPattern("/users/delete")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.rbac.UserService/DeleteUsers", runtime.WithHTTPPathPattern("/users/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -469,34 +411,23 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UserService_DeleteUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( pattern_UserService_CreateUsers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"users", "create"}, "")) - - pattern_UserService_GetUser_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"users", "get"}, "")) - - pattern_UserService_GetUsers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"users"}, "")) - + pattern_UserService_GetUser_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"users", "get"}, "")) + pattern_UserService_GetUsers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"users"}, "")) pattern_UserService_UpdateUsers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"users", "update"}, "")) - pattern_UserService_DeleteUsers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"users", "delete"}, "")) ) var ( forward_UserService_CreateUsers_0 = runtime.ForwardResponseMessage - - forward_UserService_GetUser_0 = runtime.ForwardResponseMessage - - forward_UserService_GetUsers_0 = runtime.ForwardResponseMessage - + forward_UserService_GetUser_0 = runtime.ForwardResponseMessage + forward_UserService_GetUsers_0 = runtime.ForwardResponseMessage forward_UserService_UpdateUsers_0 = runtime.ForwardResponseMessage - forward_UserService_DeleteUsers_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/southbound/southbound.pb.go b/api/go/gosdn/southbound/southbound.pb.go index 3310bcc2e..045cbcd9b 100644 --- a/api/go/gosdn/southbound/southbound.pb.go +++ b/api/go/gosdn/southbound/southbound.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/southbound/southbound.proto @@ -12,6 +12,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -76,22 +77,19 @@ func (Type) EnumDescriptor() ([]byte, []int) { } type GetSchemaRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + Sid string `protobuf:"bytes,3,opt,name=sid,proto3" json:"sid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` - Sid string `protobuf:"bytes,3,opt,name=sid,proto3" json:"sid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetSchemaRequest) Reset() { *x = GetSchemaRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_southbound_southbound_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_southbound_southbound_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetSchemaRequest) String() string { @@ -102,7 +100,7 @@ func (*GetSchemaRequest) ProtoMessage() {} func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_southbound_southbound_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -139,20 +137,17 @@ func (x *GetSchemaRequest) GetSid() string { } type Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` unknownFields protoimpl.UnknownFields - - Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Payload) Reset() { *x = Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_southbound_southbound_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_southbound_southbound_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Payload) String() string { @@ -163,7 +158,7 @@ func (*Payload) ProtoMessage() {} func (x *Payload) ProtoReflect() protoreflect.Message { mi := &file_gosdn_southbound_southbound_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -186,21 +181,18 @@ func (x *Payload) GetChunk() []byte { } type SouthboundInterface struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Type Type `protobuf:"varint,2,opt,name=type,proto3,enum=gosdn.southbound.Type" json:"type,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Type Type `protobuf:"varint,2,opt,name=type,proto3,enum=gosdn.southbound.Type" json:"type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SouthboundInterface) Reset() { *x = SouthboundInterface{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_southbound_southbound_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_southbound_southbound_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SouthboundInterface) String() string { @@ -211,7 +203,7 @@ func (*SouthboundInterface) ProtoMessage() {} func (x *SouthboundInterface) ProtoReflect() protoreflect.Message { mi := &file_gosdn_southbound_southbound_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -242,7 +234,7 @@ func (x *SouthboundInterface) GetType() Type { var File_gosdn_southbound_southbound_proto protoreflect.FileDescriptor -var file_gosdn_southbound_southbound_proto_rawDesc = []byte{ +var file_gosdn_southbound_southbound_proto_rawDesc = string([]byte{ 0x0a, 0x21, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x73, 0x6f, 0x75, 0x74, 0x68, @@ -277,16 +269,16 @@ var file_gosdn_southbound_southbound_proto_rawDesc = []byte{ 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_southbound_southbound_proto_rawDescOnce sync.Once - file_gosdn_southbound_southbound_proto_rawDescData = file_gosdn_southbound_southbound_proto_rawDesc + file_gosdn_southbound_southbound_proto_rawDescData []byte ) func file_gosdn_southbound_southbound_proto_rawDescGZIP() []byte { file_gosdn_southbound_southbound_proto_rawDescOnce.Do(func() { - file_gosdn_southbound_southbound_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_southbound_southbound_proto_rawDescData) + file_gosdn_southbound_southbound_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_southbound_southbound_proto_rawDesc), len(file_gosdn_southbound_southbound_proto_rawDesc))) }) return file_gosdn_southbound_southbound_proto_rawDescData } @@ -315,49 +307,11 @@ func file_gosdn_southbound_southbound_proto_init() { if File_gosdn_southbound_southbound_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_southbound_southbound_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*GetSchemaRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_southbound_southbound_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_southbound_southbound_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*SouthboundInterface); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_southbound_southbound_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_southbound_southbound_proto_rawDesc), len(file_gosdn_southbound_southbound_proto_rawDesc)), NumEnums: 1, NumMessages: 3, NumExtensions: 0, @@ -369,7 +323,6 @@ func file_gosdn_southbound_southbound_proto_init() { MessageInfos: file_gosdn_southbound_southbound_proto_msgTypes, }.Build() File_gosdn_southbound_southbound_proto = out.File - file_gosdn_southbound_southbound_proto_rawDesc = nil file_gosdn_southbound_southbound_proto_goTypes = nil file_gosdn_southbound_southbound_proto_depIdxs = nil } diff --git a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go index 617bea4d2..80e99f1c3 100644 --- a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go +++ b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/subscriptionmanagement/subscriptionmanagement.proto @@ -14,6 +14,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -24,25 +25,22 @@ const ( ) type Subscription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Subid string `protobuf:"bytes,1,opt,name=subid,proto3" json:"subid,omitempty"` - Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` - Mneid string `protobuf:"bytes,3,opt,name=mneid,proto3" json:"mneid,omitempty"` - MneName string `protobuf:"bytes,4,opt,name=mne_name,json=mneName,proto3" json:"mne_name,omitempty"` - Paths []*Path `protobuf:"bytes,5,rep,name=paths,proto3" json:"paths,omitempty"` - SubscribeOptions *SubscribeOptions `protobuf:"bytes,6,opt,name=subscribe_options,json=subscribeOptions,proto3" json:"subscribe_options,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Subid string `protobuf:"bytes,1,opt,name=subid,proto3" json:"subid,omitempty"` + Pid string `protobuf:"bytes,2,opt,name=pid,proto3" json:"pid,omitempty"` + Mneid string `protobuf:"bytes,3,opt,name=mneid,proto3" json:"mneid,omitempty"` + MneName string `protobuf:"bytes,4,opt,name=mne_name,json=mneName,proto3" json:"mne_name,omitempty"` + Paths []*Path `protobuf:"bytes,5,rep,name=paths,proto3" json:"paths,omitempty"` + SubscribeOptions *SubscribeOptions `protobuf:"bytes,6,opt,name=subscribe_options,json=subscribeOptions,proto3" json:"subscribe_options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Subscription) Reset() { *x = Subscription{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Subscription) String() string { @@ -53,7 +51,7 @@ func (*Subscription) ProtoMessage() {} func (x *Subscription) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -111,20 +109,17 @@ func (x *Subscription) GetSubscribeOptions() *SubscribeOptions { } type Path struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Elem []string `protobuf:"bytes,1,rep,name=elem,proto3" json:"elem,omitempty"` unknownFields protoimpl.UnknownFields - - Elem []string `protobuf:"bytes,1,rep,name=elem,proto3" json:"elem,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Path) Reset() { *x = Path{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Path) String() string { @@ -135,7 +130,7 @@ func (*Path) ProtoMessage() {} func (x *Path) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -158,22 +153,19 @@ func (x *Path) GetElem() []string { } type SubscribeOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GnmiMode string `protobuf:"bytes,1,opt,name=gnmi_mode,json=gnmiMode,proto3" json:"gnmi_mode,omitempty"` - GnmiStreamMode string `protobuf:"bytes,2,opt,name=gnmi_stream_mode,json=gnmiStreamMode,proto3" json:"gnmi_stream_mode,omitempty"` - SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GnmiMode string `protobuf:"bytes,1,opt,name=gnmi_mode,json=gnmiMode,proto3" json:"gnmi_mode,omitempty"` + GnmiStreamMode string `protobuf:"bytes,2,opt,name=gnmi_stream_mode,json=gnmiStreamMode,proto3" json:"gnmi_stream_mode,omitempty"` + SampleInterval uint64 `protobuf:"varint,3,opt,name=sample_interval,json=sampleInterval,proto3" json:"sample_interval,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeOptions) Reset() { *x = SubscribeOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeOptions) String() string { @@ -184,7 +176,7 @@ func (*SubscribeOptions) ProtoMessage() {} func (x *SubscribeOptions) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -221,20 +213,17 @@ func (x *SubscribeOptions) GetSampleInterval() uint64 { } type GetAllRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllRequest) Reset() { *x = GetAllRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllRequest) String() string { @@ -245,7 +234,7 @@ func (*GetAllRequest) ProtoMessage() {} func (x *GetAllRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -268,21 +257,18 @@ func (x *GetAllRequest) GetTimestamp() int64 { } type GetAllResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Subscriptions []*Subscription `protobuf:"bytes,2,rep,name=subscriptions,proto3" json:"subscriptions,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Subscriptions []*Subscription `protobuf:"bytes,2,rep,name=subscriptions,proto3" json:"subscriptions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllResponse) Reset() { *x = GetAllResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllResponse) String() string { @@ -293,7 +279,7 @@ func (*GetAllResponse) ProtoMessage() {} func (x *GetAllResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -323,21 +309,18 @@ func (x *GetAllResponse) GetSubscriptions() []*Subscription { } type GetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Subid string `protobuf:"bytes,2,opt,name=subid,proto3" json:"subid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Subid string `protobuf:"bytes,2,opt,name=subid,proto3" json:"subid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRequest) Reset() { *x = GetRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRequest) String() string { @@ -348,7 +331,7 @@ func (*GetRequest) ProtoMessage() {} func (x *GetRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -378,21 +361,18 @@ func (x *GetRequest) GetSubid() string { } type GetResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Subscriptions *Subscription `protobuf:"bytes,2,opt,name=subscriptions,proto3" json:"subscriptions,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Subscriptions *Subscription `protobuf:"bytes,2,opt,name=subscriptions,proto3" json:"subscriptions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetResponse) Reset() { *x = GetResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetResponse) String() string { @@ -403,7 +383,7 @@ func (*GetResponse) ProtoMessage() {} func (x *GetResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -433,21 +413,18 @@ func (x *GetResponse) GetSubscriptions() *Subscription { } type DeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Subid string `protobuf:"bytes,2,opt,name=subid,proto3" json:"subid,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Subid string `protobuf:"bytes,2,opt,name=subid,proto3" json:"subid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRequest) Reset() { *x = DeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRequest) String() string { @@ -458,7 +435,7 @@ func (*DeleteRequest) ProtoMessage() {} func (x *DeleteRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -488,20 +465,17 @@ func (x *DeleteRequest) GetSubid() string { } type DeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteResponse) Reset() { *x = DeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteResponse) String() string { @@ -512,7 +486,7 @@ func (*DeleteResponse) ProtoMessage() {} func (x *DeleteResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -535,22 +509,19 @@ func (x *DeleteResponse) GetTimestamp() int64 { } type AddRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` + Subscription *Subscription `protobuf:"bytes,3,opt,name=subscription,proto3" json:"subscription,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Mneid string `protobuf:"bytes,2,opt,name=mneid,proto3" json:"mneid,omitempty"` - Subscription *Subscription `protobuf:"bytes,3,opt,name=subscription,proto3" json:"subscription,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddRequest) Reset() { *x = AddRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddRequest) String() string { @@ -561,7 +532,7 @@ func (*AddRequest) ProtoMessage() {} func (x *AddRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -598,20 +569,17 @@ func (x *AddRequest) GetSubscription() *Subscription { } type AddResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddResponse) Reset() { *x = AddResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddResponse) String() string { @@ -622,7 +590,7 @@ func (*AddResponse) ProtoMessage() {} func (x *AddResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -645,20 +613,17 @@ func (x *AddResponse) GetTimestamp() int64 { } type ResetAllSubscriptionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResetAllSubscriptionsRequest) Reset() { *x = ResetAllSubscriptionsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ResetAllSubscriptionsRequest) String() string { @@ -669,7 +634,7 @@ func (*ResetAllSubscriptionsRequest) ProtoMessage() {} func (x *ResetAllSubscriptionsRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -692,20 +657,17 @@ func (x *ResetAllSubscriptionsRequest) GetTimestamp() int64 { } type ResetAllSubscriptionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ResetAllSubscriptionsResponse) Reset() { *x = ResetAllSubscriptionsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ResetAllSubscriptionsResponse) String() string { @@ -716,7 +678,7 @@ func (*ResetAllSubscriptionsResponse) ProtoMessage() {} func (x *ResetAllSubscriptionsResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -740,7 +702,7 @@ func (x *ResetAllSubscriptionsResponse) GetTimestamp() int64 { var File_gosdn_subscriptionmanagement_subscriptionmanagement_proto protoreflect.FileDescriptor -var file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc = []byte{ +var file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc = string([]byte{ 0x0a, 0x39, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x6e, 0x61, 0x67, @@ -881,16 +843,16 @@ var file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc = []b 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x73, 0x75, 0x62, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescOnce sync.Once - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescData = file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc + file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescData []byte ) func file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescGZIP() []byte { file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescOnce.Do(func() { - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescData) + file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc), len(file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc))) }) return file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDescData } @@ -939,169 +901,11 @@ func file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_init() { if File_gosdn_subscriptionmanagement_subscriptionmanagement_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Subscription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Path); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*SubscribeOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetAllRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetAllResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*GetResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*DeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*AddRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*AddResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*ResetAllSubscriptionsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ResetAllSubscriptionsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc), len(file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc)), NumEnums: 0, NumMessages: 13, NumExtensions: 0, @@ -1112,7 +916,6 @@ func file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_init() { MessageInfos: file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_msgTypes, }.Build() File_gosdn_subscriptionmanagement_subscriptionmanagement_proto = out.File - file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_rawDesc = nil file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_goTypes = nil file_gosdn_subscriptionmanagement_subscriptionmanagement_proto_depIdxs = nil } diff --git a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go index b7efc5dc0..4c9ccd9a2 100644 --- a/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go +++ b/api/go/gosdn/subscriptionmanagement/subscriptionmanagement.pb.gw.go @@ -10,6 +10,7 @@ package submanagement import ( "context" + "errors" "io" "net/http" @@ -24,283 +25,224 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - var ( - filter_SubscriptionManagementService_GetAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join ) -func request_SubscriptionManagementService_GetAll_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetAllRequest - var metadata runtime.ServerMetadata +var filter_SubscriptionManagementService_GetAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +func request_SubscriptionManagementService_GetAll_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetAllRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_GetAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_SubscriptionManagementService_GetAll_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetAllRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetAllRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_GetAll_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetAll(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_SubscriptionManagementService_Get_0 = &utilities.DoubleArray{Encoding: map[string]int{"subid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_SubscriptionManagementService_Get_0 = &utilities.DoubleArray{Encoding: map[string]int{"subid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_SubscriptionManagementService_Get_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["subid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["subid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subid") } - protoReq.Subid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "subid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_Get_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Get(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_SubscriptionManagementService_Get_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["subid"] + val, ok := pathParams["subid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subid") } - protoReq.Subid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "subid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_Get_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Get(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_SubscriptionManagementService_Delete_0 = &utilities.DoubleArray{Encoding: map[string]int{"subid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_SubscriptionManagementService_Delete_0 = &utilities.DoubleArray{Encoding: map[string]int{"subid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_SubscriptionManagementService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeleteRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["subid"] + io.Copy(io.Discard, req.Body) + val, ok := pathParams["subid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subid") } - protoReq.Subid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "subid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_Delete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_SubscriptionManagementService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeleteRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["subid"] + val, ok := pathParams["subid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "subid") } - protoReq.Subid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "subid", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_Delete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.Delete(ctx, &protoReq) return msg, metadata, err - } func request_SubscriptionManagementService_Add_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq AddRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - msg, err := client.Add(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_SubscriptionManagementService_Add_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq AddRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["mneid"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["mneid"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "mneid") } - protoReq.Mneid, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "mneid", err) } - msg, err := server.Add(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_SubscriptionManagementService_ResetAllSubscriptions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_SubscriptionManagementService_ResetAllSubscriptions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_SubscriptionManagementService_ResetAllSubscriptions_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ResetAllSubscriptionsRequest - var metadata runtime.ServerMetadata - + var ( + protoReq ResetAllSubscriptionsRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_ResetAllSubscriptions_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ResetAllSubscriptions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_SubscriptionManagementService_ResetAllSubscriptions_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ResetAllSubscriptionsRequest - var metadata runtime.ServerMetadata - + var ( + protoReq ResetAllSubscriptionsRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SubscriptionManagementService_ResetAllSubscriptions_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ResetAllSubscriptions(ctx, &protoReq) return msg, metadata, err - } // RegisterSubscriptionManagementServiceHandlerServer registers the http handlers for service SubscriptionManagementService to "mux". @@ -309,16 +251,13 @@ func local_request_SubscriptionManagementService_ResetAllSubscriptions_0(ctx con // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSubscriptionManagementServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterSubscriptionManagementServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SubscriptionManagementServiceServer) error { - - mux.Handle("GET", pattern_SubscriptionManagementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_SubscriptionManagementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/GetAll", runtime.WithHTTPPathPattern("/submanagement/subscriptions")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/GetAll", runtime.WithHTTPPathPattern("/submanagement/subscriptions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -330,20 +269,15 @@ func RegisterSubscriptionManagementServiceHandlerServer(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_GetAll_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_SubscriptionManagementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_SubscriptionManagementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Get", runtime.WithHTTPPathPattern("/submanagement/{subid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Get", runtime.WithHTTPPathPattern("/submanagement/{subid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -355,20 +289,15 @@ func RegisterSubscriptionManagementServiceHandlerServer(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_SubscriptionManagementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_SubscriptionManagementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Delete", runtime.WithHTTPPathPattern("/submanagement/{subid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Delete", runtime.WithHTTPPathPattern("/submanagement/{subid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -380,20 +309,15 @@ func RegisterSubscriptionManagementServiceHandlerServer(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_SubscriptionManagementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_SubscriptionManagementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Add", runtime.WithHTTPPathPattern("/submanagement/{mneid}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Add", runtime.WithHTTPPathPattern("/submanagement/{mneid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -405,20 +329,15 @@ func RegisterSubscriptionManagementServiceHandlerServer(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_Add_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_SubscriptionManagementService_ResetAllSubscriptions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_SubscriptionManagementService_ResetAllSubscriptions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/ResetAllSubscriptions", runtime.WithHTTPPathPattern("/submanagement/reset")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/ResetAllSubscriptions", runtime.WithHTTPPathPattern("/submanagement/reset")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -430,9 +349,7 @@ func RegisterSubscriptionManagementServiceHandlerServer(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_ResetAllSubscriptions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -459,7 +376,6 @@ func RegisterSubscriptionManagementServiceHandlerFromEndpoint(ctx context.Contex } }() }() - return RegisterSubscriptionManagementServiceHandler(ctx, mux, conn) } @@ -475,14 +391,11 @@ func RegisterSubscriptionManagementServiceHandler(ctx context.Context, mux *runt // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "SubscriptionManagementServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterSubscriptionManagementServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SubscriptionManagementServiceClient) error { - - mux.Handle("GET", pattern_SubscriptionManagementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_SubscriptionManagementService_GetAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/GetAll", runtime.WithHTTPPathPattern("/submanagement/subscriptions")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/GetAll", runtime.WithHTTPPathPattern("/submanagement/subscriptions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -493,18 +406,13 @@ func RegisterSubscriptionManagementServiceHandlerClient(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_GetAll_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_SubscriptionManagementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_SubscriptionManagementService_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Get", runtime.WithHTTPPathPattern("/submanagement/{subid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Get", runtime.WithHTTPPathPattern("/submanagement/{subid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -515,18 +423,13 @@ func RegisterSubscriptionManagementServiceHandlerClient(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_SubscriptionManagementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_SubscriptionManagementService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Delete", runtime.WithHTTPPathPattern("/submanagement/{subid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Delete", runtime.WithHTTPPathPattern("/submanagement/{subid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -537,18 +440,13 @@ func RegisterSubscriptionManagementServiceHandlerClient(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_SubscriptionManagementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_SubscriptionManagementService_Add_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Add", runtime.WithHTTPPathPattern("/submanagement/{mneid}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/Add", runtime.WithHTTPPathPattern("/submanagement/{mneid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -559,18 +457,13 @@ func RegisterSubscriptionManagementServiceHandlerClient(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_Add_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_SubscriptionManagementService_ResetAllSubscriptions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_SubscriptionManagementService_ResetAllSubscriptions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/ResetAllSubscriptions", runtime.WithHTTPPathPattern("/submanagement/reset")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.subscriptionmanagement.SubscriptionManagementService/ResetAllSubscriptions", runtime.WithHTTPPathPattern("/submanagement/reset")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -581,34 +474,23 @@ func RegisterSubscriptionManagementServiceHandlerClient(ctx context.Context, mux runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SubscriptionManagementService_ResetAllSubscriptions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_SubscriptionManagementService_GetAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"submanagement", "subscriptions"}, "")) - - pattern_SubscriptionManagementService_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"submanagement", "subid"}, "")) - - pattern_SubscriptionManagementService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"submanagement", "subid"}, "")) - - pattern_SubscriptionManagementService_Add_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"submanagement", "mneid"}, "")) - + pattern_SubscriptionManagementService_GetAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"submanagement", "subscriptions"}, "")) + pattern_SubscriptionManagementService_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"submanagement", "subid"}, "")) + pattern_SubscriptionManagementService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"submanagement", "subid"}, "")) + pattern_SubscriptionManagementService_Add_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"submanagement", "mneid"}, "")) pattern_SubscriptionManagementService_ResetAllSubscriptions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"submanagement", "reset"}, "")) ) var ( - forward_SubscriptionManagementService_GetAll_0 = runtime.ForwardResponseMessage - - forward_SubscriptionManagementService_Get_0 = runtime.ForwardResponseMessage - - forward_SubscriptionManagementService_Delete_0 = runtime.ForwardResponseMessage - - forward_SubscriptionManagementService_Add_0 = runtime.ForwardResponseMessage - + forward_SubscriptionManagementService_GetAll_0 = runtime.ForwardResponseMessage + forward_SubscriptionManagementService_Get_0 = runtime.ForwardResponseMessage + forward_SubscriptionManagementService_Delete_0 = runtime.ForwardResponseMessage + forward_SubscriptionManagementService_Add_0 = runtime.ForwardResponseMessage forward_SubscriptionManagementService_ResetAllSubscriptions_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/topology/link.pb.go b/api/go/gosdn/topology/link.pb.go index 7eb018808..a3822b612 100644 --- a/api/go/gosdn/topology/link.pb.go +++ b/api/go/gosdn/topology/link.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/topology/link.proto @@ -16,6 +16,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -26,26 +27,23 @@ const ( ) type Link struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + SourceNode *Node `protobuf:"bytes,3,opt,name=sourceNode,proto3" json:"sourceNode,omitempty"` + TargetNode *Node `protobuf:"bytes,4,opt,name=targetNode,proto3" json:"targetNode,omitempty"` + SourcePort *Port `protobuf:"bytes,5,opt,name=sourcePort,proto3" json:"sourcePort,omitempty"` + TargetPort *Port `protobuf:"bytes,6,opt,name=targetPort,proto3" json:"targetPort,omitempty"` + Metadata *conflict.Metadata `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - SourceNode *Node `protobuf:"bytes,3,opt,name=sourceNode,proto3" json:"sourceNode,omitempty"` - TargetNode *Node `protobuf:"bytes,4,opt,name=targetNode,proto3" json:"targetNode,omitempty"` - SourcePort *Port `protobuf:"bytes,5,opt,name=sourcePort,proto3" json:"sourcePort,omitempty"` - TargetPort *Port `protobuf:"bytes,6,opt,name=targetPort,proto3" json:"targetPort,omitempty"` - Metadata *conflict.Metadata `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Link) Reset() { *x = Link{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_link_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_link_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Link) String() string { @@ -56,7 +54,7 @@ func (*Link) ProtoMessage() {} func (x *Link) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_link_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -122,7 +120,7 @@ func (x *Link) GetMetadata() *conflict.Metadata { var File_gosdn_topology_link_proto protoreflect.FileDescriptor -var file_gosdn_topology_link_proto_rawDesc = []byte{ +var file_gosdn_topology_link_proto_rawDesc = string([]byte{ 0x0a, 0x19, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, @@ -166,16 +164,16 @@ var file_gosdn_topology_link_proto_rawDesc = []byte{ 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_topology_link_proto_rawDescOnce sync.Once - file_gosdn_topology_link_proto_rawDescData = file_gosdn_topology_link_proto_rawDesc + file_gosdn_topology_link_proto_rawDescData []byte ) func file_gosdn_topology_link_proto_rawDescGZIP() []byte { file_gosdn_topology_link_proto_rawDescOnce.Do(func() { - file_gosdn_topology_link_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_topology_link_proto_rawDescData) + file_gosdn_topology_link_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_topology_link_proto_rawDesc), len(file_gosdn_topology_link_proto_rawDesc))) }) return file_gosdn_topology_link_proto_rawDescData } @@ -207,25 +205,11 @@ func file_gosdn_topology_link_proto_init() { } file_gosdn_topology_node_proto_init() file_gosdn_topology_port_proto_init() - if !protoimpl.UnsafeEnabled { - file_gosdn_topology_link_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Link); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_topology_link_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_topology_link_proto_rawDesc), len(file_gosdn_topology_link_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -236,7 +220,6 @@ func file_gosdn_topology_link_proto_init() { MessageInfos: file_gosdn_topology_link_proto_msgTypes, }.Build() File_gosdn_topology_link_proto = out.File - file_gosdn_topology_link_proto_rawDesc = nil file_gosdn_topology_link_proto_goTypes = nil file_gosdn_topology_link_proto_depIdxs = nil } diff --git a/api/go/gosdn/topology/node.pb.go b/api/go/gosdn/topology/node.pb.go index cb9e151d9..f985e87eb 100644 --- a/api/go/gosdn/topology/node.pb.go +++ b/api/go/gosdn/topology/node.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/topology/node.proto @@ -16,6 +16,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -26,22 +27,19 @@ const ( ) type Node struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Metadata *conflict.Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Metadata *conflict.Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Node) Reset() { *x = Node{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_node_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_node_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Node) String() string { @@ -52,7 +50,7 @@ func (*Node) ProtoMessage() {} func (x *Node) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_node_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -90,7 +88,7 @@ func (x *Node) GetMetadata() *conflict.Metadata { var File_gosdn_topology_node_proto protoreflect.FileDescriptor -var file_gosdn_topology_node_proto_rawDesc = []byte{ +var file_gosdn_topology_node_proto_rawDesc = string([]byte{ 0x0a, 0x19, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, @@ -115,16 +113,16 @@ var file_gosdn_topology_node_proto_rawDesc = []byte{ 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_topology_node_proto_rawDescOnce sync.Once - file_gosdn_topology_node_proto_rawDescData = file_gosdn_topology_node_proto_rawDesc + file_gosdn_topology_node_proto_rawDescData []byte ) func file_gosdn_topology_node_proto_rawDescGZIP() []byte { file_gosdn_topology_node_proto_rawDescOnce.Do(func() { - file_gosdn_topology_node_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_topology_node_proto_rawDescData) + file_gosdn_topology_node_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_topology_node_proto_rawDesc), len(file_gosdn_topology_node_proto_rawDesc))) }) return file_gosdn_topology_node_proto_rawDescData } @@ -148,25 +146,11 @@ func file_gosdn_topology_node_proto_init() { if File_gosdn_topology_node_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_topology_node_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Node); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_topology_node_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_topology_node_proto_rawDesc), len(file_gosdn_topology_node_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -177,7 +161,6 @@ func file_gosdn_topology_node_proto_init() { MessageInfos: file_gosdn_topology_node_proto_msgTypes, }.Build() File_gosdn_topology_node_proto = out.File - file_gosdn_topology_node_proto_rawDesc = nil file_gosdn_topology_node_proto_goTypes = nil file_gosdn_topology_node_proto_depIdxs = nil } diff --git a/api/go/gosdn/topology/port.pb.go b/api/go/gosdn/topology/port.pb.go index 33c0a0df6..536af7053 100644 --- a/api/go/gosdn/topology/port.pb.go +++ b/api/go/gosdn/topology/port.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/topology/port.proto @@ -16,6 +16,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -26,21 +27,18 @@ const ( ) type Configuration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` + PrefixLength int64 `protobuf:"varint,2,opt,name=prefixLength,proto3" json:"prefixLength,omitempty"` unknownFields protoimpl.UnknownFields - - Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` - PrefixLength int64 `protobuf:"varint,2,opt,name=prefixLength,proto3" json:"prefixLength,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Configuration) Reset() { *x = Configuration{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_port_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_port_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Configuration) String() string { @@ -51,7 +49,7 @@ func (*Configuration) ProtoMessage() {} func (x *Configuration) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_port_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -81,23 +79,20 @@ func (x *Configuration) GetPrefixLength() int64 { } type Port struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Configuration *Configuration `protobuf:"bytes,3,opt,name=configuration,proto3" json:"configuration,omitempty"` + Metadata *conflict.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Configuration *Configuration `protobuf:"bytes,3,opt,name=configuration,proto3" json:"configuration,omitempty"` - Metadata *conflict.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Port) Reset() { *x = Port{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_port_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_port_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Port) String() string { @@ -108,7 +103,7 @@ func (*Port) ProtoMessage() {} func (x *Port) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_port_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -153,7 +148,7 @@ func (x *Port) GetMetadata() *conflict.Metadata { var File_gosdn_topology_port_proto protoreflect.FileDescriptor -var file_gosdn_topology_port_proto_rawDesc = []byte{ +var file_gosdn_topology_port_proto_rawDesc = string([]byte{ 0x0a, 0x19, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, @@ -189,16 +184,16 @@ var file_gosdn_topology_port_proto_rawDesc = []byte{ 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_topology_port_proto_rawDescOnce sync.Once - file_gosdn_topology_port_proto_rawDescData = file_gosdn_topology_port_proto_rawDesc + file_gosdn_topology_port_proto_rawDescData []byte ) func file_gosdn_topology_port_proto_rawDescGZIP() []byte { file_gosdn_topology_port_proto_rawDescOnce.Do(func() { - file_gosdn_topology_port_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_topology_port_proto_rawDescData) + file_gosdn_topology_port_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_topology_port_proto_rawDesc), len(file_gosdn_topology_port_proto_rawDesc))) }) return file_gosdn_topology_port_proto_rawDescData } @@ -224,37 +219,11 @@ func file_gosdn_topology_port_proto_init() { if File_gosdn_topology_port_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_topology_port_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Configuration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_port_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Port); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_topology_port_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_topology_port_proto_rawDesc), len(file_gosdn_topology_port_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -265,7 +234,6 @@ func file_gosdn_topology_port_proto_init() { MessageInfos: file_gosdn_topology_port_proto_msgTypes, }.Build() File_gosdn_topology_port_proto = out.File - file_gosdn_topology_port_proto_rawDesc = nil file_gosdn_topology_port_proto_goTypes = nil file_gosdn_topology_port_proto_depIdxs = nil } diff --git a/api/go/gosdn/topology/route.pb.go b/api/go/gosdn/topology/route.pb.go index 98810c542..81485b54b 100644 --- a/api/go/gosdn/topology/route.pb.go +++ b/api/go/gosdn/topology/route.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/topology/route.proto @@ -16,6 +16,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -26,24 +27,21 @@ const ( ) type Route struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + TargetIPRange string `protobuf:"bytes,2,opt,name=targetIPRange,proto3" json:"targetIPRange,omitempty"` + NextHopIP string `protobuf:"bytes,3,opt,name=nextHopIP,proto3" json:"nextHopIP,omitempty"` + PortID string `protobuf:"bytes,4,opt,name=portID,proto3" json:"portID,omitempty"` + Metric string `protobuf:"bytes,5,opt,name=metric,proto3" json:"metric,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - TargetIPRange string `protobuf:"bytes,2,opt,name=targetIPRange,proto3" json:"targetIPRange,omitempty"` - NextHopIP string `protobuf:"bytes,3,opt,name=nextHopIP,proto3" json:"nextHopIP,omitempty"` - PortID string `protobuf:"bytes,4,opt,name=portID,proto3" json:"portID,omitempty"` - Metric string `protobuf:"bytes,5,opt,name=metric,proto3" json:"metric,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Route) Reset() { *x = Route{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_route_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_route_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Route) String() string { @@ -54,7 +52,7 @@ func (*Route) ProtoMessage() {} func (x *Route) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_route_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -105,23 +103,20 @@ func (x *Route) GetMetric() string { } type RoutingTable struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + NodeID string `protobuf:"bytes,2,opt,name=nodeID,proto3" json:"nodeID,omitempty"` + Routes []*Route `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"` + Metadata *conflict.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - NodeID string `protobuf:"bytes,2,opt,name=nodeID,proto3" json:"nodeID,omitempty"` - Routes []*Route `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes,omitempty"` - Metadata *conflict.Metadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RoutingTable) Reset() { *x = RoutingTable{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_route_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_route_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RoutingTable) String() string { @@ -132,7 +127,7 @@ func (*RoutingTable) ProtoMessage() {} func (x *RoutingTable) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_route_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -177,7 +172,7 @@ func (x *RoutingTable) GetMetadata() *conflict.Metadata { var File_gosdn_topology_route_proto protoreflect.FileDescriptor -var file_gosdn_topology_route_proto_rawDesc = []byte{ +var file_gosdn_topology_route_proto_rawDesc = string([]byte{ 0x0a, 0x1a, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x1a, 0x1c, 0x67, 0x6f, @@ -217,16 +212,16 @@ var file_gosdn_topology_route_proto_rawDesc = []byte{ 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_topology_route_proto_rawDescOnce sync.Once - file_gosdn_topology_route_proto_rawDescData = file_gosdn_topology_route_proto_rawDesc + file_gosdn_topology_route_proto_rawDescData []byte ) func file_gosdn_topology_route_proto_rawDescGZIP() []byte { file_gosdn_topology_route_proto_rawDescOnce.Do(func() { - file_gosdn_topology_route_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_topology_route_proto_rawDescData) + file_gosdn_topology_route_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_topology_route_proto_rawDesc), len(file_gosdn_topology_route_proto_rawDesc))) }) return file_gosdn_topology_route_proto_rawDescData } @@ -252,37 +247,11 @@ func file_gosdn_topology_route_proto_init() { if File_gosdn_topology_route_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_topology_route_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Route); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_route_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*RoutingTable); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_topology_route_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_topology_route_proto_rawDesc), len(file_gosdn_topology_route_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -293,7 +262,6 @@ func file_gosdn_topology_route_proto_init() { MessageInfos: file_gosdn_topology_route_proto_msgTypes, }.Build() File_gosdn_topology_route_proto = out.File - file_gosdn_topology_route_proto_rawDesc = nil file_gosdn_topology_route_proto_goTypes = nil file_gosdn_topology_route_proto_depIdxs = nil } diff --git a/api/go/gosdn/topology/routingTable.pb.go b/api/go/gosdn/topology/routingTable.pb.go index 676faf2c6..d694dcbc4 100644 --- a/api/go/gosdn/topology/routingTable.pb.go +++ b/api/go/gosdn/topology/routingTable.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/topology/routingTable.proto @@ -16,6 +16,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -26,21 +27,18 @@ const ( ) type AddRoutingTableRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + RoutingTable *RoutingTable `protobuf:"bytes,2,opt,name=routingTable,proto3" json:"routingTable,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - RoutingTable *RoutingTable `protobuf:"bytes,2,opt,name=routingTable,proto3" json:"routingTable,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddRoutingTableRequest) Reset() { *x = AddRoutingTableRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_routingTable_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_routingTable_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddRoutingTableRequest) String() string { @@ -51,7 +49,7 @@ func (*AddRoutingTableRequest) ProtoMessage() {} func (x *AddRoutingTableRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_routingTable_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -81,20 +79,17 @@ func (x *AddRoutingTableRequest) GetRoutingTable() *RoutingTable { } type AddRoutingTableResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddRoutingTableResponse) Reset() { *x = AddRoutingTableResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_routingTable_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_routingTable_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddRoutingTableResponse) String() string { @@ -105,7 +100,7 @@ func (*AddRoutingTableResponse) ProtoMessage() {} func (x *AddRoutingTableResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_routingTable_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -128,20 +123,17 @@ func (x *AddRoutingTableResponse) GetTimestamp() int64 { } type GetRoutesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoutesRequest) Reset() { *x = GetRoutesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_routingTable_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_routingTable_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRoutesRequest) String() string { @@ -152,7 +144,7 @@ func (*GetRoutesRequest) ProtoMessage() {} func (x *GetRoutesRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_routingTable_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -175,21 +167,18 @@ func (x *GetRoutesRequest) GetTimestamp() int64 { } type GetRoutesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + RoutingTables []*RoutingTable `protobuf:"bytes,2,rep,name=routingTables,proto3" json:"routingTables,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - RoutingTables []*RoutingTable `protobuf:"bytes,2,rep,name=routingTables,proto3" json:"routingTables,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetRoutesResponse) Reset() { *x = GetRoutesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_routingTable_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_routingTable_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetRoutesResponse) String() string { @@ -200,7 +189,7 @@ func (*GetRoutesResponse) ProtoMessage() {} func (x *GetRoutesResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_routingTable_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -230,21 +219,18 @@ func (x *GetRoutesResponse) GetRoutingTables() []*RoutingTable { } type DeleteRoutesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRoutesRequest) Reset() { *x = DeleteRoutesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_routingTable_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_routingTable_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRoutesRequest) String() string { @@ -255,7 +241,7 @@ func (*DeleteRoutesRequest) ProtoMessage() {} func (x *DeleteRoutesRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_routingTable_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -285,20 +271,17 @@ func (x *DeleteRoutesRequest) GetId() string { } type DeleteRoutesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteRoutesResponse) Reset() { *x = DeleteRoutesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_routingTable_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_routingTable_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteRoutesResponse) String() string { @@ -309,7 +292,7 @@ func (*DeleteRoutesResponse) ProtoMessage() {} func (x *DeleteRoutesResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_routingTable_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -333,7 +316,7 @@ func (x *DeleteRoutesResponse) GetTimestamp() int64 { var File_gosdn_topology_routingTable_proto protoreflect.FileDescriptor -var file_gosdn_topology_routingTable_proto_rawDesc = []byte{ +var file_gosdn_topology_routingTable_proto_rawDesc = string([]byte{ 0x0a, 0x21, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x6c, @@ -409,16 +392,16 @@ var file_gosdn_topology_routingTable_proto_rawDesc = []byte{ 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_topology_routingTable_proto_rawDescOnce sync.Once - file_gosdn_topology_routingTable_proto_rawDescData = file_gosdn_topology_routingTable_proto_rawDesc + file_gosdn_topology_routingTable_proto_rawDescData []byte ) func file_gosdn_topology_routingTable_proto_rawDescGZIP() []byte { file_gosdn_topology_routingTable_proto_rawDescOnce.Do(func() { - file_gosdn_topology_routingTable_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_topology_routingTable_proto_rawDescData) + file_gosdn_topology_routingTable_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_topology_routingTable_proto_rawDesc), len(file_gosdn_topology_routingTable_proto_rawDesc))) }) return file_gosdn_topology_routingTable_proto_rawDescData } @@ -456,85 +439,11 @@ func file_gosdn_topology_routingTable_proto_init() { } file_gosdn_topology_route_proto_init() file_gosdn_topology_topology_proto_init() - if !protoimpl.UnsafeEnabled { - file_gosdn_topology_routingTable_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*AddRoutingTableRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_routingTable_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*AddRoutingTableResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_routingTable_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GetRoutesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_routingTable_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetRoutesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_routingTable_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRoutesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_routingTable_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*DeleteRoutesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_topology_routingTable_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_topology_routingTable_proto_rawDesc), len(file_gosdn_topology_routingTable_proto_rawDesc)), NumEnums: 0, NumMessages: 6, NumExtensions: 0, @@ -545,7 +454,6 @@ func file_gosdn_topology_routingTable_proto_init() { MessageInfos: file_gosdn_topology_routingTable_proto_msgTypes, }.Build() File_gosdn_topology_routingTable_proto = out.File - file_gosdn_topology_routingTable_proto_rawDesc = nil file_gosdn_topology_routingTable_proto_goTypes = nil file_gosdn_topology_routingTable_proto_depIdxs = nil } diff --git a/api/go/gosdn/topology/routingTable.pb.gw.go b/api/go/gosdn/topology/routingTable.pb.gw.go index 2b736a2f5..38438fcd9 100644 --- a/api/go/gosdn/topology/routingTable.pb.gw.go +++ b/api/go/gosdn/topology/routingTable.pb.gw.go @@ -10,6 +10,7 @@ package topology import ( "context" + "errors" "io" "net/http" @@ -24,109 +25,104 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_RoutingTableService_AddRoutingTable_0(ctx context.Context, marshaler runtime.Marshaler, client RoutingTableServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddRoutingTableRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddRoutingTableRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.AddRoutingTable(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoutingTableService_AddRoutingTable_0(ctx context.Context, marshaler runtime.Marshaler, server RoutingTableServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddRoutingTableRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddRoutingTableRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AddRoutingTable(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_RoutingTableService_GetRoutes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_RoutingTableService_GetRoutes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_RoutingTableService_GetRoutes_0(ctx context.Context, marshaler runtime.Marshaler, client RoutingTableServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRoutesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetRoutesRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoutingTableService_GetRoutes_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetRoutes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoutingTableService_GetRoutes_0(ctx context.Context, marshaler runtime.Marshaler, server RoutingTableServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetRoutesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetRoutesRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoutingTableService_GetRoutes_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetRoutes(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_RoutingTableService_DeleteRoute_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_RoutingTableService_DeleteRoute_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_RoutingTableService_DeleteRoute_0(ctx context.Context, marshaler runtime.Marshaler, client RoutingTableServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRoutesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteRoutesRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoutingTableService_DeleteRoute_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.DeleteRoute(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_RoutingTableService_DeleteRoute_0(ctx context.Context, marshaler runtime.Marshaler, server RoutingTableServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRoutesRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteRoutesRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoutingTableService_DeleteRoute_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.DeleteRoute(ctx, &protoReq) return msg, metadata, err - } // RegisterRoutingTableServiceHandlerServer registers the http handlers for service RoutingTableService to "mux". @@ -135,16 +131,13 @@ func local_request_RoutingTableService_DeleteRoute_0(ctx context.Context, marsha // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRoutingTableServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterRoutingTableServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RoutingTableServiceServer) error { - - mux.Handle("POST", pattern_RoutingTableService_AddRoutingTable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_RoutingTableService_AddRoutingTable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/AddRoutingTable", runtime.WithHTTPPathPattern("/routing/create")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/AddRoutingTable", runtime.WithHTTPPathPattern("/routing/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -156,20 +149,15 @@ func RegisterRoutingTableServiceHandlerServer(ctx context.Context, mux *runtime. runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoutingTableService_AddRoutingTable_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_RoutingTableService_GetRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_RoutingTableService_GetRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/GetRoutes", runtime.WithHTTPPathPattern("/routing")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/GetRoutes", runtime.WithHTTPPathPattern("/routing")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -181,20 +169,15 @@ func RegisterRoutingTableServiceHandlerServer(ctx context.Context, mux *runtime. runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoutingTableService_GetRoutes_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_RoutingTableService_DeleteRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_RoutingTableService_DeleteRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/DeleteRoute", runtime.WithHTTPPathPattern("/routing/delete")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/DeleteRoute", runtime.WithHTTPPathPattern("/routing/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -206,9 +189,7 @@ func RegisterRoutingTableServiceHandlerServer(ctx context.Context, mux *runtime. runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoutingTableService_DeleteRoute_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -235,7 +216,6 @@ func RegisterRoutingTableServiceHandlerFromEndpoint(ctx context.Context, mux *ru } }() }() - return RegisterRoutingTableServiceHandler(ctx, mux, conn) } @@ -251,14 +231,11 @@ func RegisterRoutingTableServiceHandler(ctx context.Context, mux *runtime.ServeM // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "RoutingTableServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterRoutingTableServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RoutingTableServiceClient) error { - - mux.Handle("POST", pattern_RoutingTableService_AddRoutingTable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_RoutingTableService_AddRoutingTable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/AddRoutingTable", runtime.WithHTTPPathPattern("/routing/create")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/AddRoutingTable", runtime.WithHTTPPathPattern("/routing/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -269,18 +246,13 @@ func RegisterRoutingTableServiceHandlerClient(ctx context.Context, mux *runtime. runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoutingTableService_AddRoutingTable_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_RoutingTableService_GetRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_RoutingTableService_GetRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/GetRoutes", runtime.WithHTTPPathPattern("/routing")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/GetRoutes", runtime.WithHTTPPathPattern("/routing")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -291,18 +263,13 @@ func RegisterRoutingTableServiceHandlerClient(ctx context.Context, mux *runtime. runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoutingTableService_GetRoutes_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_RoutingTableService_DeleteRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_RoutingTableService_DeleteRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/DeleteRoute", runtime.WithHTTPPathPattern("/routing/delete")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.RoutingTableService/DeleteRoute", runtime.WithHTTPPathPattern("/routing/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -313,26 +280,19 @@ func RegisterRoutingTableServiceHandlerClient(ctx context.Context, mux *runtime. runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_RoutingTableService_DeleteRoute_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( pattern_RoutingTableService_AddRoutingTable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"routing", "create"}, "")) - - pattern_RoutingTableService_GetRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"routing"}, "")) - - pattern_RoutingTableService_DeleteRoute_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"routing", "delete"}, "")) + pattern_RoutingTableService_GetRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"routing"}, "")) + pattern_RoutingTableService_DeleteRoute_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"routing", "delete"}, "")) ) var ( forward_RoutingTableService_AddRoutingTable_0 = runtime.ForwardResponseMessage - - forward_RoutingTableService_GetRoutes_0 = runtime.ForwardResponseMessage - - forward_RoutingTableService_DeleteRoute_0 = runtime.ForwardResponseMessage + forward_RoutingTableService_GetRoutes_0 = runtime.ForwardResponseMessage + forward_RoutingTableService_DeleteRoute_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/topology/topology.pb.go b/api/go/gosdn/topology/topology.pb.go index 3f0587482..91048f409 100644 --- a/api/go/gosdn/topology/topology.pb.go +++ b/api/go/gosdn/topology/topology.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/topology/topology.proto @@ -15,6 +15,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -25,20 +26,17 @@ const ( ) type Topology struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Links []*Link `protobuf:"bytes,1,rep,name=links,proto3" json:"links,omitempty"` unknownFields protoimpl.UnknownFields - - Links []*Link `protobuf:"bytes,1,rep,name=links,proto3" json:"links,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Topology) Reset() { *x = Topology{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Topology) String() string { @@ -49,7 +47,7 @@ func (*Topology) ProtoMessage() {} func (x *Topology) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -72,21 +70,18 @@ func (x *Topology) GetLinks() []*Link { } type AddLinkRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Link *Link `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Link *Link `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddLinkRequest) Reset() { *x = AddLinkRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddLinkRequest) String() string { @@ -97,7 +92,7 @@ func (*AddLinkRequest) ProtoMessage() {} func (x *AddLinkRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -127,20 +122,17 @@ func (x *AddLinkRequest) GetLink() *Link { } type AddLinkResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AddLinkResponse) Reset() { *x = AddLinkResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddLinkResponse) String() string { @@ -151,7 +143,7 @@ func (*AddLinkResponse) ProtoMessage() {} func (x *AddLinkResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -174,20 +166,17 @@ func (x *AddLinkResponse) GetTimestamp() int64 { } type GetTopologyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTopologyRequest) Reset() { *x = GetTopologyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTopologyRequest) String() string { @@ -198,7 +187,7 @@ func (*GetTopologyRequest) ProtoMessage() {} func (x *GetTopologyRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -221,21 +210,18 @@ func (x *GetTopologyRequest) GetTimestamp() int64 { } type GetTopologyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Toplogy *Topology `protobuf:"bytes,2,opt,name=toplogy,proto3" json:"toplogy,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Toplogy *Topology `protobuf:"bytes,2,opt,name=toplogy,proto3" json:"toplogy,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetTopologyResponse) Reset() { *x = GetTopologyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetTopologyResponse) String() string { @@ -246,7 +232,7 @@ func (*GetTopologyResponse) ProtoMessage() {} func (x *GetTopologyResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -276,21 +262,18 @@ func (x *GetTopologyResponse) GetToplogy() *Topology { } type UpdateLinkRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Link *Link `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Link *Link `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateLinkRequest) Reset() { *x = UpdateLinkRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateLinkRequest) String() string { @@ -301,7 +284,7 @@ func (*UpdateLinkRequest) ProtoMessage() {} func (x *UpdateLinkRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -331,20 +314,17 @@ func (x *UpdateLinkRequest) GetLink() *Link { } type UpdateLinkResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateLinkResponse) Reset() { *x = UpdateLinkResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateLinkResponse) String() string { @@ -355,7 +335,7 @@ func (*UpdateLinkResponse) ProtoMessage() {} func (x *UpdateLinkResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -378,21 +358,18 @@ func (x *UpdateLinkResponse) GetTimestamp() int64 { } type DeleteLinkRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteLinkRequest) Reset() { *x = DeleteLinkRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteLinkRequest) String() string { @@ -403,7 +380,7 @@ func (*DeleteLinkRequest) ProtoMessage() {} func (x *DeleteLinkRequest) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -433,20 +410,17 @@ func (x *DeleteLinkRequest) GetId() string { } type DeleteLinkResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteLinkResponse) Reset() { *x = DeleteLinkResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_topology_topology_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_topology_topology_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteLinkResponse) String() string { @@ -457,7 +431,7 @@ func (*DeleteLinkResponse) ProtoMessage() {} func (x *DeleteLinkResponse) ProtoReflect() protoreflect.Message { mi := &file_gosdn_topology_topology_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -481,7 +455,7 @@ func (x *DeleteLinkResponse) GetTimestamp() int64 { var File_gosdn_topology_topology_proto protoreflect.FileDescriptor -var file_gosdn_topology_topology_proto_rawDesc = []byte{ +var file_gosdn_topology_topology_proto_rawDesc = string([]byte{ 0x0a, 0x1d, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x1a, @@ -570,16 +544,16 @@ var file_gosdn_topology_topology_proto_rawDesc = []byte{ 0x2f, 0x64, 0x61, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_topology_topology_proto_rawDescOnce sync.Once - file_gosdn_topology_topology_proto_rawDescData = file_gosdn_topology_topology_proto_rawDesc + file_gosdn_topology_topology_proto_rawDescData []byte ) func file_gosdn_topology_topology_proto_rawDescGZIP() []byte { file_gosdn_topology_topology_proto_rawDescOnce.Do(func() { - file_gosdn_topology_topology_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_topology_topology_proto_rawDescData) + file_gosdn_topology_topology_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_topology_topology_proto_rawDesc), len(file_gosdn_topology_topology_proto_rawDesc))) }) return file_gosdn_topology_topology_proto_rawDescData } @@ -624,121 +598,11 @@ func file_gosdn_topology_topology_proto_init() { } file_gosdn_topology_link_proto_init() file_gosdn_topology_route_proto_init() - if !protoimpl.UnsafeEnabled { - file_gosdn_topology_topology_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Topology); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*AddLinkRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*AddLinkResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetTopologyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetTopologyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*UpdateLinkRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*UpdateLinkResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*DeleteLinkRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_topology_topology_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*DeleteLinkResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_topology_topology_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_topology_topology_proto_rawDesc), len(file_gosdn_topology_topology_proto_rawDesc)), NumEnums: 0, NumMessages: 9, NumExtensions: 0, @@ -749,7 +613,6 @@ func file_gosdn_topology_topology_proto_init() { MessageInfos: file_gosdn_topology_topology_proto_msgTypes, }.Build() File_gosdn_topology_topology_proto = out.File - file_gosdn_topology_topology_proto_rawDesc = nil file_gosdn_topology_topology_proto_goTypes = nil file_gosdn_topology_topology_proto_depIdxs = nil } diff --git a/api/go/gosdn/topology/topology.pb.gw.go b/api/go/gosdn/topology/topology.pb.gw.go index 93edbd2fd..b1c324665 100644 --- a/api/go/gosdn/topology/topology.pb.gw.go +++ b/api/go/gosdn/topology/topology.pb.gw.go @@ -10,6 +10,7 @@ package topology import ( "context" + "errors" "io" "net/http" @@ -24,135 +25,128 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_TopologyService_AddLink_0(ctx context.Context, marshaler runtime.Marshaler, client TopologyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddLinkRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddLinkRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.AddLink(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_TopologyService_AddLink_0(ctx context.Context, marshaler runtime.Marshaler, server TopologyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AddLinkRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq AddLinkRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.AddLink(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_TopologyService_GetTopology_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_TopologyService_GetTopology_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_TopologyService_GetTopology_0(ctx context.Context, marshaler runtime.Marshaler, client TopologyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTopologyRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetTopologyRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TopologyService_GetTopology_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetTopology(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_TopologyService_GetTopology_0(ctx context.Context, marshaler runtime.Marshaler, server TopologyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTopologyRequest - var metadata runtime.ServerMetadata - + var ( + protoReq GetTopologyRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TopologyService_GetTopology_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetTopology(ctx, &protoReq) return msg, metadata, err - } func request_TopologyService_UpdateLink_0(ctx context.Context, marshaler runtime.Marshaler, client TopologyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateLinkRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateLinkRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.UpdateLink(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_TopologyService_UpdateLink_0(ctx context.Context, marshaler runtime.Marshaler, server TopologyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateLinkRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq UpdateLinkRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.UpdateLink(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_TopologyService_DeleteLink_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_TopologyService_DeleteLink_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_TopologyService_DeleteLink_0(ctx context.Context, marshaler runtime.Marshaler, client TopologyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteLinkRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteLinkRequest + metadata runtime.ServerMetadata + ) + io.Copy(io.Discard, req.Body) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TopologyService_DeleteLink_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.DeleteLink(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_TopologyService_DeleteLink_0(ctx context.Context, marshaler runtime.Marshaler, server TopologyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteLinkRequest - var metadata runtime.ServerMetadata - + var ( + protoReq DeleteLinkRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_TopologyService_DeleteLink_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.DeleteLink(ctx, &protoReq) return msg, metadata, err - } // RegisterTopologyServiceHandlerServer registers the http handlers for service TopologyService to "mux". @@ -161,16 +155,13 @@ func local_request_TopologyService_DeleteLink_0(ctx context.Context, marshaler r // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterTopologyServiceHandlerFromEndpoint instead. // GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterTopologyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server TopologyServiceServer) error { - - mux.Handle("POST", pattern_TopologyService_AddLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_TopologyService_AddLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/AddLink", runtime.WithHTTPPathPattern("/topology/create")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/AddLink", runtime.WithHTTPPathPattern("/topology/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -182,20 +173,15 @@ func RegisterTopologyServiceHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_AddLink_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_TopologyService_GetTopology_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_TopologyService_GetTopology_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/GetTopology", runtime.WithHTTPPathPattern("/topology")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/GetTopology", runtime.WithHTTPPathPattern("/topology")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -207,20 +193,15 @@ func RegisterTopologyServiceHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_GetTopology_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_TopologyService_UpdateLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_TopologyService_UpdateLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/UpdateLink", runtime.WithHTTPPathPattern("/topology/update")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/UpdateLink", runtime.WithHTTPPathPattern("/topology/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -232,20 +213,15 @@ func RegisterTopologyServiceHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_UpdateLink_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_TopologyService_DeleteLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_TopologyService_DeleteLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/DeleteLink", runtime.WithHTTPPathPattern("/topology/delete")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gosdn.topology.TopologyService/DeleteLink", runtime.WithHTTPPathPattern("/topology/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -257,9 +233,7 @@ func RegisterTopologyServiceHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_DeleteLink_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -286,7 +260,6 @@ func RegisterTopologyServiceHandlerFromEndpoint(ctx context.Context, mux *runtim } }() }() - return RegisterTopologyServiceHandler(ctx, mux, conn) } @@ -302,14 +275,11 @@ func RegisterTopologyServiceHandler(ctx context.Context, mux *runtime.ServeMux, // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "TopologyServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterTopologyServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client TopologyServiceClient) error { - - mux.Handle("POST", pattern_TopologyService_AddLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_TopologyService_AddLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/AddLink", runtime.WithHTTPPathPattern("/topology/create")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/AddLink", runtime.WithHTTPPathPattern("/topology/create")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -320,18 +290,13 @@ func RegisterTopologyServiceHandlerClient(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_AddLink_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_TopologyService_GetTopology_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_TopologyService_GetTopology_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/GetTopology", runtime.WithHTTPPathPattern("/topology")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/GetTopology", runtime.WithHTTPPathPattern("/topology")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -342,18 +307,13 @@ func RegisterTopologyServiceHandlerClient(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_GetTopology_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_TopologyService_UpdateLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_TopologyService_UpdateLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/UpdateLink", runtime.WithHTTPPathPattern("/topology/update")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/UpdateLink", runtime.WithHTTPPathPattern("/topology/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -364,18 +324,13 @@ func RegisterTopologyServiceHandlerClient(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_UpdateLink_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_TopologyService_DeleteLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_TopologyService_DeleteLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/DeleteLink", runtime.WithHTTPPathPattern("/topology/delete")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/gosdn.topology.TopologyService/DeleteLink", runtime.WithHTTPPathPattern("/topology/delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -386,30 +341,21 @@ func RegisterTopologyServiceHandlerClient(ctx context.Context, mux *runtime.Serv runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopologyService_DeleteLink_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_TopologyService_AddLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"topology", "create"}, "")) - + pattern_TopologyService_AddLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"topology", "create"}, "")) pattern_TopologyService_GetTopology_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"topology"}, "")) - - pattern_TopologyService_UpdateLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"topology", "update"}, "")) - - pattern_TopologyService_DeleteLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"topology", "delete"}, "")) + pattern_TopologyService_UpdateLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"topology", "update"}, "")) + pattern_TopologyService_DeleteLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"topology", "delete"}, "")) ) var ( - forward_TopologyService_AddLink_0 = runtime.ForwardResponseMessage - + forward_TopologyService_AddLink_0 = runtime.ForwardResponseMessage forward_TopologyService_GetTopology_0 = runtime.ForwardResponseMessage - - forward_TopologyService_UpdateLink_0 = runtime.ForwardResponseMessage - - forward_TopologyService_DeleteLink_0 = runtime.ForwardResponseMessage + forward_TopologyService_UpdateLink_0 = runtime.ForwardResponseMessage + forward_TopologyService_DeleteLink_0 = runtime.ForwardResponseMessage ) diff --git a/api/go/gosdn/transport/transport.pb.go b/api/go/gosdn/transport/transport.pb.go index 745f907d3..c81ab6506 100644 --- a/api/go/gosdn/transport/transport.pb.go +++ b/api/go/gosdn/transport/transport.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: gosdn/transport/transport.proto @@ -14,6 +14,7 @@ import ( _ "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -24,29 +25,26 @@ const ( ) type TransportOption struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` - Tls bool `protobuf:"varint,4,opt,name=tls,proto3" json:"tls,omitempty"` - // Types that are assignable to TransportOption: + state protoimpl.MessageState `protogen:"open.v1"` + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + Tls bool `protobuf:"varint,4,opt,name=tls,proto3" json:"tls,omitempty"` + // Types that are valid to be assigned to TransportOption: // // *TransportOption_GnmiTransportOption // *TransportOption_RestconfTransportOption TransportOption isTransportOption_TransportOption `protobuf_oneof:"transport_option"` Type southbound.Type `protobuf:"varint,7,opt,name=type,proto3,enum=gosdn.southbound.Type" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TransportOption) Reset() { *x = TransportOption{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_transport_transport_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_transport_transport_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TransportOption) String() string { @@ -57,7 +55,7 @@ func (*TransportOption) ProtoMessage() {} func (x *TransportOption) ProtoReflect() protoreflect.Message { mi := &file_gosdn_transport_transport_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -100,23 +98,27 @@ func (x *TransportOption) GetTls() bool { return false } -func (m *TransportOption) GetTransportOption() isTransportOption_TransportOption { - if m != nil { - return m.TransportOption +func (x *TransportOption) GetTransportOption() isTransportOption_TransportOption { + if x != nil { + return x.TransportOption } return nil } func (x *TransportOption) GetGnmiTransportOption() *GnmiTransportOption { - if x, ok := x.GetTransportOption().(*TransportOption_GnmiTransportOption); ok { - return x.GnmiTransportOption + if x != nil { + if x, ok := x.TransportOption.(*TransportOption_GnmiTransportOption); ok { + return x.GnmiTransportOption + } } return nil } func (x *TransportOption) GetRestconfTransportOption() *RestconfTransportOption { - if x, ok := x.GetTransportOption().(*TransportOption_RestconfTransportOption); ok { - return x.RestconfTransportOption + if x != nil { + if x, ok := x.TransportOption.(*TransportOption_RestconfTransportOption); ok { + return x.RestconfTransportOption + } } return nil } @@ -145,23 +147,20 @@ func (*TransportOption_GnmiTransportOption) isTransportOption_TransportOption() func (*TransportOption_RestconfTransportOption) isTransportOption_TransportOption() {} type GnmiTransportOption struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Compression string `protobuf:"bytes,1,opt,name=compression,proto3" json:"compression,omitempty"` - GrpcDialOptions map[string]string `protobuf:"bytes,2,rep,name=grpc_dial_options,json=grpcDialOptions,proto3" json:"grpc_dial_options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` - Encoding gnmi.Encoding `protobuf:"varint,4,opt,name=encoding,proto3,enum=gnmi.Encoding" json:"encoding,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Compression string `protobuf:"bytes,1,opt,name=compression,proto3" json:"compression,omitempty"` + GrpcDialOptions map[string]string `protobuf:"bytes,2,rep,name=grpc_dial_options,json=grpcDialOptions,proto3" json:"grpc_dial_options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` + Encoding gnmi.Encoding `protobuf:"varint,4,opt,name=encoding,proto3,enum=gnmi.Encoding" json:"encoding,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GnmiTransportOption) Reset() { *x = GnmiTransportOption{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_transport_transport_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_transport_transport_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GnmiTransportOption) String() string { @@ -172,7 +171,7 @@ func (*GnmiTransportOption) ProtoMessage() {} func (x *GnmiTransportOption) ProtoReflect() protoreflect.Message { mi := &file_gosdn_transport_transport_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -216,18 +215,16 @@ func (x *GnmiTransportOption) GetEncoding() gnmi.Encoding { } type RestconfTransportOption struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RestconfTransportOption) Reset() { *x = RestconfTransportOption{} - if protoimpl.UnsafeEnabled { - mi := &file_gosdn_transport_transport_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_gosdn_transport_transport_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RestconfTransportOption) String() string { @@ -238,7 +235,7 @@ func (*RestconfTransportOption) ProtoMessage() {} func (x *RestconfTransportOption) ProtoReflect() protoreflect.Message { mi := &file_gosdn_transport_transport_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -255,7 +252,7 @@ func (*RestconfTransportOption) Descriptor() ([]byte, []int) { var File_gosdn_transport_transport_proto protoreflect.FileDescriptor -var file_gosdn_transport_transport_proto_rawDesc = []byte{ +var file_gosdn_transport_transport_proto_rawDesc = string([]byte{ 0x0a, 0x1f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, @@ -315,16 +312,16 @@ var file_gosdn_transport_transport_proto_rawDesc = []byte{ 0x74, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_gosdn_transport_transport_proto_rawDescOnce sync.Once - file_gosdn_transport_transport_proto_rawDescData = file_gosdn_transport_transport_proto_rawDesc + file_gosdn_transport_transport_proto_rawDescData []byte ) func file_gosdn_transport_transport_proto_rawDescGZIP() []byte { file_gosdn_transport_transport_proto_rawDescOnce.Do(func() { - file_gosdn_transport_transport_proto_rawDescData = protoimpl.X.CompressGZIP(file_gosdn_transport_transport_proto_rawDescData) + file_gosdn_transport_transport_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gosdn_transport_transport_proto_rawDesc), len(file_gosdn_transport_transport_proto_rawDesc))) }) return file_gosdn_transport_transport_proto_rawDescData } @@ -356,44 +353,6 @@ func file_gosdn_transport_transport_proto_init() { if File_gosdn_transport_transport_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_gosdn_transport_transport_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*TransportOption); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_transport_transport_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*GnmiTransportOption); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gosdn_transport_transport_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*RestconfTransportOption); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_gosdn_transport_transport_proto_msgTypes[0].OneofWrappers = []any{ (*TransportOption_GnmiTransportOption)(nil), (*TransportOption_RestconfTransportOption)(nil), @@ -402,7 +361,7 @@ func file_gosdn_transport_transport_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_gosdn_transport_transport_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_gosdn_transport_transport_proto_rawDesc), len(file_gosdn_transport_transport_proto_rawDesc)), NumEnums: 0, NumMessages: 4, NumExtensions: 0, @@ -413,7 +372,6 @@ func file_gosdn_transport_transport_proto_init() { MessageInfos: file_gosdn_transport_transport_proto_msgTypes, }.Build() File_gosdn_transport_transport_proto = out.File - file_gosdn_transport_transport_proto_rawDesc = nil file_gosdn_transport_transport_proto_goTypes = nil file_gosdn_transport_transport_proto_depIdxs = nil } diff --git a/api/openapiv2/gosdn_northbound.swagger.json b/api/openapiv2/gosdn_northbound.swagger.json index 7e1d7500d..f80bce3cc 100644 --- a/api/openapiv2/gosdn_northbound.swagger.json +++ b/api/openapiv2/gosdn_northbound.swagger.json @@ -709,6 +709,37 @@ ] } }, + "/plugins": { + "get": { + "operationId": "PluginInternalService_AvailablePlugins", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/gosdnplugin_registryGetResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/googlerpcStatus" + } + } + }, + "parameters": [ + { + "name": "timestamp", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + } + ], + "tags": [ + "PluginInternalService" + ] + } + }, "/pnd/{pid}": { "get": { "summary": "Allows to request a specific Principal Network Domain.", diff --git a/api/proto/buf.lock b/api/proto/buf.lock index 0e5e89005..e84d9ee54 100644 --- a/api/proto/buf.lock +++ b/api/proto/buf.lock @@ -4,15 +4,15 @@ deps: - remote: buf.build owner: bufbuild repository: protovalidate - commit: e097f827e65240ac9fd4b1158849a8fc - digest: shake256:f19252436fd9ded945631e2ffaaed28247a92c9015ccf55ae99db9fb3d9600c4fdb00fd2d3bd7701026ec2fd4715c5129e6ae517c25a59ba690020cfe80bf8ad + commit: 5a7b106cbb87462d9a8c9ffecdbd2e38 + digest: shake256:2f7efa5a904668219f039d4f6eeb51e871f8f7f5966055a10663cba335bd65f76cac84da3fa758ab7b5dcb489ec599521390ce3951d119fb56df1fc2def16bb0 - remote: buf.build owner: googleapis repository: googleapis - commit: a86849a25cc04f4dbe9b15ddddfbc488 - digest: shake256:e19143328f8cbfe13fc226aeee5e63773ca494693a72740a7560664270039a380d94a1344234b88c7691311460df9a9b1c2982190d0a2612eae80368718e1943 + commit: f52d4f76a8434cc5966798b1d3b4f110 + digest: shake256:71566dd80e39b7d85fdaa9b7f82107385181d5b6d17ea56c0aacce61099b35f9f1bcf7333ad9838ca19d24d7f076b039de7c9c09c55d23bb4c2fddfceff4d2c2 - remote: buf.build owner: grpc-ecosystem repository: grpc-gateway - commit: 3f42134f4c564983838425bc43c7a65f - digest: shake256:3d11d4c0fe5e05fda0131afefbce233940e27f0c31c5d4e385686aea58ccd30f72053f61af432fa83f1fc11cda57f5f18ca3da26a29064f73c5a0d076bba8d92 + commit: a48fcebcf8f140dd9d09359b9bb185a4 + digest: shake256:a926173f0ec3e1a929462c350acda846e546134b5ce2bb83fe44f02f9330a42b1c9b292f64b951b06a4d2c47e2ce4d477d6a2cb31502a15637ada35ecedefcf6 diff --git a/api/proto/gosdn/networkelement/networkelement.proto b/api/proto/gosdn/networkelement/networkelement.proto index 9c83e2fef..34b4ec2ad 100644 --- a/api/proto/gosdn/networkelement/networkelement.proto +++ b/api/proto/gosdn/networkelement/networkelement.proto @@ -44,6 +44,7 @@ service NetworkElementService { option (google.api.http) = {get: "/mnes/{mneid}"}; } + // TODO: add http option // Allows to request a specific Managed Network Element which is managed by a // specific Principal Network Domain. A flattened version of a Managed @@ -388,4 +389,4 @@ message SubscribePathRequest { message SubscribePathResponse { int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. repeated gnmi.Notification mne_notification = 2; -} +} \ No newline at end of file diff --git a/api/proto/gosdn/plugin-internal/plugin-internal.proto b/api/proto/gosdn/plugin-internal/plugin-internal.proto index 85b721572..21fb8663b 100644 --- a/api/proto/gosdn/plugin-internal/plugin-internal.proto +++ b/api/proto/gosdn/plugin-internal/plugin-internal.proto @@ -4,11 +4,15 @@ package gosdn.plugin_internal; import "buf/validate/validate.proto"; import "gosdn/plugin-registry/plugin-registry.proto"; +import "google/api/annotations.proto"; + option go_package = "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-internal"; service PluginInternalService { - rpc AvailablePlugins(GetAvailablePluginsRequest) returns (gosdn.plugin_registry.GetResponse); + rpc AvailablePlugins(GetAvailablePluginsRequest) returns (gosdn.plugin_registry.GetResponse){ + option (google.api.http) = {get: "/plugins"}; + }; rpc GetPluginSchema(GetPluginSchemaRequest) returns (stream PluginSchemaPayload); } @@ -16,11 +20,6 @@ message GetAvailablePluginsRequest { int64 timestamp = 1; } -message GetAvailablePluginsResponse { - int64 timestamp = 1; - repeated gosdn.plugin_registry.Plugin plugins = 2; -} - message GetPluginSchemaRequest { int64 timestamp = 1; string pid = 2 [(buf.validate.field).required = true]; diff --git a/api/proto/gosdn/plugin-registry/plugin-registry.proto b/api/proto/gosdn/plugin-registry/plugin-registry.proto index ee4040c58..c8f99c581 100644 --- a/api/proto/gosdn/plugin-registry/plugin-registry.proto +++ b/api/proto/gosdn/plugin-registry/plugin-registry.proto @@ -5,6 +5,7 @@ package gosdn.plugin_registry; import "google/protobuf/timestamp.proto"; import "buf/validate/validate.proto"; + option go_package = "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry"; service PluginRegistryService { diff --git a/api/proto/gosdn/plugin/plugin.proto b/api/proto/gosdn/plugin/plugin.proto index 80b6bec34..0b443abf3 100644 --- a/api/proto/gosdn/plugin/plugin.proto +++ b/api/proto/gosdn/plugin/plugin.proto @@ -5,6 +5,7 @@ package gosdn.plugin; import "github.com/openconfig/gnmi/proto/gnmi/gnmi.proto"; import "buf/validate/validate.proto"; + import "gosdn/networkelement/networkelement.proto"; diff --git a/dev_env_data/clab/gosdn_slim.clab.yaml b/dev_env_data/clab/gosdn_slim.clab.yaml index f4d76846c..b3ef8eb08 100644 --- a/dev_env_data/clab/gosdn_slim.clab.yaml +++ b/dev_env_data/clab/gosdn_slim.clab.yaml @@ -13,6 +13,13 @@ topology: image: plugin-registry mgmt-ipv4: 172.100.0.16 + react-ui: + kind: linux + image: react-ui + ports: + - 127.0.0.1:8088:80 + mgmt-ipv4: 172.100.0.6 + gosdn: kind: linux image: gosdn diff --git a/dev_env_data/docker-compose/basic_docker-compose.yml b/dev_env_data/docker-compose/basic_docker-compose.yml index 4e7664161..2544e7b0f 100644 --- a/dev_env_data/docker-compose/basic_docker-compose.yml +++ b/dev_env_data/docker-compose/basic_docker-compose.yml @@ -75,5 +75,10 @@ services: command: start --cert /etc/gnmi-target/ssl/certs/gnmi-target-selfsigned.crt --key /etc/gnmi-target/ssl/private/gnmi-target-selfsigned.key --ca_file /etc/gnmi-target/ssl/ca.crt + react-ui: + image: react-ui + ports: + - 127.0.0.1:8088:80 + volumes: mongo-db-basic: diff --git a/documentation/figures/react-ui/landing_page.png b/documentation/figures/react-ui/landing_page.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b661c63bc96551282d3a34594c24e87b71fa6b GIT binary patch literal 133946 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�_pe`%bv1Dam8PCH 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 literal 0 HcmV?d00001 diff --git a/makefiles/container/Makefile b/makefiles/container/Makefile index c9c21b972..6e3b97242 100644 --- a/makefiles/container/Makefile +++ b/makefiles/container/Makefile @@ -25,3 +25,6 @@ containerize-ws-events-app: containerize-inventory-manager: docker buildx build --rm -t venv-manager --load -f applications/inventory-manager/inventory-manager.Dockerfile . + +containerize-react-ui: + docker buildx build --rm --load -t react-ui -f react-ui/docker/webserver/Dockerfile . diff --git a/models/YangModels b/models/YangModels index 6af71d68a..9442dda17 160000 --- a/models/YangModels +++ b/models/YangModels @@ -1 +1 @@ -Subproject commit 6af71d68aa1deeef0f447567830327370653b37b +Subproject commit 9442dda17a9a5f1f0db548512446e3d9ca37a955 diff --git a/models/arista b/models/arista index 61fc7bba1..ae4d23359 160000 --- a/models/arista +++ b/models/arista @@ -1 +1 @@ -Subproject commit 61fc7bba14ec2efd152b98fc59e8837ad1db3ab9 +Subproject commit ae4d23359a4d25e1f2feb6878b825e629b9f2fb9 diff --git a/models/openconfig b/models/openconfig index daf73c37e..ea279957a 160000 --- a/models/openconfig +++ b/models/openconfig @@ -1 +1 @@ -Subproject commit daf73c37e9062b458bb9eab645840e5d3835c74d +Subproject commit ea279957a8dab6eb0c0b05e5a134bc3dfb0c8d28 diff --git a/plugin-registry/plugin-registry.Dockerfile b/plugin-registry/plugin-registry.Dockerfile index 05d3aad83..292a134fd 100644 --- a/plugin-registry/plugin-registry.Dockerfile +++ b/plugin-registry/plugin-registry.Dockerfile @@ -4,8 +4,9 @@ ARG GITLAB_PROXY FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-bookworm as builder WORKDIR /plugin-registry/ -RUN apt-get update -RUN apt-get -y install --no-install-recommends zip +RUN apt-get update && \ + apt-get -y install --no-install-recommends zip && \ + rm -rf /var/lib/apt/lists/* COPY . . RUN --mount=type=cache,target=/root/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ @@ -21,4 +22,4 @@ WORKDIR /app/ COPY --from=builder /plugin-registry/artifacts/plugin-registry . COPY --from=builder /plugin-registry/plugin-registry/plugins ./plugins COPY --from=builder /plugin-registry/dev_env_data/plugin-registry/plugin-store.json ./plugin-store.json -ENTRYPOINT ["./plugin-registry", "-socket", "55057"] +ENTRYPOINT ["./plugin-registry", "-socket", "55057"] \ No newline at end of file diff --git a/react-ui/.dockerignore b/react-ui/.dockerignore new file mode 100644 index 000000000..5ecec0472 --- /dev/null +++ b/react-ui/.dockerignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +vite/ +tmp/ +.vscode/ \ No newline at end of file diff --git a/react-ui/.gitignore b/react-ui/.gitignore new file mode 100755 index 000000000..2773d47af --- /dev/null +++ b/react-ui/.gitignore @@ -0,0 +1,30 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +/yang_model + +# testing +/coverage +/tmp + +# api +/src/api/** + +# production +/build +/dist +.vite/ + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/react-ui/.prettierrc b/react-ui/.prettierrc new file mode 100755 index 000000000..3a9d4e8fc --- /dev/null +++ b/react-ui/.prettierrc @@ -0,0 +1,11 @@ +{ + "semi": false, + "singleQuote": true, + "trailingComma": "all", + "tabWidth": 4, + "printWidth": 100, + "bracketSpacing": true, + "arrowParens": "avoid", + "bracketSameLine": true, + "singleAttributePerLine": false +} \ No newline at end of file diff --git a/react-ui/README.md b/react-ui/README.md new file mode 100755 index 000000000..3f765437b --- /dev/null +++ b/react-ui/README.md @@ -0,0 +1,40 @@ +# React - UI +The web app is a more convenient way to gather information about the goSDN network. + +<img src="../documentation/figures/react-ui/landing_page.png" /> + +Login with your username and password. The default credentials can be found inside the logs of the goSDN docker container: `docker logs clab-gosdn_csbi_arista_base-gosdn` + +## Current Functionality +### Functional +* Read information about existing and new created switches +* Create new switches +### Technical +* Continuously fetching the current state from the backend +* Frontend persistence of configuration +### Essential +* Login / Logout +* Custom right click menu that provides functionalities depending on the clicked area + +## Technical Description +### Tech Stack +* React 18 +* Bootstrap 5 +* Redux 5 +* RTK-Query 2 + +### Deployment +The web ui is integrated in the containerlab deployment. This uses the [Dockerfile](docker/webserver/Dockerfile) from `docker/webserver/Dockerfile`. It contains a two stage build. The first stage builds the deliverable HTML, CSS and Javascript. The second stage creates the actual webserver that provides the created web assets. The webserver is a nginx with default production ready configurations. + +### Development +During development you start the existing containerlab environment by executing +``` +make containerlab-slim-start-configured +``` +After that execute with yarn or npm +``` +yarn +yarn build::api # generates api code provided by the swagger json file from goSDN +yarn dev +``` +Your local dev environment is now accessible at [localhost:3000](http://localhost:3000). The dev server is running inside a docker container. The container is attached to the network that contains the rest goSDN containers. \ No newline at end of file diff --git a/react-ui/docker/webserver/Dockerfile b/react-ui/docker/webserver/Dockerfile new file mode 100644 index 000000000..9c4f3f676 --- /dev/null +++ b/react-ui/docker/webserver/Dockerfile @@ -0,0 +1,17 @@ +FROM node:alpine3.20 as builder + +COPY ./api/openapiv2/gosdn_northbound.swagger.json /app/api/openapiv2/gosdn_northbound.swagger.json +COPY ./react-ui /app/react-ui + +RUN cd /app/react-ui && \ + rm -rf node_modules && \ + rm yarn.lock && \ + yarn install --production && \ + yarn build + + +# webserver +FROM nginx:alpine3.20 +COPY --from=builder /app/react-ui/dist /usr/share/nginx/html +COPY --from=builder /app/react-ui/docker/webserver/nginx.conf /etc/nginx/nginx.conf +EXPOSE 80 \ No newline at end of file diff --git a/react-ui/docker/webserver/nginx.conf b/react-ui/docker/webserver/nginx.conf new file mode 100644 index 000000000..b9028bec3 --- /dev/null +++ b/react-ui/docker/webserver/nginx.conf @@ -0,0 +1,147 @@ +worker_processes 1; + +events { + worker_connections 1024; + multi_accept on; + use epoll; +} + +http { + include mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main buffer=16k; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + server_tokens off; + + # Buffer size settings + client_body_buffer_size 10K; + client_header_buffer_size 8k; + client_max_body_size 8m; + large_client_header_buffers 4 8k; + + # File descriptor cache + open_file_cache max=2000 inactive=20s; + open_file_cache_valid 60s; + open_file_cache_min_uses 5; + open_file_cache_errors off; + + # Compression settings + gzip on; + gzip_comp_level 6; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; + gzip_types + application/javascript + application/json + application/x-javascript + application/xml + text/css + text/javascript + text/plain + text/xml + text/html + application/x-font-ttf + font/opentype + application/vnd.ms-fontobject + image/svg+xml; + + resolver 127.0.0.11 ipv6=off; + + server { + listen 80; + server_name localhost; + + location ^~ /api/ { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # Proxy timeouts + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + + # Proxy buffering + proxy_buffering on; + proxy_buffer_size 4k; + proxy_buffers 8 16k; + + # CORS headers + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always; + + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + + # Remove /api prefix when proxying + rewrite ^/api/(.*) /$1 break; + proxy_pass http://clab-gosdn_csbi_arista_base-gosdn:8080; + } + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + + # Static asset handling with improved caching + location ~* \.(js|css|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|otf|eot)$ { + root /usr/share/nginx/html; + expires 30d; + add_header Cache-Control "public, no-transform"; + add_header 'Access-Control-Allow-Origin' '*' always; + + # Enable compression for these files + gzip_static on; # Serve pre-compressed files if available + + # Disable access logs for static files + access_log off; + } + } + + + + + # HTTPS server + # + #server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # root html; + # index index.html index.htm; + # } + #} +} \ No newline at end of file diff --git a/react-ui/docs/README.md b/react-ui/docs/README.md new file mode 100755 index 000000000..ae2f7de6d --- /dev/null +++ b/react-ui/docs/README.md @@ -0,0 +1,19 @@ +# goSDN - react ui +The goSDN project is currently managed by a cli. With increased complexity it's getting harder and harder to manage, observe and debug this networks. This subproject provides an UI that keep large projects handable + + +## Getting started +Install all dependencies +``` +yarn install +yarn build::api +``` + +Run the local development server +``` +yarn start +``` +The ui is now accessible by `localhost:3000` + +## Development notes +The ui can run independently from goSDN. But to actually get in touch with the ui, log in and start working with it you need a running goSDN instance on your local maschine. \ No newline at end of file diff --git a/react-ui/docs/design.md b/react-ui/docs/design.md new file mode 100755 index 000000000..e35e46ac7 --- /dev/null +++ b/react-ui/docs/design.md @@ -0,0 +1,8 @@ +## Design +Global styles for predefined components can be found in `./src/styles`. There are definitinos for the following components: +- box for content (c-box) + + +#### Colors +- Primary: #b551e1 +- Secondary: \ No newline at end of file diff --git a/react-ui/docs/development.md b/react-ui/docs/development.md new file mode 100755 index 000000000..819b1dfd7 --- /dev/null +++ b/react-ui/docs/development.md @@ -0,0 +1,25 @@ +## Development +### Technologies +The web app uses several technologies: +* JS-Framework: **React js** +* State management: **Redux** +* Component Libray: **React-Bootstrap** +* CSS-Framework: **Bootstrap** +* Bundler: **Vite** + +Additionally the web app has several core features that should be considered: +* multi languages (i18n): + * English + * German + + +### API +The API to communicate is getting generated with: + +``` +yarn build::api +``` + +It generates a restful API in the `/src/api/` folder. + +We need to proxy the incoming request to the API-Gateway from goSDN. \ No newline at end of file diff --git a/react-ui/docs/routine_pattern.md b/react-ui/docs/routine_pattern.md new file mode 100755 index 000000000..97a29da31 --- /dev/null +++ b/react-ui/docs/routine_pattern.md @@ -0,0 +1,18 @@ +## Routine pattern +The goal is to get a generic architecture to invoke persist and rerun asynchronous actions (thunks). + + +### Goals +* Invoke asyncronous actions +* Rerun actions after page reload by persisting +* Ability to access and manipulate the redux state +* Give a simple interface to the outside world by abstracting the task to achive the upper goals + + +### Usage +Add + + +### Description +The image displays the whole workflow starting by the user that clicks a button. The actual routine pattern takes place within the red border. + diff --git a/react-ui/docs/routine_pattern.png b/react-ui/docs/routine_pattern.png new file mode 100755 index 0000000000000000000000000000000000000000..86b582398523ed51922d8ebad316c15be59265db GIT binary patch literal 102971 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 literal 0 HcmV?d00001 diff --git a/react-ui/eslint.config.js b/react-ui/eslint.config.js new file mode 100755 index 000000000..fd9f6d879 --- /dev/null +++ b/react-ui/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import globals from 'globals' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + } +) diff --git a/react-ui/index.html b/react-ui/index.html new file mode 100755 index 000000000..3dc374a59 --- /dev/null +++ b/react-ui/index.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <link rel="icon" href="favicon.ico" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="theme-color" content="#000000" /> + <meta name="author" content="Matthias Feyll" /> + <meta + name="description" + content="goSDN web ui" + /> + <link rel="apple-touch-icon" href="logo.png" /> + <link rel="manifest" href="manifest.json" /> + <title>goSDN - ui</title> + </head> + <body> + <noscript>You need to enable JavaScript to run this app.</noscript> + <div id="root"></div> + <script type="module" src="/src/index.tsx"></script> + </body> +</html> diff --git a/react-ui/package.json b/react-ui/package.json new file mode 100755 index 000000000..76af9e08b --- /dev/null +++ b/react-ui/package.json @@ -0,0 +1,96 @@ +{ + "name": "react-ui", + "version": "0.1.0", + "author": { + "name": "Matthias Feyll", + "email": "matthias.feyll@stud.h-da.de" + }, + "private": true, + "type": "module", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-regular-svg-icons": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", + "@fullhuman/postcss-purgecss": "^7.0.2", + "@reduxjs/toolkit": "^2.2.4", + "@types/react-grid-layout": "^1.3.5", + "@vitejs/plugin-react": "^4.2.1", + "bootstrap": "^5.3.3", + "crypto-js": "^4.2.0", + "dompurify": "^3.2.3", + "i18next": "^24.0.5", + "jwt-decode": "^4.0.0", + "react": "^18.3.1", + "react-bootstrap": "^2.10.2", + "react-dom": "^18.3.1", + "react-error-boundary": "^4.1.2", + "react-grid-layout": "^1.5.0", + "react-hook-form": "^7.54.2", + "react-i18next": "^15.0.0", + "react-loading-skeleton": "^3.5.0", + "react-redux": "^9.1.2", + "react-router-dom": "^6.23.1", + "react-toastify": "^10.0.5", + "redux": "^5.0.1", + "redux-observable": "^3.0.0-rc.2", + "redux-persist": "^6.0.0", + "sass": "1.82.0", + "sass-embedded": "^1.80.6", + "vite": "^6.0.3" + }, + "devDependencies": { + "@babel/runtime": "^7.21.5", + "@rtk-query/codegen-openapi": "^2.0.0", + "@testing-library/jest-dom": "^6.4.8", + "@testing-library/react": "^16.0.0", + "@testing-library/user-event": "^14.5.2", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^8.0.1", + "@typescript-eslint/parser": "^8.0.1", + "eslint": "^9.9.0", + "eslint-config-airbnb-typescript": "^18.0.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "prettier": "^3.3.3", + "react-scripts": "5.0.1", + "typescript": "^5.5.3", + "typescript-eslint": "^8.0.1", + "vite-bundle-visualizer": "^1.2.1", + "web-vitals": "^4.2.2" + }, + "scripts": { + "start": "vite", + "build::frontend": "vite build", + "build::api": "npx @rtk-query/codegen-openapi ./scripts/openapi-config.json", + "build": "yarn build::api && yarn build::frontend", + "lint": "eslint src", + "lint::fix": "eslint src --fix", + "dev": "./scripts/dev.sh", + "postbuild": "purgecss --css dist/assets/*.css --content dist/index.html dist/assets/*.js --output dist/purged" + }, + "eslintConfig": { + "extends": [ + "react-app" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/react-ui/public/favicon.ico b/react-ui/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae6dcf05241b89f446e88d15b81ffd69202fa83a GIT binary patch literal 31533 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 literal 0 HcmV?d00001 diff --git a/react-ui/public/fonts/Inter.ttf b/react-ui/public/fonts/Inter.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e72470871b8fc198da424b1e17ed729c202829cf GIT binary patch literal 804612 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%0DCo0&`A-%p#lSZ_a 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 Uh@3pmyhdg$M{-oyJW7cF3l>xKP5=M^ literal 0 HcmV?d00001 diff --git a/react-ui/public/fonts/inter-webfont.woff b/react-ui/public/fonts/inter-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..7eca6fe75d3ba56e14981e8f8e1c50d948bb8b56 GIT binary patch literal 26796 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 literal 0 HcmV?d00001 diff --git a/react-ui/public/fonts/inter-webfont.woff2 b/react-ui/public/fonts/inter-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..25ef870d53d5616ee3e92bbe3e85b5ed164fe4d2 GIT binary patch literal 21204 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	Kt&LHX-d6~7|cYCr&9zy7exIc&J0_cz%;@NZu~ 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 D<0+Hs literal 0 HcmV?d00001 diff --git a/react-ui/public/logo.png b/react-ui/public/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..ad4ee061e519860d12b8fb8bb044b1df4359f20d GIT binary patch literal 66912 zcmZ6z1zZ&E_clJe%fiwtExB~3N=YoCAR-{$&4be2u{4Olf|P=kC@76ecb9aEbeDA3 zyF9<||Nr~G@6KnK*_rvw-g(Y-UFY0Hsi`Os;!)!P06_RmQC=MYK<K+2hK;#`Y839n z96+w>3bH_PKkWwQi@cTYvwvQ^0Jt#cFaQ+s8o;`H1hZ3Pb^w56fdB~R2)etL1^)l; zg3wuz|2@BZkVeq)?&Y+v<yAE?NATS>%%=;pbNuIsIgcIs;SJFT03`5CUPjXkwEYn$ zopNmKX71FHOa@5?#gciWo-49J=dm#vQzmcn=%kG#hL!qBdvIh<PGs2ZlW+ODrMBk$ zWv8<w1|;ubjkn(Y)dTgO|4`1wH1U=At{qnU=Ivbl)8CiA>)&7f;LzkYDcmyXO<B|J zyUZE&9&Pn+x#cp#D7s4Y!JPUqn&)oYdshL>zx3ZkMex-$-1<)_|MeVLR{Q%=!W)&e zr8H{GW+DQt80)y!9QnK{uKnjA5k$Oxk^f)`VnxkbnZD)xp11PYjsBLuxNOJkcZ@|~ z9s!U4?Y6Gn{n+Z|eQbk#f9%MQxrWRqvdw4i*MI9hdQdne;?;-b_U&JQXTe>n7vs-x zQZVHJ#)j+`N>dse?9bAm+>YeQZ;{@$rIuBr9O5?~W?x62D>N`a!uuk2qhdDI<>^j+ z?82FUXm#Foir1^~EdKZS_kAy^4xP6?Cgbmdk6oXnB%Rzk&{u8+`iAb{oVdT=e!OaZ zI!8wtJ48-P6PGEBd*c1QRM+mO*CdVl^Z1K#vy#h;)Cx*EHsK;psFR9ZITEuqsg8rE zuePnFx5OORqXQ#CG@W1q4$;loSpvFEU%wr?!?WLMuWi#lTFXA^XBc#vAM_?7LV<!% z=lfNe9$RNtL$~X7eIB@ZK)zStqBG=8lYCq|D#$xj5nvC(tA&@Nx@g2>sDYP}U1try z;-oc-lWWxBJxc%k>yNMya;rrC3y;IFlOjT}KYo>k9M)aHc+V#}eNC4&AqxwP@MiE~ zKt3{R@;2-^Ic`}3)gAM^s4+zR;@Zj~9XWCxqlp`fd$>*YHD5Uio}d3ZlR#cG%#yr2 z{~rZI4xQ%^PF#fa)HEBNE~df&4}c;Y;0;))oz$~|Syzd@4E0|(ybpep-RvxC|F+;T zRx?OEaBVaYMmA-|;FVuUOWvW=<>f(L8rcknk~Fh|wJ5k4>%uJz!qp7j(o-qt@3-jL zFo)qLMskuc^tdQlT8^}KMj3e~Cji0RJcQlgZm_f-J_m9&3M|tVUKR)q7az?MhrO{X zKK>gN9|6_B(uB?i;jl9x%}jO0KB%GfJM6_etGE3td3bP?s~o8KamflT)V_b{Y`$K5 zhzQ=NN~S0$MZuJD$siG7KZR`C!hVn-1Ika8#7ixMGIODW(>V13-;}0SrFo7kCe5P- zU86H^**~%x%;kTTTGxF!vM<C#z6s!dLrL%i2X{fhBMjeakiU*$l#u9VmO>m9Tp&Bv zj3i)AMt<QRZ<1|KKM5*pM)|^U68tyvGQqU*__iPp#c!l+%pa~@>e542)zOM2#vQ?j z+Ar{GUb3$+JypEx-KH;<z<k+pRfg;7N28-F+wajC{uUlXuKKHrbUlZTeY|ga@rACz z$&HWv_edFLgcpn4Us*+DXstdR%dScG-nNsJ&lfmg<YLekVs})TLBxArR6=M&BfyNP zwt=;S{8f)CqQF+0mbYACBbv-aOhg=5IJRJ{5fIZq3~UpJO7gz{MB%*`T>i>$P2_zc zIq9LY@9Nks)}5#)m*H)j+&4nKq@NM+{ATSJ4YtHXqyDuDb#>z67lFIECW;jKM--?} zQ~MKi?CGvsr4xRth?rjHX6`WFrS{gsB-%A`s$@YYs)syZX<Nj+oxIv*ysE^B*!416 z(nUHJmVYgfQfPBaJoVQ_$g6#)qRM%#M|@aS%om3$S5KLCd|Bp{skHn8kl>Yxd6oJ+ zHVn=v!Lu780SD2v=xH))<B)^XI%j+-YmN1{i+;XZw+(wDXTr;q;98+(!(Bqgc3iuK zE0$TSBy+m?kOlv4vs1^vQm&X?PpQrHCjUrkJNN5hFpQ2~e;_m>tau%<6zWY@>=OHv zMPjnt`nfbmYy!~@#P!DMh&5|JJ|tue`%RqX^|qhN<!xN{Vh6b{k^Ur65}sM`2S(wr zaL6-)o?(Qn`#+3@x-kOjRzOtdJ&>XU`Q>4H7WP9j#C<QA{2LR_x4ZR6E4-C|%D<<N z6p3tTy%Wy(*Z3kR0OSYS(SyXTh4eGiv~d!ZD2u~ToOdfuk=|ZyvG11XsjDrk#Vi4q zCb{fvGmhS8RIp%|tQr7T4((a|)bdU6{QR?O#PRm6vOku44i{@MEZh9j=91z>dRc*h z?~9Vxm3D+5I{b$r4n$Uzp<f-Eb5iMweDVq*_!-uo3hm|&d+y5{U<3@m=;u7pd#y-u zw@v0!sG+WMR=#TZb+v`5_C*O6wrIQLO5~*D)ULINeQQn3(00y%EV&iW?mzX8RZi^* zOX`bC(-3h2uvhm8>COC-T9zzu?&+){zS}4V1e^u7ME0<LQX_kXU6%C}%O~LWYfdVI zccXH*dkb^1nQJ%u6Eit{W-cTahfI{Hmq22eQ!*J2`makn3(9VIn$2E951|KO%0x?m z%4**_pf5W>$#K8%f2G(Vd5N~SH*n0&lIUv|`qQfIxBXVjn?saG;)#MvC;bEv6amVf zUoE2M?FC3j(<zJMcAOew(qtD-T6Wu<nnh2z^O?3yCIdH^czOxYGBIaMaR*G;liLrN zzbqOW%gcs*c?xp~|7q?usj-#(9j_XVg?5u;$Be1ON@yK;pONQBaJH-=T?;p#Lnf}# zOJ_y8f>;j2Fh7thw%ZS<3gN#A<Hbpic+9(Xa#Ttm8=IO#P+4kD%USmZT(@QfS4km} zX++bEiY<=!m0`r;Lx!>K%`D+C@@H2B_)SWz|12%k>t}l=Z!K=soPfu%?O2AL>1ij8 z6uI-^-4T)C=7%;c!~Eaj+UkfEf6C8u&nfbADV)U6bF;v4_Wa(n!@Uc_4dI%<9nEpY z^{@9n&CN-i3G!AFm|dTpRuYs6*>^Fx(;oj|y3c<x@_VX%p!j=f5^EQT=tsXbnRK<s z)1h~B13Uo-mm5!1yDn4<jTni+LdsB95W7_1Wb{@k-*_75mWAKKUdqJGLSmTA!n>C8 zm%C*DP)Prz*fO2bYghG`c3s!7ElY<2EmdxDMk4sruFz@2hgW0nWhBkJbHa<iT8@~e zRkybYrc|dUettoxa}7mMN+VCF-7DwMaME}k=nu|*d$;o!K3E|?V2X}tG_HER$876J zVKDn}{ho<KqI2Tc5c+YKPvgYhRY^41l4sY15C(nxERJpe0iKtPeAyX*`m^0dx5;iW zxh1FsnJPLVT9;2;5gh-JVPw0@b2*8%msRGmYEQaQa`l1q^UH0C19EU^cBYtI=B07+ z4EMC&e8o@Xm)-YTS4WMwMB;~%o{txK^(vId)3~iN-tx~iwny#W!^TF(;p?0>ZZVYG z{VaTtIbB$8mGsDvUM|<RK8U}orn36D^jA`&jpt40BwHZmF;sHZkGc2n+e*$6Tb8x& zu~D8}Up?G?q$ur4I~x|~lN+xQ9Pp5?+y>8%OEH5Aqw#XnE#Arigf>E${(un|LGDKR zIrGI`ckhY8gPBJulw{uC3~J|<#IyGkljezP_RI?<o1bTfgbPcpkDo<3i5hxeUp89O zSa%%^O(u_i%9Zlh9?}RTHe+>Njregf<6nN2Qcl|_so6m+owFlG42S9Op1)q`XePea zO5g7;_sgATtGM>%Y1ByW+@ch@IhWAeMd}%|91CzNeEjpeMMIapKhto?vt6P57pc{G z<f}Am-uve#`rCOCk<0QIBGeC_k3R;c6N9g>GCxhn`1j4<cVV6&Haz^yBmE?KE5N+g zinIJC)y6>UGGstwrRJ20-9@itdJvyGtdwixS31#Sy{tN3GzfM`PZ5#Q#<zGdJiVDO zyvCnQw}r5J%xUFc|CCp+a%{GiPBN;<?ZiR<;nmN;D7ilx$rG;A1^5x--`BsE%r}k2 zKYrxocNx7uz4Lj#@})Ta^i7Tdgo=P@B>MK~z38I3UaU^G1%qdT{a<cIL0r#!h)gc! zlbM~W0!#1boL)A*zRoqi>Eq`ge6^n}@Y&sd02O4{VfTnXR$34~r9fS!MFos<Sa>`R zE<r2^KhB&qyW05x8ManX4*K(Od5GUKP0q^K{f}_3&A`Q2<+lK!{~p5JjE8L^9{(9| z&-V)>#?WQa^3H?I_e}W_tI~y@gU<H+ANVgrPaiCN)U%@7Q~C1r@`vb!khmUL9)Lo@ z?E0<th2pfwZx{1!dIU&hTwFT2DZ0h4?5_e2m&D(uSpesKU!zs=AH2!9Fsv9-O<t;3 zqq4z6J}sm@Y}V(1YcOgvjBX}ImDk0SZ8K;5cJTLEv;AAu%1MsGx@5Eg0UMmX`x%@B zk1W$#9cYeM8<jcrGO#;;svcVK$FKNB^Hof#XY85CLW8Lnc)H^O#I=>!sm9aZhjs=Q z1=JQ~2qLDwi1kB6f}$#3uCj+RH|w28X2JJD>8|&L75z{^Z|QR}77_xAt%9}m-eq9< zO!|n{Yc*s4o0C(gHWvacn3VD(B*~}=K;SI)^DwEh+lM!|i4%gTrJM2CR+e4pmjuNR z;C+vfI!sBo2>;H|V1DF#JMJzYHd&KNK{RuHRABWOfW<OQ&s<l2EHVCyj%qQ|z@EL$ zu=}3Ea|*<7WLL&|?PT_i0W2JsJ09Cs<;HTHq3XS);)WHefSKx#*CDrOI<y6ar_3M{ zAFGv2b%sn?UGwpO(M4hk)CGuN7F$@bshhTe0Og1I|3sL;P-nAR2S3gZhIUKBTvI~c zf`(0e`27FbgE8if)EItO9+#_%0;Z02><7}GI#DS~aVwhBSBFgs7U=6rZGH@No~gxp z$PrN~Wm|6NNXdz%STN`D{zspzktTO0SuW1#W%;k!a$_PyNkFINV~`8-kd!~=*c|l( zy*JI|TcYhX>C}N{Ke*())&3$w4nr~&phdrCkSV_3PSsYr^Y4ljT|k?Uu}oN~wUjU% zK^Xo>a@h~xNbmWK*dKQ=`ko7cmz5Yc2RcB6*!zg|8*zAg|Kw6lQh8kx88~<9o_&8c zE&`zX`+LhZtfkJ3-;Z?~*#H)U5}avwtG#?Y*S=+T6{w#n`6O8+Sr+v}qWZ9nb&?H( zl3bVOBcyqth<5yl`U_%ko2&x^Igy<+Nvrwfm$2Wz<I)_@GxvIu@5^QM?dBC4e__Nk zi^7Y_Bz6{y->*;3W$}5h{QiGxKt-_!l(khihm=f|M$E_u{kR<xLtnJN2yl*-X{Cp2 zMsP>DfVvdLP*eziN7|!71#F@Xu@&0$_r8XK5rvhtWB}IX^ik=!^{nYUAVGk@e_9vH zR~cgIO@Ll(XP!O7Vf?g(=M-z>IU7@MOj;>vSGn?xj=wQUO&!&>J14PR7H5^_Zz<OL z0;N6_yug3^aUdJcg7Z_tJ)y9(G!?v@>Ot8DMVd$UaruZhW*#_NQKy4t0(vC3Ip<Af z>6BPN|My&I;tbnM@;$Ed)#}CuEc2Rcw>^bhCEP0VZ8ZzRjCBQ(7k>oSgNXAbl%amw zqP5ebW97!Sm~rt=&O`cIT+|mZJ2p1S$BV}SHIlDM>5fN()PH!jZ3VL1X&309*EuO) z;ycD4e^3hg)ahZ6KIwcVOAN>1@9y?vn%?H_#f7t6MpF=69?nh9P`<%k!l@L$*4K+O z6Z|zsJL0gt4ZwZT>hwLBKDjb@kIm3BERY<6lcWe%d~f%k0ToH%1c=$=Ei_NW8eCV@ zQSB*k!~JY6^KN2JE<WN!_=ds0coxo@n&`#yl~8?)viK`$HTdBaM$~KIr!Sf}&3oE) zAgsRkQ*zsJDa7-3XABkG(kf%Q-!*Z|H%-NaDWLmF^wYWvd)<K>1sBo>mi7Or&#%Ay zkU6<O?2SiFNz%Ieya8+!vXo&oxe7lI-K`|}xuB~SFm<84tVR92S;{=E_U79!?+5R1 z7alkLLn(bLGWC=|T<@oH2)M1~?H8nk;-8U?XF-YGv9CW{23ZEhSb~VrBy(qQr}^s_ zFpFzNC>S-mHSIL&IAsylPr-W<J}vwhnY^TTj{s0C*}|T^j0G)g{IYGz&YbYSpw^q! z#sii21{J9^kf=rW4#zt#;_fo(@nd(Pp{>Rj9pewYOs_(TQu>mQJ(6Tm+a87y(Q5*< zU&Kg3?<DTW@l|@G2q;i~F?@{@^iA?4ht9@NKrWWku6c~NkjTAyJ=chaRGg37Pv3_R z%jph1E+;|uSa$wUzvGop%TYKm{R&OGKL0Fid0_zI?)!+!N2pb@tku3|<}XgS;Cyq_ zZ88{jROit&<M`pQVpiR0-NLuu2bo;?P8Ri0-09Rr6(R9=_L3iu#G7(l+KQ&VoZi<% zhL<2i`f9*rrhdW%kK-!yo%oAX_N^VZcF6MN31#0XJO$sCG5wMC`uFqV=E>D8vDS>+ z4|t)BJkPdOlXe74f_H>3Gli|^-tK+$u%L)Uq(2H=f9^fl{mqJ60y#Own2CRX?lJ37 zuVwdtDpH2Tg8Tk$oj1!ahyl>zGh39`ALaqYbuWYQzgN%2f_FZ{5t3}jjfd{NI;Eat zYhDavt>r|ZU~3-gzjKRK&v79wW-A%HDJM>gS>AG)x9StlS<PphABzoHreE`gVa#u; z$C~P)7&&3IKOeu5pYYtuI3RR1#qUj9_}O;<S9$#xbyE$y%CGqeU)LLyQOGbJ>XRN% zFe3+RunNY($ukym#23%_6zO2_w^g}?J}1U`n=<PmK`x5VyMxXqelQ39H6G#HY$fZe zVmM?Gm(_jj@onPNix@7!vYvtGs8cy{ue`2;49Ml0U3mC)?wiiyvM55Zcp|vd(%Y9) z4FPoZ`-({W{Fx~y*n}XftalqJw0F+;8`}kmlUCgNoK7HXM1eQ_x+;V7fht=*$L4w^ zVPq_WTD$-dN|FfcSWDifE}Tx6+@5MIPoV;WOVf_3KCn%j8$a3cc~vks(?o<t-9v(! zXOy2R(dF!JOnSWsL>(e-czZ~ClmO0mbR$Z40u4<!SSDzl5_>0Ywa<T^hJgm&0;ckK zWs=u9q)G4e!>-J8>g(-LxdgUiCHG~CU$-VuyB1(vl{=6l-Qz=-YsdQpBvdoCK-sp} zRApB?nm27t?ElwQ0}-e-XgV`eYxrHWVoV(mG<>utY^~bv6AC-AXx>X{ps<!!9Jerj zl9`$^(QymS7M6MtY#|F%9`6N~(b{=Nd5k<MIL&88%*F%Utml<NghU9(Erq<njpm5b zKMxo=L$%l*e@RM!CP0M~pkU<Df(*b?fZV(Jva}o|dS1V(KB&*Xl?A-6Z>3itp|&gf zbUa&hgI=<dd#soZp0bc_T;Yc!+?G?0^{#RYM_ytIXzDc*a+~!{))YnkWW2LAiZ#O_ zQ|xGC;P2Gs^G5n{NsG8GovsrY{AaV7eSaOj)52~}@^0*M?H?}W@+D)YL5hjg&zsi^ zXC9QllI{O;L4{j{X)xex)VAexf|t@|x=Z9x>6td~2nPO1u9~AJ@hM3EpNZXUCWiKd zZ7E19!URTVi#(=V;Vn!OlQz5chxsPGE_Evu*?gg;HO8~n-L7u)u$N|62My0Nl2<<F z!V$;OA85T!W{7C9V4K4k4k?rm14zaN(dqS_qgv&XQZvQ<H-qEWhP?um0h9vwexi3> z@KHyZFR$9H)e!nv;i46!zfHt-Dyq}Sz?LZxgN%pWvbugry%AnL(j|$@COr?SkVoVX zP!VJsXK>Gz7mS5MQ-Vc_7@4Cqo+k^CA;K!*86sJcKC<=6LB`(h<5^y^P5%^4&E_uH z`5b;t^Vk0yEyVaW5z3Ai*l>Bh+dfb@j#beNQSmdMTN&sn@7L`tsvVi{xcqoevppru z_q0s?lTyr3xylPps`>3p6^4tvxW6-N+%FO3u^LQk9<}Fudi2sWvuEfT)sI+%aHjl} zw?5o+D-_e)B1P+}nH_jooyS`$OWDIhfLK<$Bb(4|t6^j)*5NLwwISIGh9`fhB@-l& zm_(+i*Oxl}><%~SQbdwPu1Fu?9uX?$$OYNyH2yOJx!)qY-b1@<9mW`QDs7a!G);%4 zxc1zK-zT9cu<5S&jngK8p`|1^*SPVcLMFB~G2)B~{?+Jbzi~M|gG%W4UDxMB77Ty@ z7OZ1nOKQhKk65)*Cmu}G^_`Xdg{D{6E|+4ivG`_@UmPbi(y!*k!b1dG!pX34LzMCF zRG7W+?~?N<QW%l%dzPAmh5<Di8TNwY*J>yvXHIK~WaYas#sAAZH9@dcqVVJynQ+~> z(1cw<c9j;#K9>dW#;|I>5+mhj<K2^KAyOQlf%uw{D&xZ&Dp_4H+<8&wxN&I!=GcAk z&B4gK!m{ld9??q*HOf%M5c{-k{w+A-!tL_Kleh*?le&zzaXW&CQhFsZWMKIWUa{9; zIU`NR-lvUeyMmv;t*+*DO0@`<_6h<nE_vLPy(jvLGUoK%H&2IWyd=nBHkAE6jf(1+ zX@J&3yyS>xcuzg&``YKd`F~+QHPkEEb2%NxQyH(Un|MZ^ZIhx+E!!Qsh~m`8R72aP zu9oL2>M(RH<w^P_M-q<hIoEtI7%h3%2mSQNIGOX!j7S9HgTurH<=G2PHEB%QW8~<4 zbW)=A7kns>(hpHQj@(cn=zEIwbCs$@z^vXyIm-IE=GZ)MJqjlddi?bx`wZK(nYnRg z^+d6PQA-4e1#5zDd@cqbg=ZmiJ888P)A6e%FeoqlKa7VK-x5e5HUZI}A%^2L5tFU< zmA`EY1V4zTXp6T>y{eC!I>v-Ey!|<yDqyPaqK%z>5%-_U5-Lb}&r6ozA#1u_z?Pl; z#}{-3fb%BA6!}`Kwl}-n_{z<<<ZB3n-(`b;!}v<Y>_nJz{hBn()=!KpU;oaEg=2FS zz&Vf%DEWUO3Rw4VNR5X#pUPYM3L-s{<6awu?$IH@sQDzm^`xZUu`Y}U5I`vw<LwQS zxUW2+X9+9)FI<7dM%<hed!yicO-BcW5SSGAV<n(GHZ~bPmDesv*(3N64MsJ^S4x+3 zzQutNxi2nul`#BZBkD!!Z4XvBoPNq@BOt<#ta$A4*f6<MwemDw=qyOY?W2ELY?0@) zU1;3mX|5M)yL$Q_rEYOs4Rq;rck=KZX3!Hxzo0vs_r*rTJH+dIf38#iQNokcC4Bnm zu^kVHB&_tHn)*CNh;Rz7%|>iqjn4hQY$kZwbOImWaTfZJj24Vu`IKv?3&RKQbMl`5 z>>{O-*k)|@H=qrSqJ=av5-H67{qt93u6K}p3<b=;czt||UKz^;5I+s<<~H^KB1kJW zNIvi5#Wh~<jE~caWHF7`oUQH2_0xs2r$F%W@>D{n)yK1iHf-iJ`V*X!)kVjW*~{pE zYtSuKA8kmOp(oSq{Bg+L<<BE3wb3=LR0u9(VI1D^H<90}$q#gxKUq;5!g|Rf*+$}V zqBQRS_J1)pF0>z|@k<685Q14d_S}>=35W6EFqu6j#bTb_6oeLTOmPfs1A^pIoQ9^w zP>K`tGsORh;yD3iK;mD*H?c`OZN%&znG)->I&O4f5kbob0nang$BPl9Tg0|5dt%BR zqzLsj(pfz87Iu+$+Fllkm}?xTXOHmIBPw7h?)5zcMMJrocI$^<0erpZZ07edeu`X? zfVg2CE9z)8rt-hIJr&X;Wes_-hXTh3({^FA4DA~oEO09{-a4`j%ME-Uz{mM{u_G^r z?bjT~SUB#~5`Q>O8+qjAqXP_UjDG@86=%B<Vhg~CLb^o4)ag~WJ$9PL_-7h-E1?<; zs9z#s+!wroN)?pS=~Wv0eA3eR-sJc(dX*;I&-oSzQAg<#d$W~=m8rffZ&*eL{)!*- zO|jKrKL}-I7!jYh^DrB?thuD`;hX*$IVaC^tNx{V4LO;V66Ge#!ioMbmxZxDe12Bd z#37y7TyVg062s+hdLdXdCal}8>woi1csl`<DZ{**XXoj_d1!Umy9O?0Zl5cE=il{~ z)i|&k?6n1u0D;|)(`R>9zHMa3SDD(WGa3)B7a%>_BQ;0Hc4Bh=mM5A)rBEb)zaj6t zb&AvjrcInn^rcHqczZFO*C~xuXxKy}1mXLKOxhqg!|E}i-H(C$1uRh+10fGfX82T2 zdNJr(iP)@rWE~d+K~4SxK@GArQ2;g17bKrCqH)>~&v;}%li)1;OwBvzGV_}h8GYsk zw-S-9zxEZbE|5F++NfBMf*T&1_=Qq>Kilq8B@Yf#VDwv=R!n`qxUvyIG)M8~1Fh2s zp0(Df3!lV-i@6(#<g)qOVtTJNS8vpjebw4mwMWjoe5hQN<Buot_ChAvj)V>W%+Hi) z1PO$?J5;_t?eX!ezygMF=*j8-7KClbjQMmHM|8WeU0VH64#A0(EMb-`JJN$oXudMx zQ2u{}BBXmE|6A5f)C>aEg^$&^B<JZ=#i8&+?9@jryhA-7sh=@?-ZMS_19b1ljUb<6 z!?i9jtS~<P6ffNV$=KUBa_V>y*A2V`jy~)6%l}BHbD-CS%I12ktJC4tKJ%NDWy<4L z6Q;hR7(a4uba~xK@uxMaPlp4Ep%z<Om_dYZ7L_Aja{2ZV1|%6^XyDF_=^3XWX3SI? z&Cn}!{ZAd_09eg_jkOF<RIIVC<1-=_Nkv_@=l_A9Z=eK-1W5O3Q}6+jayBLl`DTTN z>eiHG1~_=KkngcJ$DuGNkHMFV%POQ4@4-Qk%Dlcc0^d~)kfMoR959q&bh>kSEDnI) zECyZQe0hTL%D#F7(&@0IAU~XBQu<T;SIZ;S{N3ee8y<dVoAS^5rgv@l<dMT(waGX= z!XWq&072F~)7`exK#Y^(FIDrigAwjN+Y(nIXE(TvIl#R~!(Sb~RHhc{e_`wi3bmGL z;eIj8#R66TF9c11Snr@=A2K?fLCen}pz1%I+PDK1V9#46yY4GSU#Ff>&N6ilYT~t+ zbNmV%*)R7lyFkL8OEFwl11vXuVt~+MhW||sMz(>&A|yQ}4~Wa}Or^@YbJ$8KLC4Be zf({ne{>aXSQ;s{KN0i&SJxA8+&uIpx>E+fapo?DT#Na%ko_A78B5bKTtFth|N>VC4 zABbmPRb`PFq<P-S8b4b-+f-GVdZ$s8Akh-1l4XAm5iko@)PK|Z5~R=_7KKkaL4*0v z2%9}0r9#YL&wV_8p)FpqVOZhL8PU=|4{*$%9r5EIMl_y<*?np(q~t~~9K7u~#p=BN zCUB#Twtmis#t3e1v~!;O3=EUIyVz*|7hnGfoCQr}u~-^~mS*vItgBV7mB^2It+a;v z@R?)-)j7L8ltVL<1@NGpI{KA+Q$!3ZSV-XW5<p1NFrKS$y|`3nh&Rr?H4g%Ng=Xkd zG+;Pb!Tk}Re>qq$7#l-+=HSxESM{aa_tAs|W*|h!8lmsPRuw)!!Udxs<n_w50k6Xc zT7*Ka7;{UMAdzgVyOUc>f$f_RJc~Js&X^?o4q(H{IWsIy&0io<3lC{iSva#Hz=ifb z6($EmhkZI#BD#g&?_ncrl-FxV11sgV$jKA|m~n58nvFr_+RHNV!pOQbHDb(W=Y3cN z>#zoi5l;pt#l$kmr4j|kn)}O!B%>dCfMKq<(o#{y{0wz<1H(END8-ancS#ze#|E(; zl$?_|iAFvmv^T!Eghih&0Qu#g%mcWgK0PicEyKGBs&rR-m*0?vHx|dUnYXqn`n)#^ z;}-lpN87)zF$D3KpVMt%Bv_E#r7<5pQfnN-SLsKD)!(3<#HIC=pLYLXLX94e|JmXI z&CR0DUorS9@+ivtJmA9KYXy&V1J$)qG>{%L_b%AI^w-WedoBCEKiLC;G;)@+rIfeE z{so)sQ%^X$U%d~vx795AnF4BSpzY=-&7t8}!ZS<yUv(&m1g~v0BCMp4o1dQLYDf$& zI#ThgV)~lNyWnq17da2zb^mXZAL1)A&V8S(?zf6kAH;iGv@J-N+mysjw8X1YJFTrf zp0M*NE}YQEs|W+}Ud7sbY<rCTSnO;B$?s(?X4KNVKOT+ckxMZUb)q$pn_A7bcB}tu z<?UceN7mb3Pg$q)UH?TWIzPZtQ(9{5`#?XlH81V{+AaX^uD|-E5RyG&ndTLP*J?fa zkHysLJ!_AT2iO_*)vg1octSTdeV3nkY+0aNrog(-@vQf<-8t8yC(Ps*^+lib<)h!O z4SfnF<(ulInO1ZJh_gLPAG5Oc0%djn!g6ZCqPuLJ(tRGldSV%lYt}A?wi1JugMca7 z3KJdLf65Zej%|d~O^TF`IT!8X63<^1J-`7eyxAWoVY<*d=6d9iZ&2TCc%CV(c%SDG zL~Vx;Iq_zn>QK}ZE)MwBaaiD>cTD|WN^^CWD=e#7*cP$OvXZMmW}`Z7mR9q9IWT}7 zO3cP2*iVafAW+*SeDcnn-88Md-|PLX&ME{?Hx{(z$i3zEZY9s5@>lH0OUo;=_Yt{% zFDhd-FQg||Zzlh#{}4l==pUxM^oT9yGm`O|JwyX>vcR9I=$ZNRg&6v_E%EitzZ#$! zNOXxUVmqM5Z7Ie$r;DX#oF*4J-?lL5NwPNegmwqc>2KvD!ucq7FsL^_wiQ%~cE2z) zy04Im%g8BefT@>FJ{sHUw?mrOAp8xu=)x;aR0@^zvrt5>2XS9Pm9vf?zgN^W4Hmz{ zv~`3Q(yf>=`T`=BRe9>(bjx@(+F|dC=$NTv_{|nemtEDNzGomoj{#jMmYQXx3%`c4 zYEDYG*MH<nN04Y8+gVm3SiV7)Y7JRPIgUd^($YfT`f|~8{vik^>J2b@90`4etb#;! zaZo{r9k;6=?E}(af<=yLYJ31uMMSXkxBK^xAr-ivgY3;DxB0&uHu8Qyy1gB-Uz{x4 zIkqRAzRs5MHCyohC>mePkm%yL{DPR|27NwU{%>R1gCH<^mc-<p1I4iQkkA~Ya4F?@ z$Lw5Bo#aH!!~w$x9On|DXS*%m`cj^VpJ0;Gz9Vyy+Xe{5bjLPY#df+W)!h_AgcwxT z3mKJbtSeprE+dvh&(yU7g%im(w3Ihwbi>Sv{<V4}23<^8zu@C>n``eS8==G%N&BAY z!J?N%qSq8rx@fHHN4opeE9n`l&<dOM=v%Ov$m||p;Stxn7XjGA#CPc+mOL0}w{=b5 z6&FCna%l0|JcMVSJaV_CKn#5(i6$(!xmdfa5rch@Iw*mxE3RVg%asE0-MtsDSAXo> z-7D9}u;>}j3CfP&C>-408iv>Pw=-aR1a*VUX2?0QgraD}M8d?(A@}-C`oGrEGU$a3 zC=(LZh?6rAT%}W!$8y2;^ER;DnHcVyge#|02u0MBB5z1TzPP`;6Ri5c#z9S-D~v4> zc<;bd0?dxNw;lkl3G-Xh_2`JtEEiA9U4JWM<X+@`UO1>N17b$iyCx$a#ezy4`jF=F zs04ZN%q_HpB9B<fUVkgE=--TmQWS;@oj#Fmv3OrMj0G$}!f+9++uHXYkRi4kY)f2- z2T-qwFqDsLu`YK`nIiuO#U5T;i_Qs}T2_a^WT7_{7m?O}91m4IqA+e^23dX=Rd~&w z0Od-8DsjL|WOJ-#Nsz+PwoJ>&KO<`kkJyM1Un$4`an2c5VZqm=zy$nW85+%fU)GGo zw_r?60?PFaiS(c(?n_T@EcQ!9aw*4$M`Jv{i)#J*(g>&@tk?LSLzG*1sV+Opj)F1- zBtPfdUR--Z#KShEAu{`GQR4GQOfJ$xiY^ZL)(j*v)KIY}$WC}dmaK&dnI$m@*&^iK zkZJj~YWSJ%8AU!BCgv4d(uI6+Y{ppVjNeB6>+`&Y;_G}W{KOn2&uKQEyqqrP@i$_R zHgw)Wx$>YANU9d0NGvEAoeRg*!?}tU)}k#F1gBTSXp2Af((`_hc7u~TFx~D~+=M*v zSgqIXtW?Fbd{D(ihQK5K6(YYWH}8zej~b~h6%Kiq=)tI$C8UP{<TJQ+Gx0dBQG32? zUW|ywnEu`O78ilsXMfLbwfE`|%gMIo4EN}cj{SX&DC~!uInmp#A?yAtzGj~t>e7y| za%1kg(~>s}5X&9g5Yg3bYpDFiR}V8;s7AYB!%kjzYFS8~+l-~gHP-m|MVQP=U9>jd zMSCfQZl>P6WbmsoKf+;ne*UU`{Zv|4>Z1Pib6u_7XzeZ!&Glac^~N%{qsJxBuQ!K> z92?8sMh*Bef&A6Xl(&9cVXU8K{T%kYL^6yd7JueZ#`#@$8z?lKEMqj-%Mr{Ue@rrn z4!wcs;)((VLEuJqSgT2Z=}oEhT%+ma^V44pCySD<5%o@|e-_tvKRiAP)4~KYL^Vzv z4LA)fUsQMJRTRA}8qW|_g&DMGbBC5BfTxyERHgsTQ~i$8K;)^&!0_=xCCdOJDNWse z;44=N%dX#AMke{+;e+Z?^%Iw$Z%byk@OA8Hdj)qLq%(V;7aZO)I8rX1)Sg|dNhR&8 z;(NY5*A%C$yH1)c4NK$_GjQ1KhPSw=W*h7lh>+7`hWPKR*OzyQ%Nt*wkq18pKs;ae zoyLY2^xj823OM<mNuG8XzT|;;i87TC^^>*w$pb;c66|8E_74(n2kbW;yK7KTq)Q$k z7p+W#l;Zp&ycpBieRF(Ij!9WN14DJb68i?_gqOlQWcdrpTDS%d;{&+$vW5*10G6b$ zE*4XRNV3}ouQh7)k9joj)9~>??R)v(*_93LQISpaWVnEa`TZOAi$Gbqparc6NF)Sj z!MQV46|a&gaEAemW~z2Ur*IB1;=@n3aS|0^W;4kd^85o267GH^!2n|-2fww~CKbw8 z!*Q+X3>xZ7$q-KCu>0*?2vKiwuONIg;B(H>J%naG!1KirAa!6iNgGB^zOjKYa!=zF zSovY_Lo@-R-DO4-j#Tz;6N4k~Ovd@gbRucJEHIB67~$7}_}g!g4Mb_8#5`ROSb=$9 zQO+2T5TbxBB$T<;#ubsxg~V@))WQKVJ@e;6<6(EvFh=oZb2nKGl}@O`3cwCoNAECG zYYKcH1*dn8<3Zg;n3C7tt@DLyse@8AM8e>$EcrOVr-#V-z&}Fy)WocMIzjg|ahikl zeS$fawPS8{JBlJdJ%tst03@E%R_kx@mdlMX5rOxPt8Uxf;1&BI5&$=w=cEga>^YWc z`JnYp^M1Q_U?H~on!^$Z8%qHdCDR%rm%aZUV7!X^8sqgFb?;WV6BixUYCJ;#nC~_) ziR#9w0-U>-?AONS$j=oRb<7LF3xU7*meL5mhk6^n^krmK)JB%&Z6_mpOH+%Xx4Vp2 zA;0pI_8>!?z;~NVCqoS60>&8V=>KX^@)Y#Qe9!B}<^<leAk9r*F*?6;WVHdt$@Iha zO3jH21hb828F_%vSQ>cH0})IfC`^;lu%Y2~UtF_mgz{3L=m4^P&S`-wyhyh<0AM07 zMhexJ@OU?1(j%dXSZJ5Vz+qxGd`%mCEL5Zg9uQBjw>`}5?hVP+PqO(m_O({KF@{F5 zd`T~hLy?vimNaZ*2RY0Z%@=p8<r`S&TseK=opmz^T28_vHj{D3I=+WU0Mx(kuDI=C z+R`D209nq3WrH>2(<>bcMKw7W9ENMeVR}CRjHrEU8aZJm%7u+Pp`j)}Ev%ag#%*-G zya%W^i@_-y%x6P3A;+KVDe~5kJ=YXU(y2UZ-n?*NQC2q;)>s*XNy%QB#_z>&5JiH7 z`AOG3IGjV&kWLN@Sp3lvIcQphPN0n##lH8Jl$L>9J67npOkJ}p*o?dY2_qUsg^wrP z>OMTu!Zl+>Y0esm(Rr66&kc~EgXrWum9kT=Fp=7DL&fumQX4xh3j%{HENt7|WoD}! z6^0QWK#m~d)y&(?!DDc~w%C|Oqt#&P^_d!DxfsAgWVA3voEQcs9>qnh1VTQWV7z4? zhS|zIr|5qslk<pl(~%<fwdatmpt`qzyqd`r$eNB;tn=gdI9kb|9C-XW5E1h@%QOR! zUn}dsl1{=7WNrfQp)Q&l3Tcmn#t$Rv4YS4IT=4MX!ArbN2>cmiVUHhoo`os}M<9M8 z5qxKZ)cC!#;S&HW)<90dX?tIkE})wluSHW)x5Il&<Ds6~!tI~kCxcDm2h`rY_`;N^ zwoN(Eff88pd`^0U664)|LWO{`@ghkBfHhcvBI9wsD3nD1CNzpGn1fwL01FNWS4)Hk z%N*Rt!`7e?FFqtxt58l1*Puzo78R&BAH5XEWB@)V|Au^M7v@k)V8rMLMUk<iG&djr zJ944AO`zpvPFNUEvOscpc^1-86d%s%iRy}Yw_a7R5wWDRb}OTXtCB6yCx5IabVU9Y z4~L+z_g2Fc#$uNNiIio=Cr0MBfO4W-A+RPHFCN+tfI8?@^`hG{NXb43hRD`Y#byF0 zxZo&`>HF$+b?IN@kvgBzb5YNdtkKIMJ8^^HCq0FbN6okUOGH$EZeD57$hey_6!I|W z?E_`$5v=|3r?8cz7FJ2e7c*Ym$2;jnQhHf_cUa0eqM5}$U0M3e40I(;UI&Hc)h4jN zzzRjJu;wf0v-nlvmkye5-IEXS4})fz!*LrA1IQ|vBxbpJ7|xB&W>?`YZ(4NJ=&|Fm z&<FMI!zFj=PF^SkS@1Y7sD(Pa(BgM8Khj34sGc(Yk^a@I>+i8zpw6OLEja>6aH}bn z8l2=RP^DyWu6$?RadY>#)MP_l-ldS^dM39p&Z1^ScrmR6h2o8c%zkg!^I=!SMyv`Z zFvX#OFAta*O6JKw4Ar^;vPrGaI80IiRQP)^AVFow$NbpnLkpr%`StoP#Qc*QAed&d z4>%9_b0}s>VbOEop)roA)0h2P6JyCLF=2NWOG0|TmiJuC>u=N$@grXjiBu%>Nz$zQ zGtt@RQMO2gu?Wut0WU>>3NQ8)znAu5a*Ur&$K2StYqUwB8nh)HM-!*xs}vbRlJYaH z;^)TC??4IAo&hij(Mo{${ary;Z=FpEmFP*7>oF$oOG=#&5ncbY<n8U%C60=Ngh#x= ziM%eE`w|kSf-eDkb9O4I64^(mKLp^45hGhuvPoK$o*f<3x(@T-weFP;ph#w5%@?Zr zIHeLi)nN0{-#qV^v-_qdZ1apx&1DHY1nx0>+bXVJJ|B5wk}Tug2E2UrR^Yfyvw^VD zZuxQ88yuLAv0m4kY;M`*gk0n>??(*7Rg1k#g04I7)|gM^5wtaud#@Qm@)d^SagD7F zmGjKbrDD^>`B1_E#Y*lJK(^gdjuSI-IdI?j_e10{D>kx&<#hRW88<@^?@g}M%>ss= z=O8h@jdu6rkp{-M&E5h0`;1>yBGvq}q-u61U3NNZ{V{>KZzB{D_Pl}4d-v1?h~R@| zu7(TnuaU#aYirImqrYz(b~@EL(2H-Nie27y>Z$y2Tvkx-@Z7I%0Aq>mg5HA5+U(Sr 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	sqnchBbL73NGdyfcr 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 B(@p>Y literal 0 HcmV?d00001 diff --git a/react-ui/public/logo.svg b/react-ui/public/logo.svg new file mode 100755 index 000000000..b7f71bd90 --- /dev/null +++ b/react-ui/public/logo.svg @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with Vectornator (http://vectornator.io/) --> +<svg height="100%" stroke-miterlimit="10" style="fill-rule:nonzero;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;" version="1.1" viewBox="0 0 113.4 212.625" width="100%" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:vectornator="http://vectornator.io" xmlns:xlink="http://www.w3.org/1999/xlink"> +<defs> +<radialGradient cx="170.235" cy="146.046" gradientTransform="matrix(1.00001 -8.65109e-05 8.65119e-05 1 -115.465 -116.986)" gradientUnits="userSpaceOnUse" id="RadialGradient" r="217.591"> +<stop offset="0" stop-color="#c456f7"/> +<stop offset="1" stop-color="#34054a"/> +</radialGradient> +<filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="209.692" id="Filter" width="111.957" x="0.722269" y="2.46642"> +<feDropShadow dx="-4.37114e-08" dy="1" flood-color="#050505" flood-opacity="1" in="SourceGraphic" result="Shadow" stdDeviation="1"/> +</filter> +</defs> +<g id="Layer-1" vectornator:layerName="Layer 1"> +<path d="M35.1413 3.47016L35.1416 6.93891L27.1415 6.93961L27.1464 63.3771C21.6096 65.0011 16.4869 67.0445 12.2717 69.6596C-9.35807 83.0789 12.5182 123.232 12.5264 123.222C12.5341 123.213 12.5498 123.2 12.5576 123.191C13.1518 124.609 14.5144 125.761 16.5579 126.534C18.7737 127.372 21.8204 127.855 26.8082 128.408C25.0644 132.318 24.4639 137.732 25.3409 144.846C26.0816 150.854 28.2327 155.309 32.5924 161.533C32.9615 162.06 34.1761 163.796 34.3427 164.033C35.013 164.984 35.5416 165.705 35.9991 166.408C38.1084 169.647 39.1319 172.149 39.3124 174.814C39.3701 175.665 39.3355 180.513 39.251 187.751C39.2362 189.024 39.0999 200.614 39.0959 200.907C37.7122 201.653 36.7523 203.069 36.7525 204.751C36.7527 207.19 38.7205 209.157 41.1591 209.157C43.5978 209.157 45.5653 207.189 45.5651 204.751C45.5649 203.019 44.5477 201.568 43.096 200.844C43.1023 200.341 43.2363 189.045 43.2511 187.782C43.3388 180.268 43.3816 175.583 43.3124 174.563C43.0775 171.096 41.7912 168.012 39.3427 164.251C38.854 163.5 38.3197 162.708 37.6237 161.72C37.4507 161.474 36.2342 159.766 35.8735 159.251C31.8564 153.517 29.9529 149.563 29.3096 144.346C28.2621 135.848 29.4895 130.5 32.027 127.533C32.6413 126.815 33.2789 126.306 33.9019 125.97C34.2334 125.792 34.4442 125.7 34.4956 125.689C35.5735 125.448 36.2365 124.392 35.9954 123.314C35.7543 122.236 34.6982 121.542 33.6202 121.783C33.2264 121.871 32.6655 122.078 31.9953 122.439C31.0669 122.939 30.1635 123.734 29.3079 124.658C23.0392 124.019 20.0922 123.577 17.9951 122.784C16.1482 122.086 15.9773 121.63 16.7137 120.347C25.511 115.923 43.9287 113.157 55.0885 113.156C63.8081 113.155 79.7952 116.873 90.4333 119.622C93.9977 120.542 94.7294 120.755 96.621 121.277C94.2649 123.034 89.4439 124.738 83.3087 125.247C83.0835 125.266 82.9434 125.443 82.7462 125.529C82.6074 125.348 82.5171 125.106 82.3711 124.935C81.4271 123.831 80.3863 122.999 79.3396 122.435C78.6693 122.074 78.1085 121.867 77.7145 121.779C76.6365 121.538 75.5805 122.233 75.3396 123.31C75.0987 124.388 75.7619 125.444 76.8399 125.685C76.8913 125.697 77.1021 125.788 77.4337 125.967C78.0567 126.302 78.6942 126.81 79.3088 127.529C81.8468 130.496 83.0751 135.844 82.029 144.341C81.3867 149.559 79.4839 153.513 75.4678 159.248C75.1071 159.763 73.8909 161.471 73.7179 161.717C73.0221 162.705 72.488 163.498 71.9994 164.248C69.5516 168.009 68.2658 171.094 68.0315 174.561C67.9625 175.581 68.0061 180.266 68.0951 187.78C68.1102 189.055 68.2793 200.673 68.2838 200.967C66.9421 201.725 66.0027 203.098 66.0028 204.749C66.0031 207.187 67.9709 209.155 70.4095 209.155C72.8481 209.154 74.8156 207.187 74.8154 204.748C74.8153 202.975 73.7598 201.482 72.2526 200.779C72.2461 200.277 72.1101 189.009 72.0952 187.748C72.0095 180.511 71.974 175.662 72.0316 174.811C72.2116 172.146 73.2659 169.644 75.3746 166.404C75.8321 165.701 76.3292 164.981 76.9994 164.029C77.1659 163.793 78.3803 162.056 78.7492 161.529C83.1079 155.305 85.2582 150.849 85.9979 144.841C86.8306 138.077 86.2654 132.917 84.7153 129.06C93.073 128.178 99.944 125.471 101.777 121.527C105.258 116.592 120.674 81.4184 100.46 69.1833C96.4145 66.7344 91.6503 64.7196 86.3971 63.1845L86.3922 6.93448L78.3609 6.93517L78.3606 3.46642L35.1413 3.47016ZM31.1419 10.9393L39.1107 10.9386L39.3309 27.9386C39.3406 28.6841 39.9605 29.2606 40.7061 29.2509C41.4516 29.2413 42.0593 28.6214 42.0497 27.8758L41.7983 10.9383L44.517 10.9381L44.7998 27.9381C44.8108 28.6836 45.3981 29.2615 46.1436 29.2505C46.8892 29.2394 47.4983 28.6209 47.4873 27.8753L47.2358 10.9379L49.9546 10.9376L50.2061 27.9376C50.2169 28.6831 50.8357 29.2608 51.5812 29.25C52.3267 29.2392 52.9044 28.6203 52.8936 27.8749L52.6421 10.9374L55.3609 10.9372L55.6124 27.9371C55.623 28.6827 56.242 29.2601 56.9875 29.2495C57.733 29.2389 58.3418 28.6199 58.3312 27.8744L58.0797 10.9369L60.8297 10.9367L61.05 27.9367C61.0546 28.3094 61.2147 28.6381 61.4563 28.8741C61.6979 29.1102 62.0211 29.2537 62.3938 29.2491C63.1394 29.2398 63.7468 28.6194 63.7375 27.8739L63.5173 10.9365L66.2986 10.9362L66.4875 27.905C66.4957 28.6505 67.1171 29.2568 67.8627 29.2486C68.6082 29.2404 69.1834 28.6503 69.1751 27.9047L68.9861 10.936L71.7674 10.9357L71.9564 27.9357C71.9605 28.3085 72.1132 28.6372 72.3627 28.8732C72.6122 29.1091 72.9587 29.2523 73.3315 29.2481C74.077 29.2398 74.6833 28.6498 74.6751 27.9042L74.4862 10.9355L82.3925 10.9348L82.3969 62.2473C78.1953 61.2363 73.8195 60.4151 69.2716 59.936L69.0841 59.936L69.0846 65.9672L62.3352 73.3116L62.211 82.5928L62.212 94.7803L56.5244 94.7808L50.3056 94.7814L50.2733 82.9376L50.1163 73.3126L43.1468 65.8132L43.1463 60.0945L31.1463 62.3455L31.1419 10.9393ZM46.0197 41.188L45.9904 64.3755L52.9599 71.8749L53.1492 91.9374L59.368 91.9368L59.5225 71.8743L66.2407 64.5612L66.2387 41.3425L46.0197 41.188ZM45.5578 121.282C45.0484 121.232 44.5158 121.369 44.0891 121.719C43.2356 122.421 43.1382 123.71 43.8394 124.563C43.8712 124.602 43.9181 124.67 44.0269 124.813C44.2163 125.062 44.4521 125.354 44.6832 125.688C45.3494 126.65 45.998 127.755 46.621 128.938C48.9603 133.379 50.0248 137.836 49.1222 141.875C48.4351 144.95 46.6061 147.711 43.4353 150.126C43.1568 150.338 42.1644 150.942 40.7792 151.751C40.6905 151.803 37.4839 153.662 37.4356 153.689C36.4728 154.23 36.1131 155.445 36.6545 156.408C37.1959 157.37 38.4106 157.699 39.3734 157.157C39.4251 157.128 42.7199 155.272 42.8108 155.22C44.3781 154.304 45.4057 153.669 45.8731 153.313C49.7829 150.336 52.1324 146.76 53.0285 142.75C54.1746 137.622 52.9238 132.266 50.1834 127.063C49.4811 125.729 48.7181 124.526 47.9643 123.438C47.5056 122.775 47.1244 122.271 46.9017 122C46.5511 121.574 46.0673 121.332 45.5578 121.282ZM65.7769 121.28C65.2675 121.33 64.7837 121.572 64.4331 121.999C64.2105 122.27 63.8293 122.774 63.3708 123.436C62.6172 124.525 61.8858 125.728 61.1835 127.062C58.444 132.265 57.163 137.621 58.3099 142.749C59.2067 146.759 61.5569 150.335 65.4671 153.311C65.9346 153.667 66.9935 154.302 68.5611 155.217C68.6519 155.27 71.9158 157.125 71.9675 157.154C72.9304 157.696 74.145 157.367 74.6862 156.404C75.2275 155.441 74.8676 154.227 73.9048 153.686C73.8565 153.658 70.6495 151.8 70.5608 151.748C69.1754 150.939 68.1829 150.336 67.9044 150.124C64.7332 147.71 62.9036 144.948 62.2161 141.874C61.3128 137.835 62.3766 133.378 64.715 128.936C65.3378 127.753 65.9862 126.649 66.6522 125.686C66.8833 125.352 67.1191 125.06 67.3084 124.811C67.4172 124.668 67.4953 124.6 67.5272 124.561C68.2282 123.708 68.0992 122.418 67.2457 121.717C66.8189 121.367 66.2862 121.23 65.7769 121.28ZM28.3735 160.064C27.8641 160.114 27.3492 160.357 26.9985 160.783C24.0604 164.358 22.5881 168.723 22.5621 174.253C22.5614 174.404 22.6311 200.839 22.627 200.877C21.1966 201.608 20.1896 203.036 20.1898 204.753C20.19 207.191 22.1578 209.159 24.5964 209.159C27.0351 209.158 29.0026 207.191 29.0024 204.752C29.0022 203.061 28.0235 201.65 26.627 200.908C26.6562 200.425 26.6538 197.055 26.6259 187.658C26.6229 186.662 26.5615 174.385 26.5622 174.252C26.584 169.618 27.7563 166.157 30.0925 163.314C30.7939 162.461 30.6644 161.203 29.811 160.502C29.3844 160.151 28.8829 160.015 28.3735 160.064ZM82.9679 160.06C82.4585 160.01 81.9571 160.147 81.5304 160.497C80.6772 161.199 80.5479 162.457 81.2494 163.31C83.5862 166.152 84.7591 169.613 84.7817 174.247C84.7823 174.378 84.7241 199.67 84.7527 200.841C83.3011 201.564 82.2529 203.015 82.253 204.747C82.2533 207.186 84.2524 209.153 86.691 209.153C89.1295 209.153 91.0971 207.185 91.0969 204.747C91.0967 203.049 90.1265 201.611 88.7215 200.872C88.7173 200.833 88.7318 194.753 88.7516 187.684C88.7544 186.688 88.7824 174.398 88.7817 174.247C88.7548 168.717 87.2817 164.353 84.343 160.778C83.9922 160.352 83.4774 160.109 82.9679 160.06Z" fill="url(#RadialGradient)" fill-rule="nonzero" filter="url(#Filter)" stroke="none" vectornator:shadowAngle="1.5708" vectornator:shadowColor="#050505" vectornator:shadowOffset="1" vectornator:shadowOpacity="1" vectornator:shadowRadius="2"/> +</g> +</svg> diff --git a/react-ui/public/manifest.json b/react-ui/public/manifest.json new file mode 100755 index 000000000..641e73d58 --- /dev/null +++ b/react-ui/public/manifest.json @@ -0,0 +1,20 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo.png", + "type": "image/png", + "sizes": "400x400" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/react-ui/public/robots.txt b/react-ui/public/robots.txt new file mode 100755 index 000000000..e9e57dc4d --- /dev/null +++ b/react-ui/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/react-ui/scripts/build.sh b/react-ui/scripts/build.sh new file mode 100755 index 000000000..fb6cb2a21 --- /dev/null +++ b/react-ui/scripts/build.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env sh + +IMAGE=node:23-alpine3.20 + +docker run --rm \ + -v $(pwd):/app \ + -w /app \ + -u $(id -u):$(id -g) \ + $IMAGE \ + yarn && yarn build + +if [ $? -ne 0 ]; then + echo "Error while building frontend app" + exit 1 +fi + +echo "Build successfully in $(pwd)/dist" diff --git a/react-ui/scripts/dev.sh b/react-ui/scripts/dev.sh new file mode 100755 index 000000000..3a2d20885 --- /dev/null +++ b/react-ui/scripts/dev.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env sh + +docker run \ + -it \ + --rm \ + -v $(pwd):/app \ + -w /app \ + -p 127.0.0.1:3000:3000 \ + --network gosdn-csbi-arista-base-net \ + node:20-alpine3.20 \ + npx vite diff --git a/react-ui/scripts/openapi-config.json b/react-ui/scripts/openapi-config.json new file mode 100755 index 000000000..e999a3cf7 --- /dev/null +++ b/react-ui/scripts/openapi-config.json @@ -0,0 +1,11 @@ +{ + "schemaFile": "../../api/openapiv2/gosdn_northbound.swagger.json", + "apiFile": "../src/stores/api.store.ts", + "apiImport": "emptySplitApi", + "outputFile": "../src/shared/api/api.ts", + "exportName": "api", + "hooks": true, + "nullSafeAdditionalProps": true, + "withInterfaces": true, + "tag": true +} diff --git a/react-ui/src/.prettierrc b/react-ui/src/.prettierrc new file mode 100644 index 000000000..222861c34 --- /dev/null +++ b/react-ui/src/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 2, + "useTabs": false +} diff --git a/react-ui/src/components/devices/reducer/device.reducer.ts b/react-ui/src/components/devices/reducer/device.reducer.ts new file mode 100755 index 000000000..812c416f8 --- /dev/null +++ b/react-ui/src/components/devices/reducer/device.reducer.ts @@ -0,0 +1,147 @@ +import { + NetworkelementFlattenedManagedNetworkElement, + NetworkelementManagedNetworkElement, + PndPrincipalNetworkDomain +} from '@api/api' +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import { refreshUpdateTimer } from '@shared/reducer/routine.reducer' +import { Category, CategoryType } from '@shared/types/category.type' +import { REHYDRATE } from 'redux-persist' +import { RootState } from 'src/stores' +import '../routines/index' +import { startListening } from '/src/stores/middleware/listener.middleware' + +export type Device = NetworkelementFlattenedManagedNetworkElement + +interface SelectedObject { + device: Device + mne: NetworkelementManagedNetworkElement | null +} + +export interface DeviceSliceState { + devices: Device[] + pnds: PndPrincipalNetworkDomain[] + + selected: SelectedObject | null +} + +const initialState: DeviceSliceState = { + devices: [], + pnds: [], + selected: null, +} + +interface SetSelectedDeviceType { + device: Device | null, + options?: { + bypassCheck: boolean + } +} + +const deviceSlice = createSlice({ + name: 'device', + initialState, + reducers: { + setDevices: (state, action: PayloadAction<Device[] | undefined>) => { + state.devices = action.payload || [] + }, + setPnds: (state, action: PayloadAction<PndPrincipalNetworkDomain[] | undefined>) => { + state.pnds = action.payload || [] + }, + setSelectedDevice: { + reducer: (state, { payload, meta }: PayloadAction<SetSelectedDeviceType, string, { skipListener?: boolean }>) => { + /** + * Do nothing if desired device is already selected + * Bypass the check if the flag is set to true. We + * use this bypass to trigger the listener functions + * accordingly + */ + if (!payload?.options?.bypassCheck && state.selected?.device.id === payload.device?.id) { + meta.skipListener = true + return + } + + if (!payload.device) { + throw Error('Passed null device as parameter while bypassing the safety check') + } + + let selectedObject: SelectedObject | null = null; + if (payload) { + selectedObject = { device: payload.device, mne: null, json: null } + } + + state.selected = selectedObject + }, + prepare: (payload) => { + return { + payload, + meta: { skipListener: false } + } + } + }, + setSelectedMne: (state, action: PayloadAction<NetworkelementManagedNetworkElement>) => { + if (!state.selected) { + throw new Error('Can not find corresponding device') + } + + // safety check to prevent possible race conditions + if (state.selected.device.id !== action.payload.id) { + // TODO proper error handling by retry fetching the device object + throw new Error('Device and mne id does not match') + } + + state.selected.mne = action.payload + }, + }, +}) + +export const { setDevices, setSelectedDevice, setSelectedMne, setPnds } = + deviceSlice.actions + +export default deviceSlice.reducer +export const deviceReducerPath = deviceSlice.reducerPath + +// add default selected device if no selected device is set +startListening({ + predicate: (action) => setDevices.match(action), + effect: async (action, listenerApi) => { + const { device: state } = listenerApi.getOriginalState() as RootState + if (state.selected) { + return + } + + // if there are no devices available do set null + const device = action.payload?.[0] || null + listenerApi.dispatch(setSelectedDevice({ device } as SetSelectedDeviceType)) + }, +}) + +startListening({ + predicate: (action) => setSelectedMne.match(action), + effect: async (action, listenerApi) => { + listenerApi.dispatch(refreshUpdateTimer(Category.TAB as CategoryType)) + }, +}) + +startListening({ + predicate: (action) => setDevices.match(action), + effect: async (action, listenerApi) => { + listenerApi.dispatch(refreshUpdateTimer(Category.DEVICE as CategoryType)) + }, +}) + +/** + * On startup reset the selected device + */ +startListening({ + predicate: ({ type }: any) => type === REHYDRATE, + effect: async (_, listenerApi) => { + const { device: state } = listenerApi.getState() as RootState + const device = state.selected?.device + if (!device) { + return + } + + listenerApi.dispatch(setSelectedDevice({ device, options: { bypassCheck: true } } as SetSelectedDeviceType)) + }, +}) \ No newline at end of file diff --git a/react-ui/src/components/devices/reducer/plugin.reducer.ts b/react-ui/src/components/devices/reducer/plugin.reducer.ts new file mode 100644 index 000000000..f11f24477 --- /dev/null +++ b/react-ui/src/components/devices/reducer/plugin.reducer.ts @@ -0,0 +1,46 @@ +import { + NetworkelementFlattenedManagedNetworkElement, + NetworkelementManagedNetworkElement, + PluginRegistryPlugin +} from '@api/api' +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import '../routines/index' + +export type Device = NetworkelementFlattenedManagedNetworkElement + +interface SelectedObject { + device: Device + mne: NetworkelementManagedNetworkElement | null + json: JSON | null +} + +export interface PluginSliceState { + plugins: Array<PluginRegistryPlugin> +} + +const initialState: PluginSliceState = { + plugins: [], +} + +interface SetSelectedDeviceType { + device: Device | null, + options?: { + bypassCheck: boolean + } +} + +const pluginSlice = createSlice({ + name: 'plugins', + initialState, + reducers: { + setPlugins: (state, action: PayloadAction<PluginRegistryPlugin[] | undefined>) => { + state.plugins = action.payload || [] + }, + }, +}) + +export const { setPlugins } = + pluginSlice.actions + +export default pluginSlice.reducer +export const pluginReducerPath = pluginSlice.reducerPath diff --git a/react-ui/src/components/devices/routines/device.routine.ts b/react-ui/src/components/devices/routines/device.routine.ts new file mode 100755 index 000000000..058f65f9f --- /dev/null +++ b/react-ui/src/components/devices/routines/device.routine.ts @@ -0,0 +1,59 @@ +import { NetworkElementServiceGetAllFlattenedApiArg, api } from '@api/api' +import { setDevices } from '@component/devices/reducer/device.reducer' +import { createAsyncThunk } from '@reduxjs/toolkit' +import { addRoutine } from '@shared/reducer/routine.reducer' +import { setUser } from '@shared/reducer/user.reducer' +import { Category, CategoryType } from '@shared/types/category.type' +import { RootState } from 'src/stores' +import { startListening } from '../../../stores/middleware/listener.middleware' + +export const FETCH_DEVICE_ACTION = 'subscription/device/fetchDevices' + +// continously fetch devices +startListening({ + actionCreator: setUser, + effect: async (_, listenerApi) => { + listenerApi.dispatch( + addRoutine({ + thunk: fetchDevicesThunk, + category: Category.DEVICE as CategoryType, + payload: {}, + }) + ) + }, +}) + +const FETCH_DEVICES_INTERVAL = 15000 // in ms +export const fetchDevicesThunk = createAsyncThunk(FETCH_DEVICE_ACTION, (_, thunkApi) => { + const { user } = thunkApi.getState() as RootState + + if (!user.user?.roles) { + throw new Error('Background device fetching failed! User data is missing. Reload page or logout and login again') + // TODO + } + + const payload: NetworkElementServiceGetAllFlattenedApiArg = { + pid: Object.keys(user.user.roles)[0], + timestamp: new Date().getTime().toString(), + } + + const subscription = thunkApi.dispatch( + api.endpoints.networkElementServiceGetAllFlattened.initiate(payload, { + subscriptionOptions: { + pollingInterval: FETCH_DEVICES_INTERVAL, + skipPollingIfUnfocused: true, + }, + }) + ) + + return subscription +}) + +// save fetched devices +startListening({ + predicate: (action) => + api.endpoints.networkElementServiceGetAllFlattened.matchFulfilled(action), + effect: async (action, listenerApi) => { + listenerApi.dispatch(setDevices(action.payload.mne)) + }, +}) diff --git a/react-ui/src/components/devices/routines/index.ts b/react-ui/src/components/devices/routines/index.ts new file mode 100755 index 000000000..5fd5267a2 --- /dev/null +++ b/react-ui/src/components/devices/routines/index.ts @@ -0,0 +1,3 @@ +import './device.routine'; +import './mne.routine'; + diff --git a/react-ui/src/components/devices/routines/mne.routine.ts b/react-ui/src/components/devices/routines/mne.routine.ts new file mode 100755 index 000000000..8f75e3a64 --- /dev/null +++ b/react-ui/src/components/devices/routines/mne.routine.ts @@ -0,0 +1,84 @@ +import { api, NetworkElementServiceGetApiArg } from '@api/api' +import { + Device, + setSelectedDevice, + setSelectedMne +} from '@component/devices/reducer/device.reducer' +import { createAsyncThunk } from '@reduxjs/toolkit' +import { addRoutine } from '@shared/reducer/routine.reducer' +import { Category, CategoryType } from '@shared/types/category.type' +import { RootState } from 'src/stores' +import { startListening } from '../../../stores/middleware/listener.middleware' + +export const FETCH_MNE_ACTION = 'subscription/device/fetchSelectedMNE' + +/** + * #0 + * Trigger fetch MNE (#1) + * + * Triggered by a selectedDevice + */ +startListening({ + predicate: (action) => setSelectedDevice.match(action) && !!action.payload.device && !action.meta?.skipListener, + effect: async (action, listenerApi) => { + + const device = action.payload.device + + listenerApi.dispatch( + addRoutine({ + thunk: fetchSelectedMneThunk, + category: Category.TAB as CategoryType, + payload: device, + }) + ) + }, +}) + +/** + * #1 + * Fetch MNE + * + * Triggered by #0 + */ +const FETCH_MNE_INTERVAL = 5000 // in ms +export const fetchSelectedMneThunk = createAsyncThunk( + FETCH_MNE_ACTION, + 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], + timestamp: new Date().getTime().toString(), + mneid: device.id, + } + + const subscription = thunkApi.dispatch( + api.endpoints.networkElementServiceGet.initiate(payload, { + subscriptionOptions: { + pollingInterval: FETCH_MNE_INTERVAL, + skipPollingIfUnfocused: true, + }, + }) + ) + + return { ...subscription } + } +) + +/** + * #2 + * Received MNE + * + * Triggered by #1 + */ +startListening({ + predicate: (action) => api.endpoints.networkElementServiceGet.matchFulfilled(action), + effect: async (action, listenerApi) => { + listenerApi.dispatch(setSelectedMne(action.payload.mne)) + }, +}) diff --git a/react-ui/src/components/devices/routines/plugin.routine.ts b/react-ui/src/components/devices/routines/plugin.routine.ts new file mode 100644 index 000000000..91acc0fef --- /dev/null +++ b/react-ui/src/components/devices/routines/plugin.routine.ts @@ -0,0 +1,36 @@ +import { api, PluginInternalServiceAvailablePluginsApiArg } from "@api/api" +import { warnMessage } from "@helper/debug" +import { createAsyncThunk } from "@reduxjs/toolkit" +import { RootState } from "src/stores" +import { setPlugins } from "../reducer/plugin.reducer" + +const FETCH_PLUGIN_ACTION = 'subscription/plugin/fetchPlugins' + + +export const fetchPluginsThunk = createAsyncThunk( + FETCH_PLUGIN_ACTION, + async (_, thunkApi) => { + const { user } = thunkApi.getState() as RootState + + if (!user.user?.roles) { + warnMessage('Plugin fetch was triggered but user data is not presence') + return + } + + const payload: PluginInternalServiceAvailablePluginsApiArg = { + timestamp: new Date().getTime().toString(), + } + + + const plugins = await thunkApi.dispatch(api.endpoints.pluginInternalServiceAvailablePlugins.initiate(payload)) + + if (plugins.error || !plugins.data?.plugins) { + warnMessage('Plugin fetch returned an error: ' + plugins.error) + return + } + + thunkApi.dispatch( + setPlugins(plugins.data?.plugins) + ) + } +) \ No newline at end of file diff --git a/react-ui/src/components/devices/view/boxes/devices.box.view.tsx b/react-ui/src/components/devices/view/boxes/devices.box.view.tsx new file mode 100755 index 000000000..0204f9707 --- /dev/null +++ b/react-ui/src/components/devices/view/boxes/devices.box.view.tsx @@ -0,0 +1,142 @@ +import { useDeviceBoxViewModel } from '@component/devices/view_model/device.box.viewmodel' +import { faPlus } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { insertMarkTags } from '@helper/text' +import { Scrollbar } from '@shared/components/scrollbar/Scrollbar.view' +import DOMPurify from 'dompurify' +import { RefObject, useCallback } from 'react' +import { Button, Col, Form, OverlayTrigger, Row, Tooltip } from 'react-bootstrap' +import { useTranslation } from 'react-i18next' +import { Device } from '../../reducer/device.reducer' +import AddDeviceModal from '../subcomponent/modal.view' + +export const DeviceList = ({ searchRef }: { searchRef: RefObject<HTMLInputElement> }) => { + const { t } = useTranslation('common') + const { + filteredDevices, + handleItemClick, + selectedDevice, + pnds, + addModal, + openAddModal, + closeModal, + searchValue, + handleSearch, + } = useDeviceBoxViewModel(searchRef) + + const cropUUID = (uuid: string): string => { + return uuid.substring(0, 3) + '...' + uuid.substring(uuid.length - 3, uuid.length) + } + + const renderDeviceItem = useCallback( + (device: Device) => { + const user = pnds.find(pnd => pnd.id === device.pid) + const username = user?.name || '' + const deviceId = device.id! + const croppedId = cropUUID(deviceId) + const devicename = device.name || '' + const isSelected = selectedDevice?.device.id === deviceId + + return ( + <div + key={deviceId} + className={`border-bottom border-primary p-2 transitions ${ + isSelected && 'bg-gradient-fade py-2' + } ${!isSelected && 'text-disabled disabled-hover'}`} + onClick={() => handleItemClick(device)}> + <Row className="align-items-center clickable"> + <Col xs={12} sm={5}> + <span + dangerouslySetInnerHTML={{ + __html: searchValue + ? insertMarkTags(devicename, searchValue) + : DOMPurify.sanitize(devicename), + }} + /> + </Col> + <Col xs={12} sm={3}> + <OverlayTrigger overlay={<Tooltip id={deviceId}>{deviceId}</Tooltip>}> + <span + className="text-gray-500" + dangerouslySetInnerHTML={{ + __html: searchValue + ? insertMarkTags(croppedId, searchValue) + : DOMPurify.sanitize(croppedId), + }} + /> + </OverlayTrigger> + </Col> + <Col xs={12} sm={4}> + <span + className="text-gray-500" + dangerouslySetInnerHTML={{ + __html: searchValue + ? insertMarkTags(username, searchValue) + : DOMPurify.sanitize(username), + }} + /> + </Col> + </Row> + </div> + ) + }, + [selectedDevice, pnds, handleItemClick, searchValue], + ) + + return ( + <div className="d-flex flex-column h-100"> + {/* Fixed top section */} + <div className="flex-shrink-0"> + <Row className="mb-3 align-items-center"> + <Col xs={12} md={6} lg={8}> + <Form.Group controlId="device.search"> + <Form.Control + type="text" + placeholder={t('device.search.placeholder')} + ref={searchRef} + value={searchValue} + onChange={e => handleSearch(e.target.value)} + /> + </Form.Group> + </Col> + <Col xs={12} md={6} lg={4} className="mt-3 mt-md-0 text-md-end"> + <Button + variant="primary::button" + className="btn-primary-button" + onClick={openAddModal}> + <FontAwesomeIcon icon={faPlus} className="me-2" /> + {t('device.add_device_button')} + </Button> + + <AddDeviceModal show={addModal} onHide={closeModal} /> + </Col> + </Row> + </div> + + {/* Scrollable list section */} + <Scrollbar className="flex-grow-1 overflow-y-auto overflow-x-hidden" scrollX={false}> + <div className="rounded border border-primary"> + {/* Fixed header */} + <div className="sticky-top bg-white border-bottom border-primary"> + <Row className="px-2 py-2 mx-0"> + <Col xs={12} sm={5}> + <span className="font-medium">{t('device.table.header.name')}</span> + </Col> + <Col xs={12} sm={3}> + <span className="font-medium">{t('device.table.header.uuid')}</span> + </Col> + <Col xs={12} sm={4}> + <span className="font-medium">{t('device.table.header.user')}</span> + </Col> + </Row> + </div> + + {/* Scrollable content */} + <div className="device-list-content"> + {filteredDevices.map(renderDeviceItem)} + </div> + </div> + </Scrollbar> + </div> + ) +} diff --git a/react-ui/src/components/devices/view/boxes/information.box.view.tsx b/react-ui/src/components/devices/view/boxes/information.box.view.tsx new file mode 100644 index 000000000..6df0e3333 --- /dev/null +++ b/react-ui/src/components/devices/view/boxes/information.box.view.tsx @@ -0,0 +1,112 @@ +import { faChevronDown, faHashtag, faUser } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { insertMarkTags } from '@helper/text' +import { useAppSelector } from '@hooks' +import { JsonViewer } from '@shared/components/json_viewer/view/json_viewer.view' +import DOMPurify from 'dompurify' +import { useCallback, useState } from 'react' +import { Collapse } from 'react-bootstrap' + +interface DeviceListCollapsableProps { + search?: string +} + +enum Collapsables { + Metadata = 1, + Config = 2, +} + +export const DeviceListCollapsable = ({ search }: DeviceListCollapsableProps) => { + const { selected, pnds } = useAppSelector(state => state.device) + + const [collapseable, setCollapsable] = useState<Collapsables | undefined>(undefined) + + const user = pnds.find(pnd => pnd.id === selected?.device.pid) + const username = user?.name || '' + const deviceId = selected?.device.id || '' + const json = selected?.json || {} + + const metadataKey = Object.keys(json).at(2) as keyof typeof json + const metadataObject = (json[metadataKey] as JSON) || {} + + const configKey = Object.keys(json).at(0) as keyof typeof json + const configObject = (json[configKey] as JSON) || {} + + const setCollapsed = useCallback((section: Collapsables) => { + setCollapsable(prev => (prev === section ? undefined : section)) + }, []) + + const renderDeviceInfo = useCallback( + () => ( + <> + <div className="d-flex justify-content-between"> + <div> + <FontAwesomeIcon className="me-2" icon={faHashtag} /> + UUID: + </div> + <span + dangerouslySetInnerHTML={{ + __html: search + ? insertMarkTags(deviceId, search) + : DOMPurify.sanitize(deviceId), + }} + /> + </div> + <div className="d-flex justify-content-between"> + <div> + <FontAwesomeIcon className="me-2" icon={faUser} /> + User: + </div> + <span>{username}</span> + </div> + </> + ), + [deviceId, search, username], + ) + + const renderCollapsableSection = useCallback( + (title: string, section: Collapsables, content: JSON) => ( + <> + <div + className={`d-flex justify-content-between clickable ${ + section === Collapsables.Config + ? 'mt-3' + : 'border-top border-dark mt-3 pt-3' + }`} + aria-expanded={collapseable === section} + onClick={() => setCollapsed(section)}> + <div> + <FontAwesomeIcon + icon={faChevronDown} + rotation={collapseable === section ? undefined : 270} + /> + {title} + </div> + </div> + + <Collapse in={collapseable === section}> + <div id={`collapse-${deviceId}-${section}`}> + {JsonViewer({ + json: content, + options: { + editable: false, + searchEnabled: false, + }, + })} + </div> + </Collapse> + </> + ), + [collapseable, deviceId, setCollapsed], + ) + + return ( + <div id={`collapse-${deviceId}`}> + <div className="pb-4 pt-1 d-flex flex-column gap-1"> + {renderDeviceInfo()} + {renderCollapsableSection('Metadata', Collapsables.Metadata, metadataObject)} + {renderCollapsableSection('Config', Collapsables.Config, configObject)} + </div> + </div> + ) +} diff --git a/react-ui/src/components/devices/view/device.scss b/react-ui/src/components/devices/view/device.scss new file mode 100755 index 000000000..7358cdcf4 --- /dev/null +++ b/react-ui/src/components/devices/view/device.scss @@ -0,0 +1,95 @@ +@import "/src/shared/style/colors.scss"; + +.device-table { + & thead { + font-size: 0.9em; + } + + & tr:hover > td { + background-color: map-get($theme-colors, "primary-hover"); + cursor: pointer; + } + + & tr.active > td { + background-color: lighten(map-get($theme-colors, primary), 5%) !important; + color: map-get($theme-colors, "black") !important; + } + + & tr > td { + color: map-get($theme-colors, "dark") !important; + } + + & tr:nth-child(2n + 1) > td { + background-color: lighten(map-get($theme-colors, primary), 38%); + } +} + +.border-right { + $border-padding: 2em; + + border-right: 1px solid lighten(map-get($theme-colors, dark), 35%); + padding-right: $border-padding; + + & ~ div { + padding-left: $border-padding; + } +} + +.tab-links { + font-size: 1.5em; + text-decoration: none; + color: map-get($theme-colors, dark); + + &:hover { + color: lighten(map-get($theme-colors, primary), 10%); + } + + &:focus { + border: none !important; + color: lighten(map-get($theme-colors, primary), 10%); + } + + &.active { + color: map-get($theme-colors, primary); + font-weight: 500; + text-decoration: underline; + } +} +.transitions { + $transition-duration-hover: 0.1s; + $transition-duration-change: 0.2s; + transition: + --startOpacity $transition-duration-hover ease-in-out, + --startPosition $transition-duration-hover ease-in-out; +} + +@property --startOpacity { + syntax: "<number>"; + initial-value: 0.35; + inherits: false; +} + +@property --startPosition { + syntax: "<percentage>"; + initial-value: 10%; + inherits: false; +} + +.bg-gradient-fade { + $primary-color: map-get($theme-colors, "primary"); + background: linear-gradient( + to bottom, + rgba($primary-color, var(--startOpacity)) var(--startPosition), + rgba($primary-color, 0.1) 100% + ); + + &:hover { + --startOpacity: 0.4; + --startPosition: 30%; + } +} + +.disabled-hover:hover { + $primary-color: rgba(map-get($theme-colors, "dark"), 0.1); + background: linear-gradient(to bottom, rgb(223, 223, 223) 1%, white 100%); +} diff --git a/react-ui/src/components/devices/view/device.view.tsx b/react-ui/src/components/devices/view/device.view.tsx new file mode 100755 index 000000000..3af506556 --- /dev/null +++ b/react-ui/src/components/devices/view/device.view.tsx @@ -0,0 +1,58 @@ +// device.view.tsx +import { faCircleInfo, faServer, faSliders } from '@fortawesome/free-solid-svg-icons' +import { useAppSelector } from '@hooks' +import { GridLayout } from '@layout/grid.layout/grid.layout' +import { GridBox } from '@shared/components/box/gridBox.view' +import { JsonViewer } from '@shared/components/json_viewer/view/json_viewer.view' +import { useRef } from 'react' +import { Col, Row } from 'react-bootstrap' +import { useTranslation } from 'react-i18next' +import { useDeviceViewModel } from '../view_model/device.viewmodel' +import { DeviceList } from './boxes/devices.box.view' +import { DeviceListCollapsable } from './boxes/information.box.view' +import './device.scss' + +const DeviceView = () => { + const { t } = useTranslation('common') + const searchRef = useRef<HTMLInputElement>(null) + const { jsonYang } = useDeviceViewModel() + const { selected } = useAppSelector(root => root.device) + + return ( + <GridLayout> + <> + <div key="device-list"> + <GridBox title={t('device.box.list.title')} title_icon={faServer}> + <DeviceList searchRef={searchRef} /> + </GridBox> + </div> + + <div key="device-metadata"> + <GridBox + title={t('device.box.information.title')} + title_icon={faCircleInfo} + disabled={!selected?.device}> + <Row> + <Col xs={12}> + <DeviceListCollapsable search={searchRef.current?.value || ''} /> + </Col> + </Row> + </GridBox> + </div> + + <div key="device-details"> + <GridBox + title={t('device.box.configuration.title')} + title_icon={faSliders} + disabled={!selected?.device}> + <Row> + <Col xs={12}>{jsonYang && <JsonViewer json={jsonYang} />}</Col> + </Row> + </GridBox> + </div> + </> + </GridLayout> + ) +} + +export default DeviceView diff --git a/react-ui/src/components/devices/view/subcomponent/modal.view.tsx b/react-ui/src/components/devices/view/subcomponent/modal.view.tsx new file mode 100644 index 000000000..fd5936412 --- /dev/null +++ b/react-ui/src/components/devices/view/subcomponent/modal.view.tsx @@ -0,0 +1,162 @@ +import { useModalViewModel } from "@component/devices/view_model/modal.viewmodel"; +import { useAppSelector } from "@hooks"; +import React from "react"; +import { Alert, Button, Form, Modal } from "react-bootstrap"; +import { useTranslation } from "react-i18next"; + +interface AddDeviceModalProps { + show: boolean; + onHide: () => void; +} + +const AddDeviceModal: React.FC<AddDeviceModalProps> = ({ show, onHide }) => { + const { loading, register, handleSubmit, errors } = useModalViewModel({ + hide: onHide, + }); + const { plugins } = useAppSelector((state) => state.plugin); + const { t } = useTranslation("common"); + + return ( + <Modal show={show} onHide={onHide} centered size="lg"> + <Modal.Header closeButton> + <Modal.Title>{t("device.add_device.title")}</Modal.Title> + </Modal.Header> + <Modal.Body> + {errors.root && ( + <Alert variant="danger" className="mt-3"> + {errors.root.message || t("device.add_device.error")} + </Alert> + )} + <Form onSubmit={handleSubmit}> + <Form.Group className="mb-3"> + <Form.Label> + {t("device.add_device.fields.mne_name.label")} + </Form.Label> + <Form.Control + type="text" + placeholder={t("device.add_device.fields.mne_name.placeholder")} + isInvalid={!!errors.mneName} + {...register("mneName", { + required: t("device.add_device.fields.mne_name.required"), + })} + /> + <Form.Control.Feedback type="invalid"> + {errors.mneName?.message} + </Form.Control.Feedback> + </Form.Group> + <Form.Group className="mb-3"> + <Form.Label> + {t("device.add_device.fields.address.label")} + </Form.Label> + <Form.Control + type="text" + placeholder={t("device.add_device.fields.address.placeholder")} + isInvalid={!!errors.address} + {...register("transportOption.address", { + required: t("device.add_device.fields.address.required"), + })} + /> + <Form.Control.Feedback type="invalid"> + {errors.address?.message} + </Form.Control.Feedback> + </Form.Group> + + <Form.Group className="mb-3"> + <Form.Label> + {t("device.add_device.fields.plugin.label")} + </Form.Label> + <Form.Control + as="select" + isInvalid={!!errors.pluginId} + {...register("pluginId", { + required: t("device.add_device.fields.plugin.required"), + })} + > + <option value=""> + {t("device.add_device.fields.plugin.placeholder")} + </option> + {plugins.map((plugin) => ( + <option key={plugin.id} value={plugin.id}> + {plugin.manifest?.name} + </option> + ))} + </Form.Control> + <Form.Control.Feedback type="invalid"> + {errors.pluginId?.message} + </Form.Control.Feedback> + </Form.Group> + + <Form.Group className="mb-3"> + <Form.Check + type="checkbox" + label={t("device.add_device.fields.tls.label")} + {...register("transportOption.tls")} + /> + </Form.Group> + + <h5 className="mt-4"> + {t("device.add_device.fields.credentials.title")} + </h5> + <Form.Group className="mb-3"> + <Form.Label> + {t("device.add_device.fields.credentials.username.label")} + </Form.Label> + <Form.Control + type="text" + placeholder={t( + "device.add_device.fields.credentials.username.placeholder", + )} + isInvalid={!!errors.transportOption?.username} + {...register("transportOption.username", { + required: t( + "device.add_device.fields.credentials.username.required", + ), + })} + /> + <Form.Control.Feedback type="invalid"> + {errors.transportOption?.username?.message} + </Form.Control.Feedback> + </Form.Group> + + <Form.Group className="mb-3"> + <Form.Label> + {t("device.add_device.fields.credentials.password.label")} + </Form.Label> + <Form.Control + type="password" + placeholder={t( + "device.add_device.fields.credentials.password.placeholder", + )} + isInvalid={!!errors.transportOption?.password} + {...register("transportOption.password", { + required: t( + "device.add_device.fields.credentials.password.required", + ), + })} + /> + <Form.Control.Feedback type="invalid"> + {errors.transportOption?.password?.message} + </Form.Control.Feedback> + </Form.Group> + + <div className="d-flex justify-content-end gap-2"> + <Button variant="secondary" onClick={onHide}> + {t("device.add_device.buttons.cancel")} + </Button> + <Button disabled={loading} variant="primary" type="submit"> + {loading ? ( + <> + <span className="spinner-border spinner-border-sm me-2" /> + {t("device.add_device.buttons.loading")} + </> + ) : ( + t("device.add_device.buttons.submit") + )} + </Button> + </div> + </Form> + </Modal.Body> + </Modal> + ); +}; +export default AddDeviceModal; diff --git a/react-ui/src/components/devices/view_model/device.box.viewmodel.ts b/react-ui/src/components/devices/view_model/device.box.viewmodel.ts new file mode 100644 index 000000000..39a4bd051 --- /dev/null +++ b/react-ui/src/components/devices/view_model/device.box.viewmodel.ts @@ -0,0 +1,56 @@ +// devices.box.viewmodel.ts +import { useAppDispatch, useAppSelector } from "@hooks"; +import { RefObject, useCallback, useMemo, useState } from "react"; +import { Device, setSelectedDevice } from "../reducer/device.reducer"; +import { fetchPluginsThunk } from "../routines/plugin.routine"; + +export const useDeviceBoxViewModel = (searchRef: RefObject<HTMLInputElement>) => { + const dispatch = useAppDispatch(); + const { devices, pnds, selected: selectedDevice } = useAppSelector( + (state) => state.device + ); + const [addModal, setAddModal] = useState(false); + const [searchValue, setSearchValue] = useState(""); // Add search state + + const handleSearch = useCallback((value: string) => { + setSearchValue(value); + }, []); + + const handleItemClick = useCallback((device: Device) => { + dispatch(setSelectedDevice({ device })); + }, []); + + const openAddModal = useCallback(() => { + dispatch(fetchPluginsThunk()); + setAddModal(true); + }, []); + + const closeModal = useCallback(() => { + setAddModal(false); + }, []); + + const filteredDevices = useMemo(() => { + if (!searchValue) return devices; + + return devices.filter((device) => { + const user = pnds.find((pnd) => pnd.id === device.pid); + return ( + device.id?.toLowerCase().includes(searchValue.toLowerCase()) || + device.name?.toLowerCase().includes(searchValue.toLowerCase()) || + user?.name?.toLowerCase().includes(searchValue.toLowerCase()) + ); + }); + }, [devices, pnds, searchValue]); // Now depends on searchValue instead of ref + + return { + filteredDevices, + handleItemClick, + selectedDevice, + pnds, + addModal, + openAddModal, + closeModal, + searchValue, + handleSearch, + }; +}; \ No newline at end of file diff --git a/react-ui/src/components/devices/view_model/device.viewmodel.ts b/react-ui/src/components/devices/view_model/device.viewmodel.ts new file mode 100755 index 000000000..543c45857 --- /dev/null +++ b/react-ui/src/components/devices/view_model/device.viewmodel.ts @@ -0,0 +1,44 @@ +import { useAppDispatch, useAppSelector } from '@hooks' +import { useMemo, useState } from 'react' +import { fetchPluginsThunk } from '../routines/plugin.routine' + +export const useDeviceViewModel = () => { + const [addModal, setAddModal] = useState<boolean>(false) + const { selected: selectedDevice } = useAppSelector((state) => state.device) + const dispatch = useAppDispatch() + + const openAddModal = () => { + dispatch(fetchPluginsThunk()) + setAddModal(true) + } + + const closeModal = () => { + setAddModal(false) + } + + const getYangModelJSON = (): JSON | null => { + if (!selectedDevice?.mne?.model) { + return null + } + + const json = JSON.parse(selectedDevice.mne.model); + const key = Object.keys(json).at(1) as keyof typeof selectedDevice.mne.model + const innerJson = json[key] + + if (!(innerJson instanceof Object)) { + return null + } + + return innerJson + } + + const jsonYang = useMemo<JSON | null>(getYangModelJSON, [selectedDevice]) + + return { + jsonYang, + selectedDevice, + openAddModal, + closeModal, + addModal + } +} diff --git a/react-ui/src/components/devices/view_model/information.box.viewmodel.ts b/react-ui/src/components/devices/view_model/information.box.viewmodel.ts new file mode 100755 index 000000000..a328ca1fa --- /dev/null +++ b/react-ui/src/components/devices/view_model/information.box.viewmodel.ts @@ -0,0 +1,109 @@ +import { Device, setSelectedDevice } from "@component/devices/reducer/device.reducer"; +import { faCopy } from "@fortawesome/free-solid-svg-icons"; +import { useAppDispatch } from "@hooks"; +import { useMenu } from "@provider/menu/menu.provider"; +import { useUtils } from "@provider/utils.provider"; +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { toast } from "react-toastify"; + +<<<<<<< HEAD:react-ui/src/components/devices/view_model/information.box.viewmodel.ts +export const useInformationViewModel = (searchRef, listRef) => { +======= +export const useDeviceTableViewModel = (searchRef, tableRef) => { +>>>>>>> parent of 9ea90588 (Merge branch 'master' into ui-implement-metadata-screen):react-ui/src/components/devices/view_model/device.table.viewmodel.ts + const [searchTerm, setSearchTerm] = useState(''); + const dispatch = useAppDispatch(); + const { subscribe } = useMenu(); + const { toClipboard } = useUtils(); + const { t } = useTranslation('common'); + + + const registerMenuOptions = () => { + const subscription = subscribe({ + target: tableRef.current, + actions: [ + { + key: t('device.table.actions.copy'), + icon: faCopy, + action: (clickedElement) => { + if (clickedElement) { + const text = clickedElement.dataset.copyValue + if (!text) { + toast.warn(t('global.toast.copied_failed')) + return + } + + + toClipboard(text) + } + } + }, + + { + key: t('device.table.actions.copy_row'), + icon: faCopy, + action: (clickedElement) => { + let parent = clickedElement; + while (parent && parent.tagName !== 'TR') { + parent = parent.parentNode; + } + + const text = parent.dataset.copyValue + if (!text) { + toast.warn(t('global.toast.copied_failed')) + return + } + toClipboard(text) + } + } + ] + }) + + return () => { + subscription.unsubscribe() + } + } + + // seperate use effect to rerun this after tableref and subscribe are initialized + useEffect(() => { + if (!subscribe || !tableRef.current) { + return + } + + const unsubscribe = registerMenuOptions() + + return () => { + unsubscribe() + } + }, [tableRef, subscribe]) + + + useEffect(() => { + if (!searchRef.current) { + return + } + + const handleSearchChange = () => { + setSearchTerm(searchRef.current.value); + }; + + searchRef.current.addEventListener('input', handleSearchChange); + + return () => { + if (searchRef.current) { + searchRef.current.removeEventListener('input', handleSearchChange); + } + }; + }, [searchRef]); + + const trClickHandler = (device: Device) => { + dispatch(setSelectedDevice({ device })); + } + + + return { + searchTerm, + trClickHandler + } +} \ No newline at end of file diff --git a/react-ui/src/components/devices/view_model/modal.viewmodel.ts b/react-ui/src/components/devices/view_model/modal.viewmodel.ts new file mode 100644 index 000000000..f5b12bec5 --- /dev/null +++ b/react-ui/src/components/devices/view_model/modal.viewmodel.ts @@ -0,0 +1,99 @@ +import { NetworkelementAddListRequest, NetworkelementSetMne, useNetworkElementServiceAddListMutation } from "@api/api"; +import { useAppDispatch, useAppSelector } from "@hooks"; +import { fetchPnds, fetchUser } from "@shared/routine/user.routine"; +import { useState } from "react"; +import { SubmitHandler, useForm } from "react-hook-form"; +import { useTranslation } from "react-i18next"; +import { toast } from "react-toastify"; + +interface FormData { + address: string; + mneName: string; + pluginId: string; + transportOption: { + address: string; + username: string; + password: string; + tls: boolean; + gnmiTransportOption: Object; + }; + gnmiSubscribePaths: string[]; +} + +type ModalViewModelType = { + hide: () => void +} + +export const useModalViewModel = ({ hide }: ModalViewModelType) => { + const dispatch = useAppDispatch() + const [addNetworkElement] = useNetworkElementServiceAddListMutation(); + const [loading, setLoading] = useState<boolean>(false) + const { t } = useTranslation('common') + + const { + register, + handleSubmit, + setError, + clearErrors, + formState: { errors }, + reset: resetModal + } = useForm<FormData>(); + + const { user } = useAppSelector(state => state.user); + + const reset = () => { resetModal(); hide(); } + const success = () => { + toast.success(t('device.add_device.success')); + reset(); + dispatch(fetchPnds()) + dispatch(fetchUser()) + } + + + const onSubmit: SubmitHandler<FormData> = async (data) => { + clearErrors() + setLoading(true) + const mne: NetworkelementSetMne = { + ...data, + gnmiSubscribePaths: [], + transportOption: { + ...data.transportOption, + gnmiTransportOption: {}, + } + } + + if (!user?.id || !user?.roles) { + toast.error("global.error.missing_user") + return + } + + const request: NetworkelementAddListRequest = { + timestamp: Date.now().toString(), + mne: [mne], + pid: Object.keys(user.roles)[0] + }; + + try { + const response = await addNetworkElement({ networkelementAddListRequest: request }); + setLoading(false) + + if (response.error) { + const error = response.error as any + setError('root', error.data) + return + } + + success() + } catch (error) { + setError('root', error?.data?.message || undefined) + } + } + + return { + onSubmit, + handleSubmit: handleSubmit(onSubmit), + register, + errors, + loading + } +} \ No newline at end of file diff --git a/react-ui/src/components/login/layouts/login.layout.tsx b/react-ui/src/components/login/layouts/login.layout.tsx new file mode 100755 index 000000000..58e8fc991 --- /dev/null +++ b/react-ui/src/components/login/layouts/login.layout.tsx @@ -0,0 +1,25 @@ +import { useAuth } from "@provider/auth.provider"; +import { useEffect } from "react"; +import { useNavigate, useOutlet } from "react-router-dom"; +import LoginView from "../view/login.view"; + + +export const LoginLayout = () => { + const outlet = useOutlet(); + const navigate = useNavigate(); + const { isAuthenticated } = useAuth(); + + // if user is already logged in then redirect to home page + useEffect(() => { + if (isAuthenticated()) { + navigate('/'); + return; + } + }, []); + + return ( + <LoginView>{outlet}</LoginView> + ) +} + +export default LoginLayout \ No newline at end of file diff --git a/react-ui/src/components/login/view/login.scss b/react-ui/src/components/login/view/login.scss new file mode 100755 index 000000000..27295346c --- /dev/null +++ b/react-ui/src/components/login/view/login.scss @@ -0,0 +1,8 @@ +@import '/node_modules/bootstrap/scss/bootstrap-grid.scss'; + +@include media-breakpoint-up(md) { + .login-container { + padding-bottom: 15em; + } + +} \ No newline at end of file diff --git a/react-ui/src/components/login/view/login.view.tsx b/react-ui/src/components/login/view/login.view.tsx new file mode 100755 index 000000000..5b7b40a86 --- /dev/null +++ b/react-ui/src/components/login/view/login.view.tsx @@ -0,0 +1,104 @@ +// login.view.tsx +import { BasicProp } from "@shared/types/interfaces.type"; +import React from "react"; +import { + Alert, + Button, + Col, + Container, + Form, + Image, + Row, + Spinner, +} from "react-bootstrap"; +import { useForm } from "react-hook-form"; +import { useTranslation } from "react-i18next"; +import useLoginViewModel from "../viewmodel/login.viewmodel"; +import "./login.scss"; +import { LoginFormInputs } from "./login.types"; +import logo from "/public/logo.svg"; + +export const LoginView: React.FC<BasicProp> = () => { + const { t } = useTranslation("common"); + const { handleLogin, getErrorMessage, loginLoading } = useLoginViewModel(); + + const { + register, + handleSubmit, + formState: { errors }, + } = useForm<LoginFormInputs>({ + mode: "onSubmit", + defaultValues: { + username: "", + password: "", + }, + }); + + const invalidForm = ( + <Alert variant="warning">{t("login.form.invalid")}</Alert> + ); + const invalidCredentials = ( + <Alert variant="danger">{t("login.form.failed")}</Alert> + ); + + return ( + <Container className="vh-100 d-flex flex-column justify-content-center login-container"> + <Row className="align-items-center"> + <Image src={logo} alt="logo" height={150} /> + </Row> + <Row className="mt-2 justify-content-center"> + <Col md={6} sm={10} className="c-box p-4 bg-white"> + <h1 className="text-center h2">goSDN - Web</h1> + + {getErrorMessage(invalidForm, invalidCredentials)} + + <Form className="mt-4" onSubmit={handleSubmit(handleLogin)}> + <Form.Group className="mb-3" controlId="loginForm.username"> + <Form.Label>{t("login.form.username.label")}</Form.Label> + <Form.Control + type="text" + isInvalid={!!errors.username} + {...register("username", { + required: t("global.form.empty_field"), + })} + autoComplete="on" + autoFocus={true} + /> + <Form.Control.Feedback type="invalid"> + {errors.username?.message} + </Form.Control.Feedback> + </Form.Group> + <Form.Group className="mb-3" controlId="loginForm.password"> + <Form.Label>{t("login.form.password.label")}</Form.Label> + <Form.Control + type="password" + isInvalid={!!errors.password} + {...register("password", { + required: t("global.form.empty_field"), + })} + /> + <Form.Control.Feedback type="invalid"> + {errors.password?.message} + </Form.Control.Feedback> + </Form.Group> + <Button + variant="primary" + type="submit" + className="w-100 mt-3" + disabled={loginLoading} + > + {t("global.form.submit")} + {loginLoading && ( + <Spinner animation="border" size="sm" role="status"> + <span className="visually-hidden">Loading...</span> + </Spinner> + )} + </Button> + </Form> + </Col> + </Row> + </Container> + ); +}; + +export default LoginView; diff --git a/react-ui/src/components/login/viewmodel/login.viewmodel.ts b/react-ui/src/components/login/viewmodel/login.viewmodel.ts new file mode 100755 index 000000000..9617a117c --- /dev/null +++ b/react-ui/src/components/login/viewmodel/login.viewmodel.ts @@ -0,0 +1,31 @@ +export interface LoginFormInputs { + username: string; + password: string; +} + +// login.viewmodel.ts +import { useAuth } from "@provider/auth.provider"; + +export default function useLoginViewModel() { + const { login, loginProperties } = useAuth(); + const { isLoading: loginLoading, error: loginError, reset: resetLogin } = loginProperties; + + const handleLogin = async (data: LoginFormInputs) => { + resetLogin(); + await login(data.username, data.password); + }; + + const getErrorMessage = (formInvalidError: JSX.Element, backendResponseError: JSX.Element): JSX.Element | null => { + if (loginError) { + return backendResponseError; + } + return null; + }; + + return { + handleLogin, + getErrorMessage, + loginLoading, + loginError + }; +} \ No newline at end of file diff --git a/react-ui/src/hooks.ts b/react-ui/src/hooks.ts new file mode 100755 index 000000000..aa20e122d --- /dev/null +++ b/react-ui/src/hooks.ts @@ -0,0 +1,5 @@ +import { useDispatch, useSelector } from "react-redux" +import { AppDispatch, RootState } from "./stores" + +export const useAppDispatch = useDispatch.withTypes<AppDispatch>() +export const useAppSelector = useSelector.withTypes<RootState>() \ No newline at end of file diff --git a/react-ui/src/i18n/config.js b/react-ui/src/i18n/config.js new file mode 100755 index 000000000..3946a8db2 --- /dev/null +++ b/react-ui/src/i18n/config.js @@ -0,0 +1,17 @@ +import i18next from "i18next"; + +import common_en from "./locales/en/translations.json"; +import common_de from "./locales/de/translations.json"; + +i18next.init({ + interpolation: { escapeValue: false }, + lng: 'en', + resources: { + en: { + ...common_en + }, + de: { + ...common_de + } + }, +}); \ No newline at end of file diff --git a/react-ui/src/i18n/locales/de/translations.json b/react-ui/src/i18n/locales/de/translations.json new file mode 100755 index 000000000..e7d425b7b --- /dev/null +++ b/react-ui/src/i18n/locales/de/translations.json @@ -0,0 +1,20 @@ +{ + "common": { + "global": { + "form": { + "submit": "Abshcicken", + "empty_field": "Das Feld darf nicht leer sein" + } + }, + "login": { + "form": { + "username": { + "label": "Benutzername" + }, + "password": { + "label": "Passwort" + } + } + } + } +} \ No newline at end of file diff --git a/react-ui/src/i18n/locales/en/translations.json b/react-ui/src/i18n/locales/en/translations.json new file mode 100755 index 000000000..8c4b56dcd --- /dev/null +++ b/react-ui/src/i18n/locales/en/translations.json @@ -0,0 +1,116 @@ +{ + "common": { + "global": { + "form": { + "submit": "Submit", + "empty_field": "This field can´t be empty" + }, + "toast": { + "copied": "Copied to clipboard", + "copied_failed": "Copying to clipboard failed" + }, + "menu_item": { + "logout": "Logout" + }, + "error": { + "missing_user": "Error: User information. Please relogin and try it again" + } + }, + "json_viewer": { + "copy": "Copy" + }, + "login": { + "form": { + "failed": "The username or password is invalid", + "invalid": "Please type a username and password", + "username": { + "label": "Username" + }, + "password": { + "label": "Password" + } + } + }, + "device": { + "box": { + "list": { + "title": "Devices" + }, + "information": { + "title": "Information" + }, + "configuration": { + "title": "Configuration" + }, + "lastUpdate": "Last updated {{seconds}} seconds ago" + }, + "add_device": { + "success": "Device successfully added", + "title": "Add New Device", + "error": "An error occurred on save", + "fields": { + "address": { + "label": "IPv4 address", + "placeholder": "172.100.0.1", + "required": "Ipv4 Address is required" + }, + "mne_name": { + "label": "MNE Name", + "placeholder": "Enter MNE name", + "required": "MNE name is required" + }, + "plugin": { + "label": "Plugin", + "placeholder": "Select plugin...", + "required": "Plugin selection is required" + }, + "tls": { + "label": "TLS Enabled" + }, + "credentials": { + "title": "Credentials", + "username": { + "label": "Username", + "placeholder": "Enter username", + "required": "Username is required" + }, + "password": { + "label": "Password", + "placeholder": "Enter password", + "required": "Password is required" + } + } + }, + "buttons": { + "cancel": "Cancel", + "submit": "Add Device", + "loading": "Adding..." + } + }, + "table": { + "header": { + "name": "Name", + "uuid": "UUID", + "user": "User", + "last_updated": "Last updated" + }, + "actions": { + "copy": "Copy", + "copy_row": "Copy row" + } + }, + "search": { + "placeholder": "Search" + }, + "add_device_button": "Add device" + }, + "protected": { + "link": { + "device_list": "Device List", + "map": "Map", + "configuration_mgmt": "Configuration Management", + "settings": "Settings" + } + } + } +} \ No newline at end of file diff --git a/react-ui/src/index.scss b/react-ui/src/index.scss new file mode 100755 index 000000000..610261473 --- /dev/null +++ b/react-ui/src/index.scss @@ -0,0 +1,16 @@ +@import "./shared/style/index.scss"; +@import "./shared/style/colors.scss"; + +body { + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + // background-color: map-get($theme-colors, bg-primary) !important; + + background: linear-gradient( + to top, + rgba(lighten(map-get($map: $theme-colors, $key: primary), 20%), 0.1) 0%, + rgba(map-get($map: $theme-colors, $key: bg-primary), 0.9) 90% + ); +} diff --git a/react-ui/src/index.tsx b/react-ui/src/index.tsx new file mode 100755 index 000000000..2969f405f --- /dev/null +++ b/react-ui/src/index.tsx @@ -0,0 +1,43 @@ +import { UtilsProvider } from '@provider/utils.provider' +import AnimatedBackground from '@shared/components/background/background.view' +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 { SkeletonTheme } from 'react-loading-skeleton' +import { Provider } from 'react-redux' +import { + RouterProvider +} from 'react-router-dom' +import { ToastContainer } from 'react-toastify' +import { PersistGate } from 'redux-persist/integration/react' +import './i18n/config' +import './index.scss' +import { router } from './routes' +import './shared/icons/icons' +import { persistor, store } from './stores' + +window.env = window.location.hostname === 'localhost' ? 'development' : 'production'; + +ReactDOM.createRoot(document.getElementById("root")).render( + <React.StrictMode> + <AnimatedBackground> + <ErrorBoundary fallback={<div>Something went wrong</div>}> + <SkeletonTheme height="2em" > + <Provider store={store}> + <PersistGate loading={null} persistor={persistor}> + <I18nextProvider i18n={i18next}> + <UtilsProvider> + <ToastContainer /> + <RouterProvider router={router} /> + </UtilsProvider> + </I18nextProvider> + </PersistGate> + </Provider> + </SkeletonTheme> + </ErrorBoundary> + </AnimatedBackground> + </React.StrictMode> +); + diff --git a/react-ui/src/routes.tsx b/react-ui/src/routes.tsx new file mode 100755 index 000000000..a476feaae --- /dev/null +++ b/react-ui/src/routes.tsx @@ -0,0 +1,50 @@ +import { BasicLayout } from "@layout/basic.layout"; +import { ProtectedLayout } from "@layout/protected.layout/protected.layout"; +import DelayedRender, { SplashScreen } from "@utils/loading-fallback"; +import { lazy, Suspense } from 'react'; +import { createBrowserRouter, createRoutesFromElements, Navigate, Route } from "react-router-dom"; + +export const DEVICE_URL = '/device/'; +export const LOGIN_URL = '/login'; + +// Lazy load components +const DeviceView = lazy(() => import('./components/devices/view/device.view')); +const LoginLayout = lazy(() => import('./components/login/layouts/login.layout')); + +export const router = createBrowserRouter( + createRoutesFromElements( + <Route element={<BasicLayout />}> + <Route + path={LOGIN_URL} + element={ + <Suspense fallback={null}> + <DelayedRender> + <LoginLayout /> + </DelayedRender> + </Suspense> + } + /> + <Route element={<ProtectedLayout />}> + <Route + path={DEVICE_URL} + element={ + <DelayedRender + loading={{ + minimumLoadingTime: 1000, + component: SplashScreen + }} + > + <Suspense fallback={null}> + <DeviceView /> + </Suspense> + </DelayedRender> + } + /> + <Route + path="/" + element={<Navigate to={DEVICE_URL} replace={true} />} + /> + </Route> + </Route > + ) +); \ No newline at end of file diff --git a/react-ui/src/setupTests.js b/react-ui/src/setupTests.js new file mode 100755 index 000000000..52aaef1d2 --- /dev/null +++ b/react-ui/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom' diff --git a/react-ui/src/shared/api/api.ts b/react-ui/src/shared/api/api.ts new file mode 100755 index 000000000..2b9439b96 --- /dev/null +++ b/react-ui/src/shared/api/api.ts @@ -0,0 +1,1453 @@ +import { emptySplitApi as api } from '../../stores/api.store' +export const addTagTypes = [ + 'AppService', + 'ConfigurationManagementService', + 'AuthService', + 'NetworkElementService', + 'PluginInternalService', + 'PndService', + 'RoleService', + 'RoutingTableService', + 'SubscriptionManagementService', + 'TopologyService', + 'UserService', +] as const +const injectedRtkApi = api + .enhanceEndpoints({ + addTagTypes, + }) + .injectEndpoints({ + endpoints: build => ({ + appServiceDeregister: build.mutation< + AppServiceDeregisterApiResponse, + AppServiceDeregisterApiArg + >({ + query: queryArg => ({ + url: `/deregister`, + method: 'POST', + body: queryArg.appAppDeregisterRequest, + }), + invalidatesTags: ['AppService'], + }), + configurationManagementServiceExportSdnConfig: build.query< + ConfigurationManagementServiceExportSdnConfigApiResponse, + ConfigurationManagementServiceExportSdnConfigApiArg + >({ + query: queryArg => ({ + url: `/export/${queryArg.pid}`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['ConfigurationManagementService'], + }), + configurationManagementServiceImportSdnConfig: build.mutation< + ConfigurationManagementServiceImportSdnConfigApiResponse, + ConfigurationManagementServiceImportSdnConfigApiArg + >({ + query: queryArg => ({ + url: `/import/${queryArg.pid}`, + method: 'POST', + params: { + timestamp: queryArg.timestamp, + sdnConfigData: queryArg.sdnConfigData, + }, + }), + invalidatesTags: ['ConfigurationManagementService'], + }), + authServiceLogin: build.mutation<AuthServiceLoginApiResponse, AuthServiceLoginApiArg>({ + query: queryArg => ({ + url: `/login`, + method: 'POST', + body: queryArg.rbacLoginRequest, + }), + invalidatesTags: ['AuthService'], + }), + authServiceLogout: build.mutation< + AuthServiceLogoutApiResponse, + AuthServiceLogoutApiArg + >({ + query: queryArg => ({ + url: `/logout/${queryArg.username}`, + method: 'POST', + params: { + timestamp: queryArg.timestamp, + }, + }), + invalidatesTags: ['AuthService'], + }), + networkElementServiceGetAllFlattened: build.query< + NetworkElementServiceGetAllFlattenedApiResponse, + NetworkElementServiceGetAllFlattenedApiArg + >({ + query: queryArg => ({ + url: `/mnes`, + params: { + timestamp: queryArg.timestamp, + pid: queryArg.pid, + }, + }), + providesTags: ['NetworkElementService'], + }), + networkElementServiceAddList: build.mutation< + NetworkElementServiceAddListApiResponse, + NetworkElementServiceAddListApiArg + >({ + query: queryArg => ({ + url: `/mnes`, + method: 'POST', + body: queryArg.networkelementAddListRequest, + }), + invalidatesTags: ['NetworkElementService'], + }), + networkElementServiceGetChangeList: build.query< + NetworkElementServiceGetChangeListApiResponse, + NetworkElementServiceGetChangeListApiArg + >({ + query: queryArg => ({ + url: `/mnes/changes`, + params: { + timestamp: queryArg.timestamp, + pid: queryArg.pid, + }, + }), + providesTags: ['NetworkElementService'], + }), + networkElementServiceSetChangeList: build.mutation< + NetworkElementServiceSetChangeListApiResponse, + NetworkElementServiceSetChangeListApiArg + >({ + query: queryArg => ({ + url: `/mnes/changes`, + method: 'POST', + body: queryArg.networkelementSetChangeListRequest, + }), + invalidatesTags: ['NetworkElementService'], + }), + networkElementServiceGetChange: build.query< + NetworkElementServiceGetChangeApiResponse, + NetworkElementServiceGetChangeApiArg + >({ + query: queryArg => ({ + url: `/mnes/changes/${queryArg.cuid}`, + params: { + timestamp: queryArg.timestamp, + pid: queryArg.pid, + }, + }), + providesTags: ['NetworkElementService'], + }), + networkElementServiceSetPathList: build.mutation< + NetworkElementServiceSetPathListApiResponse, + NetworkElementServiceSetPathListApiArg + >({ + query: queryArg => ({ + url: `/mnes/paths`, + method: 'POST', + body: queryArg.networkelementSetPathListRequest, + }), + invalidatesTags: ['NetworkElementService'], + }), + networkElementServiceGet: build.query< + NetworkElementServiceGetApiResponse, + NetworkElementServiceGetApiArg + >({ + query: queryArg => ({ + url: `/mnes/${queryArg.mneid}`, + params: { + timestamp: queryArg.timestamp, + pid: queryArg.pid, + }, + }), + providesTags: ['NetworkElementService'], + }), + networkElementServiceDelete: build.mutation< + NetworkElementServiceDeleteApiResponse, + NetworkElementServiceDeleteApiArg + >({ + query: queryArg => ({ + url: `/mnes/${queryArg.mneid}`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + pid: queryArg.pid, + }, + }), + invalidatesTags: ['NetworkElementService'], + }), + networkElementServiceGetIntendedPath: build.query< + NetworkElementServiceGetIntendedPathApiResponse, + NetworkElementServiceGetIntendedPathApiArg + >({ + query: queryArg => ({ + url: `/mnes/${queryArg.mneid}/intendedpaths/${queryArg.intendedPath}`, + params: { + timestamp: queryArg.timestamp, + pid: queryArg.pid, + }, + }), + providesTags: ['NetworkElementService'], + }), + networkElementServiceGetPath: build.query< + NetworkElementServiceGetPathApiResponse, + NetworkElementServiceGetPathApiArg + >({ + query: queryArg => ({ + url: `/mnes/${queryArg.mneid}/paths/${queryArg.path}`, + params: { + timestamp: queryArg.timestamp, + pid: queryArg.pid, + }, + }), + providesTags: ['NetworkElementService'], + }), + networkElementServiceUpdate: build.mutation< + NetworkElementServiceUpdateApiResponse, + NetworkElementServiceUpdateApiArg + >({ + query: queryArg => ({ + url: `/network-element/update`, + method: 'POST', + body: queryArg.networkelementUpdateNetworkElementRequest, + }), + invalidatesTags: ['NetworkElementService'], + }), + pluginInternalServiceAvailablePlugins: build.query< + PluginInternalServiceAvailablePluginsApiResponse, + PluginInternalServiceAvailablePluginsApiArg + >({ + query: queryArg => ({ + url: `/plugins`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['PluginInternalService'], + }), + pndServiceGetPnd: build.query<PndServiceGetPndApiResponse, PndServiceGetPndApiArg>({ + query: queryArg => ({ + url: `/pnd/${queryArg.pid}`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['PndService'], + }), + pndServiceGetPndList: build.query< + PndServiceGetPndListApiResponse, + PndServiceGetPndListApiArg + >({ + query: queryArg => ({ + url: `/pnds`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['PndService'], + }), + pndServiceCreatePndList: build.mutation< + PndServiceCreatePndListApiResponse, + PndServiceCreatePndListApiArg + >({ + query: queryArg => ({ + url: `/pnds`, + method: 'POST', + body: queryArg.pndCreatePndListRequest, + }), + invalidatesTags: ['PndService'], + }), + pndServiceDeletePnd: build.mutation< + PndServiceDeletePndApiResponse, + PndServiceDeletePndApiArg + >({ + query: queryArg => ({ + url: `/pnds/${queryArg.pid}`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + }, + }), + invalidatesTags: ['PndService'], + }), + appServiceRegister: build.mutation< + AppServiceRegisterApiResponse, + AppServiceRegisterApiArg + >({ + query: queryArg => ({ + url: `/register`, + method: 'POST', + body: queryArg.appAppRegisterRequest, + }), + invalidatesTags: ['AppService'], + }), + roleServiceGetRoles: build.query< + RoleServiceGetRolesApiResponse, + RoleServiceGetRolesApiArg + >({ + query: queryArg => ({ + url: `/roles`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['RoleService'], + }), + roleServiceCreateRoles: build.mutation< + RoleServiceCreateRolesApiResponse, + RoleServiceCreateRolesApiArg + >({ + query: queryArg => ({ + url: `/roles/create`, + method: 'POST', + body: queryArg.rbacCreateRolesRequest, + }), + invalidatesTags: ['RoleService'], + }), + roleServiceDeleteRoles: build.mutation< + RoleServiceDeleteRolesApiResponse, + RoleServiceDeleteRolesApiArg + >({ + query: queryArg => ({ + url: `/roles/delete`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + roleName: queryArg.roleName, + }, + }), + invalidatesTags: ['RoleService'], + }), + roleServiceDeletePermissionsForRole: build.mutation< + RoleServiceDeletePermissionsForRoleApiResponse, + RoleServiceDeletePermissionsForRoleApiArg + >({ + query: queryArg => ({ + url: `/roles/delete/permissions`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + roleName: queryArg.roleName, + permissionsToDelete: queryArg.permissionsToDelete, + }, + }), + invalidatesTags: ['RoleService'], + }), + roleServiceGetRole: build.query< + RoleServiceGetRoleApiResponse, + RoleServiceGetRoleApiArg + >({ + query: queryArg => ({ + url: `/roles/get`, + params: { + timestamp: queryArg.timestamp, + roleName: queryArg.roleName, + id: queryArg.id, + }, + }), + providesTags: ['RoleService'], + }), + roleServiceUpdateRoles: build.mutation< + RoleServiceUpdateRolesApiResponse, + RoleServiceUpdateRolesApiArg + >({ + query: queryArg => ({ + url: `/roles/update`, + method: 'POST', + body: queryArg.rbacUpdateRolesRequest, + }), + invalidatesTags: ['RoleService'], + }), + routingTableServiceGetRoutes: build.query< + RoutingTableServiceGetRoutesApiResponse, + RoutingTableServiceGetRoutesApiArg + >({ + query: queryArg => ({ + url: `/routing`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['RoutingTableService'], + }), + routingTableServiceAddRoutingTable: build.mutation< + RoutingTableServiceAddRoutingTableApiResponse, + RoutingTableServiceAddRoutingTableApiArg + >({ + query: queryArg => ({ + url: `/routing/create`, + method: 'POST', + body: queryArg.topologyAddRoutingTableRequest, + }), + invalidatesTags: ['RoutingTableService'], + }), + routingTableServiceDeleteRoute: build.mutation< + RoutingTableServiceDeleteRouteApiResponse, + RoutingTableServiceDeleteRouteApiArg + >({ + query: queryArg => ({ + url: `/routing/delete`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + id: queryArg.id, + }, + }), + invalidatesTags: ['RoutingTableService'], + }), + subscriptionManagementServiceResetAllSubscriptions: build.query< + SubscriptionManagementServiceResetAllSubscriptionsApiResponse, + SubscriptionManagementServiceResetAllSubscriptionsApiArg + >({ + query: queryArg => ({ + url: `/submanagement/reset`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['SubscriptionManagementService'], + }), + subscriptionManagementServiceGetAll: build.query< + SubscriptionManagementServiceGetAllApiResponse, + SubscriptionManagementServiceGetAllApiArg + >({ + query: queryArg => ({ + url: `/submanagement/subscriptions`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['SubscriptionManagementService'], + }), + subscriptionManagementServiceAdd: build.mutation< + SubscriptionManagementServiceAddApiResponse, + SubscriptionManagementServiceAddApiArg + >({ + query: queryArg => ({ + url: `/submanagement/${queryArg.mneid}`, + method: 'POST', + body: queryArg.subscriptionmanagementSubscriptionManagementServiceAddBody, + }), + invalidatesTags: ['SubscriptionManagementService'], + }), + subscriptionManagementServiceGet: build.query< + SubscriptionManagementServiceGetApiResponse, + SubscriptionManagementServiceGetApiArg + >({ + query: queryArg => ({ + url: `/submanagement/${queryArg.subid}`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['SubscriptionManagementService'], + }), + subscriptionManagementServiceDelete: build.mutation< + SubscriptionManagementServiceDeleteApiResponse, + SubscriptionManagementServiceDeleteApiArg + >({ + query: queryArg => ({ + url: `/submanagement/${queryArg.subid}`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + }, + }), + invalidatesTags: ['SubscriptionManagementService'], + }), + topologyServiceGetTopology: build.query< + TopologyServiceGetTopologyApiResponse, + TopologyServiceGetTopologyApiArg + >({ + query: queryArg => ({ + url: `/topology`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['TopologyService'], + }), + topologyServiceAddLink: build.mutation< + TopologyServiceAddLinkApiResponse, + TopologyServiceAddLinkApiArg + >({ + query: queryArg => ({ + url: `/topology/create`, + method: 'POST', + body: queryArg.topologyAddLinkRequest, + }), + invalidatesTags: ['TopologyService'], + }), + topologyServiceDeleteLink: build.mutation< + TopologyServiceDeleteLinkApiResponse, + TopologyServiceDeleteLinkApiArg + >({ + query: queryArg => ({ + url: `/topology/delete`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + id: queryArg.id, + }, + }), + invalidatesTags: ['TopologyService'], + }), + topologyServiceUpdateLink: build.mutation< + TopologyServiceUpdateLinkApiResponse, + TopologyServiceUpdateLinkApiArg + >({ + query: queryArg => ({ + url: `/topology/update`, + method: 'POST', + body: queryArg.topologyUpdateLinkRequest, + }), + invalidatesTags: ['TopologyService'], + }), + userServiceGetUsers: build.query< + UserServiceGetUsersApiResponse, + UserServiceGetUsersApiArg + >({ + query: queryArg => ({ + url: `/users`, + params: { + timestamp: queryArg.timestamp, + }, + }), + providesTags: ['UserService'], + }), + userServiceCreateUsers: build.mutation< + UserServiceCreateUsersApiResponse, + UserServiceCreateUsersApiArg + >({ + query: queryArg => ({ + url: `/users/create`, + method: 'POST', + body: queryArg.rbacCreateUsersRequest, + }), + invalidatesTags: ['UserService'], + }), + userServiceDeleteUsers: build.mutation< + UserServiceDeleteUsersApiResponse, + UserServiceDeleteUsersApiArg + >({ + query: queryArg => ({ + url: `/users/delete`, + method: 'DELETE', + params: { + timestamp: queryArg.timestamp, + username: queryArg.username, + }, + }), + invalidatesTags: ['UserService'], + }), + userServiceGetUser: build.query< + UserServiceGetUserApiResponse, + UserServiceGetUserApiArg + >({ + query: queryArg => ({ + url: `/users/get`, + params: { + timestamp: queryArg.timestamp, + name: queryArg.name, + id: queryArg.id, + }, + }), + providesTags: ['UserService'], + }), + userServiceUpdateUsers: build.mutation< + UserServiceUpdateUsersApiResponse, + UserServiceUpdateUsersApiArg + >({ + query: queryArg => ({ + url: `/users/update`, + method: 'POST', + body: queryArg.rbacUpdateUsersRequest, + }), + invalidatesTags: ['UserService'], + }), + }), + overrideExisting: false, + }) +export { injectedRtkApi as api } +export type AppServiceDeregisterApiResponse = + /** status 200 A successful response. */ AppAppDeregisterResponse +export type AppServiceDeregisterApiArg = { + appAppDeregisterRequest: AppAppDeregisterRequest +} +export type ConfigurationManagementServiceExportSdnConfigApiResponse = + /** status 200 A successful response. */ ConfigurationmanagementExportSdnConfigResponse +export type ConfigurationManagementServiceExportSdnConfigApiArg = { + pid: string + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type ConfigurationManagementServiceImportSdnConfigApiResponse = + /** status 200 A successful response. */ ConfigurationmanagementImportSdnConfigResponse +export type ConfigurationManagementServiceImportSdnConfigApiArg = { + pid: string + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + sdnConfigData?: string +} +export type AuthServiceLoginApiResponse = /** status 200 A successful response. */ RbacLoginResponse +export type AuthServiceLoginApiArg = { + rbacLoginRequest: Login +} +export type AuthServiceLogoutApiResponse = + /** status 200 A successful response. */ RbacLogoutResponse +export type AuthServiceLogoutApiArg = { + username: string + timestamp?: string +} +export type NetworkElementServiceGetAllFlattenedApiResponse = + /** status 200 A successful response. */ NetworkelementGetAllFlattenedResponse +export type NetworkElementServiceGetAllFlattenedApiArg = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pid?: string +} +export type NetworkElementServiceAddListApiResponse = + /** status 200 A successful response. */ NetworkelementAddListResponse +export type NetworkElementServiceAddListApiArg = { + networkelementAddListRequest: NetworkelementAddListRequest +} +export type NetworkElementServiceGetChangeListApiResponse = + /** status 200 A successful response. */ NetworkelementGetChangeListResponse +export type NetworkElementServiceGetChangeListApiArg = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pid?: string +} +export type NetworkElementServiceSetChangeListApiResponse = + /** status 200 A successful response. */ NetworkelementSetChangeListResponse +export type NetworkElementServiceSetChangeListApiArg = { + networkelementSetChangeListRequest: NetworkelementSetChangeListRequest +} +export type NetworkElementServiceGetChangeApiResponse = + /** status 200 A successful response. */ NetworkelementGetChangeResponse +export type NetworkElementServiceGetChangeApiArg = { + cuid: string[] + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pid?: string +} +export type NetworkElementServiceSetPathListApiResponse = + /** status 200 A successful response. */ NetworkelementSetPathListResponse +export type NetworkElementServiceSetPathListApiArg = { + networkelementSetPathListRequest: NetworkelementSetPathListRequest +} +export type NetworkElementServiceGetApiResponse = + /** status 200 A successful response. */ GosdnnetworkelementGetResponse +export type NetworkElementServiceGetApiArg = { + mneid: string + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pid?: string +} +export type NetworkElementServiceDeleteApiResponse = + /** status 200 A successful response. */ GosdnnetworkelementDeleteResponse +export type NetworkElementServiceDeleteApiArg = { + mneid: string + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pid?: string +} +export type NetworkElementServiceGetIntendedPathApiResponse = + /** status 200 A successful response. */ NetworkelementGetIntendedPathResponse +export type NetworkElementServiceGetIntendedPathApiArg = { + mneid: string + intendedPath: string + timestamp?: string + pid?: string +} +export type NetworkElementServiceGetPathApiResponse = + /** status 200 A successful response. */ NetworkelementGetPathResponse +export type NetworkElementServiceGetPathApiArg = { + mneid: string + path: string + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pid?: string +} +export type NetworkElementServiceUpdateApiResponse = + /** status 200 A successful response. */ NetworkelementUpdateNetworkElementResponse +export type NetworkElementServiceUpdateApiArg = { + networkelementUpdateNetworkElementRequest: TodoChangeNameToFitTheRest +} +export type PluginInternalServiceAvailablePluginsApiResponse = + /** status 200 A successful response. */ GosdnpluginRegistryGetResponse +export type PluginInternalServiceAvailablePluginsApiArg = { + timestamp?: string +} +export type PndServiceGetPndApiResponse = /** status 200 A successful response. */ PndGetPndResponse +export type PndServiceGetPndApiArg = { + pid: string + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type PndServiceGetPndListApiResponse = + /** status 200 A successful response. */ PndGetPndListResponse +export type PndServiceGetPndListApiArg = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type PndServiceCreatePndListApiResponse = + /** status 200 A successful response. */ PndCreatePndListResponse +export type PndServiceCreatePndListApiArg = { + pndCreatePndListRequest: PndCreatePndListRequest +} +export type PndServiceDeletePndApiResponse = + /** status 200 A successful response. */ PndDeletePndResponse +export type PndServiceDeletePndApiArg = { + pid: string + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type AppServiceRegisterApiResponse = + /** status 200 A successful response. */ AppAppRegisterResponse +export type AppServiceRegisterApiArg = { + appAppRegisterRequest: AppAppRegisterRequest +} +export type RoleServiceGetRolesApiResponse = + /** status 200 A successful response. */ RbacGetRolesResponse +export type RoleServiceGetRolesApiArg = { + timestamp?: string +} +export type RoleServiceCreateRolesApiResponse = + /** status 200 A successful response. */ RbacCreateRolesResponse +export type RoleServiceCreateRolesApiArg = { + rbacCreateRolesRequest: CreateRoles +} +export type RoleServiceDeleteRolesApiResponse = + /** status 200 A successful response. */ RbacDeleteRolesResponse +export type RoleServiceDeleteRolesApiArg = { + timestamp?: string + roleName?: string[] +} +export type RoleServiceDeletePermissionsForRoleApiResponse = + /** status 200 A successful response. */ RbacDeletePermissionsForRoleResponse +export type RoleServiceDeletePermissionsForRoleApiArg = { + timestamp?: string + roleName?: string + permissionsToDelete?: string[] +} +export type RoleServiceGetRoleApiResponse = + /** status 200 A successful response. */ RbacGetRoleResponse +export type RoleServiceGetRoleApiArg = { + timestamp?: string + roleName?: string + id?: string +} +export type RoleServiceUpdateRolesApiResponse = + /** status 200 A successful response. */ RbacUpdateRolesResponse +export type RoleServiceUpdateRolesApiArg = { + rbacUpdateRolesRequest: UpdateRoles +} +export type RoutingTableServiceGetRoutesApiResponse = + /** status 200 A successful response. */ TopologyGetRoutesResponse +export type RoutingTableServiceGetRoutesApiArg = { + timestamp?: string +} +export type RoutingTableServiceAddRoutingTableApiResponse = + /** status 200 A successful response. */ TopologyAddRoutingTableResponse +export type RoutingTableServiceAddRoutingTableApiArg = { + topologyAddRoutingTableRequest: TopologyAddRoutingTableRequest +} +export type RoutingTableServiceDeleteRouteApiResponse = + /** status 200 A successful response. */ TopologyDeleteRoutesResponse +export type RoutingTableServiceDeleteRouteApiArg = { + timestamp?: string + id?: string +} +export type SubscriptionManagementServiceResetAllSubscriptionsApiResponse = + /** status 200 A successful response. */ SubscriptionmanagementResetAllSubscriptionsResponse +export type SubscriptionManagementServiceResetAllSubscriptionsApiArg = { + timestamp?: string +} +export type SubscriptionManagementServiceGetAllApiResponse = + /** status 200 A successful response. */ GosdnsubscriptionmanagementGetAllResponse +export type SubscriptionManagementServiceGetAllApiArg = { + timestamp?: string +} +export type SubscriptionManagementServiceAddApiResponse = + /** status 200 A successful response. */ SubscriptionmanagementAddResponse +export type SubscriptionManagementServiceAddApiArg = { + mneid: string + subscriptionmanagementSubscriptionManagementServiceAddBody: SubscriptionmanagementSubscriptionManagementServiceAddBody +} +export type SubscriptionManagementServiceGetApiResponse = + /** status 200 A successful response. */ GosdnsubscriptionmanagementGetResponse +export type SubscriptionManagementServiceGetApiArg = { + subid: string + timestamp?: string +} +export type SubscriptionManagementServiceDeleteApiResponse = + /** status 200 A successful response. */ GosdnsubscriptionmanagementDeleteResponse +export type SubscriptionManagementServiceDeleteApiArg = { + subid: string + timestamp?: string +} +export type TopologyServiceGetTopologyApiResponse = + /** status 200 A successful response. */ TopologyGetTopologyResponse +export type TopologyServiceGetTopologyApiArg = { + timestamp?: string +} +export type TopologyServiceAddLinkApiResponse = + /** status 200 A successful response. */ TopologyAddLinkResponse +export type TopologyServiceAddLinkApiArg = { + topologyAddLinkRequest: TopologyAddLinkRequest +} +export type TopologyServiceDeleteLinkApiResponse = + /** status 200 A successful response. */ TopologyDeleteLinkResponse +export type TopologyServiceDeleteLinkApiArg = { + timestamp?: string + id?: string +} +export type TopologyServiceUpdateLinkApiResponse = + /** status 200 A successful response. */ TopologyUpdateLinkResponse +export type TopologyServiceUpdateLinkApiArg = { + topologyUpdateLinkRequest: TopologyUpdateLinkRequest +} +export type UserServiceGetUsersApiResponse = + /** status 200 A successful response. */ RbacGetUsersResponse +export type UserServiceGetUsersApiArg = { + timestamp?: string +} +export type UserServiceCreateUsersApiResponse = + /** status 200 A successful response. */ RbacCreateUsersResponse +export type UserServiceCreateUsersApiArg = { + rbacCreateUsersRequest: CreateUsers +} +export type UserServiceDeleteUsersApiResponse = + /** status 200 A successful response. */ RbacDeleteUsersResponse +export type UserServiceDeleteUsersApiArg = { + timestamp?: string + username?: string[] +} +export type UserServiceGetUserApiResponse = + /** status 200 A successful response. */ RbacGetUserResponse +export type UserServiceGetUserApiArg = { + timestamp?: string + /** TODO(faseid): reconsider if this is necessary as required, but id is not? */ + name?: string + id?: string +} +export type UserServiceUpdateUsersApiResponse = + /** status 200 A successful response. */ RbacUpdateUsersResponse +export type UserServiceUpdateUsersApiArg = { + rbacUpdateUsersRequest: UpdateUsers +} +export type AppAppDeregisterResponse = { + timestamp?: string +} +export type ProtobufAny = { + /** A URL/resource name that uniquely identifies the type of the serialized + protocol buffer message. This string must contain at least + one "/" character. The last segment of the URL's path must represent + the fully qualified name of the type (as in + `path/google.protobuf.Duration`). The name should be in a canonical form + (e.g., leading "." is not accepted). + + In practice, teams usually precompile into the binary all types that they + expect it to use in the context of Any. However, for URLs which use the + scheme `http`, `https`, or no scheme, one can optionally set up a type + server that maps type URLs to message definitions as follows: + + * If no scheme is provided, `https` is assumed. + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the official + protobuf release, and it is not used for type URLs beginning with + type.googleapis.com. As of May 2023, there are no widely used type server + implementations and no plans to implement one. + + Schemes other than `http`, `https` (or the empty scheme) might be + used with implementation specific semantics. */ + '@type'?: string + [key: string]: any +} +export type GooglerpcStatus = { + code?: number + message?: string + details?: ProtobufAny[] +} +export type AppAppDeregisterRequest = { + timestamp?: string + appname?: string +} +export type ConfigurationmanagementExportSdnConfigResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + sdnConfigData?: string +} +export type ConfigurationmanagementImportSdnConfigResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type RbacLoginResponse = { + timestamp?: string + token?: string +} +export type Login = { + timestamp?: string + username?: string + pwd?: string +} +export type RbacLogoutResponse = { + timestamp?: string +} +export type PndPrincipalNetworkDomain = { + id?: string + name?: string + description?: string +} +export type NetworkelementFlattenedManagedNetworkElement = { + id?: string + name?: string + pid?: string + pluginid?: string +} +export type NetworkelementGetAllFlattenedResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPrincipalNetworkDomain + mne?: NetworkelementFlattenedManagedNetworkElement[] +} +export type GosdnnetworkelementSetResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + id?: string +} +export type NetworkelementAddListResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + responses?: GosdnnetworkelementSetResponse[] +} +export type EncodingDefinesTheValueEncodingFormatsThatAreSupportedByTheGNmiProtocolTheseEncodingsAreUsedByBothTheClientWhenSendingSetMessagesToModifyTheStateOfTheTargetAndTheTargetWhenSerializingDataToBeReturnedToTheClientInBothSubscribeAndGetRpCsReferenceGNmiSpecificationSection23 = + 'JSON' | 'BYTES' | 'PROTO' | 'ASCII' | 'JSON_IETF' +export type TransportGnmiTransportOption = { + compression?: string + grpcDialOptions?: { + [key: string]: string + } + token?: string + encoding?: EncodingDefinesTheValueEncodingFormatsThatAreSupportedByTheGNmiProtocolTheseEncodingsAreUsedByBothTheClientWhenSendingSetMessagesToModifyTheStateOfTheTargetAndTheTargetWhenSerializingDataToBeReturnedToTheClientInBothSubscribeAndGetRpCsReferenceGNmiSpecificationSection23 +} +export type TransportRestconfTransportOption = object +export type ChangedAccordingToStyleGuideHttpsDocsBufBuildBestPracticesStyleGuideEnums = + | 'TYPE_UNSPECIFIED' + | 'TYPE_OPENCONFIG' + | 'TYPE_CONTAINERISED' + | 'TYPE_PLUGIN' +export type TransportTransportOption = { + address?: string + username?: string + password?: string + tls?: boolean + gnmiTransportOption?: TransportGnmiTransportOption + restconfTransportOption?: TransportRestconfTransportOption + type?: ChangedAccordingToStyleGuideHttpsDocsBufBuildBestPracticesStyleGuideEnums +} +export type NetworkelementSetMne = { + address?: string + pid?: string + pluginId?: string + mneName?: string + transportOption?: TransportTransportOption + gnmiSubscribePaths?: string[] + mneId?: string +} +export type NetworkelementAddListRequest = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + mne?: NetworkelementSetMne[] + pid?: string +} +export type NetworkelementChangeState = + | 'CHANGE_STATE_UNSPECIFIED' + | 'CHANGE_STATE_PENDING' + | 'CHANGE_STATE_COMMITTED' + | 'CHANGE_STATE_CONFIRMED' + | 'CHANGE_STATE_INCONSISTENT' +export type GnmiPathElem = { + /** The name of the element in the path. */ + name?: string + /** Map of key (attribute) name to value. */ + key?: { + [key: string]: string + } +} +export type GnmiPath = { + /** Elements of the path are no longer encoded as a string, but rather within + the elem field as a PathElem message. */ + element?: string[] + /** Label to disambiguate path. */ + origin?: string + /** Elements of the path. */ + elem?: GnmiPathElem[] + target?: string +} +export type GnmiValue = { + /** Value of the variable being transmitted. */ + value?: string + type?: EncodingDefinesTheValueEncodingFormatsThatAreSupportedByTheGNmiProtocolTheseEncodingsAreUsedByBothTheClientWhenSendingSetMessagesToModifyTheStateOfTheTargetAndTheTargetWhenSerializingDataToBeReturnedToTheClientInBothSubscribeAndGetRpCsReferenceGNmiSpecificationSection23 +} +export type GnmiDecimal64 = { + /** Set of digits. */ + digits?: string + /** Number of digits following the decimal point. */ + precision?: number +} +export type GnmiScalarArray = { + /** The set of elements within the array. Each TypedValue message should + specify only elements that have a field identifier of 1-7 (i.e., the + values are scalar values). */ + element?: GnmiTypedValue[] +} +export type GnmiTypedValue = { + /** String value. */ + stringVal?: string + /** Integer value. */ + intVal?: string + /** Unsigned integer value. */ + uintVal?: string + /** Bool value. */ + boolVal?: boolean + /** Arbitrary byte sequence value. */ + bytesVal?: string + /** Floating point value. */ + floatVal?: number + decimalVal?: GnmiDecimal64 + leaflistVal?: GnmiScalarArray + anyVal?: ProtobufAny + /** JSON-encoded text. */ + jsonVal?: string + /** JSON-encoded text per RFC7951. */ + jsonIetfVal?: string + /** Arbitrary ASCII text. */ + asciiVal?: string + /** Protobuf binary encoded bytes. The message type is not included. + See the specification at + github.com/openconfig/reference/blob/master/rpc/gnmi/protobuf-vals.md + for a complete specification. */ + protoBytes?: string +} +export type UpdateIsAReUsableMessageThatIsUsedToStoreAParticularPathValuePairReferenceGNmiSpecificationSection21 = + { + path?: GnmiPath + value?: GnmiValue + val?: GnmiTypedValue + /** Number of coalesced duplicates. */ + duplicates?: number + } +export type NotificationIsAReUsableMessageThatIsUsedToEncodeDataFromTheTargetToTheClientANotificationCarriesTwoTypesOfChangesToTheDataTreeDeletedValuesDeleteASetOfPathsThatHaveBeenRemovedFromTheDataTreeUpdatedValuesUpdateASetOfPathValuePairsIndicatingThePathWhoseValueHasChangedInTheDataTreeReferenceGNmiSpecificationSection21 = + { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + prefix?: GnmiPath + alias?: string + /** Data elements that have changed values. */ + update?: UpdateIsAReUsableMessageThatIsUsedToStoreAParticularPathValuePairReferenceGNmiSpecificationSection21[] + /** Data elements that have been deleted. */ + delete?: GnmiPath[] + /** This notification contains a set of paths that are always updated together + referenced by a globally unique prefix. */ + atomic?: boolean + } +export type NetworkelementChange = { + id?: string + age?: string + state?: NetworkelementChangeState + diff?: NotificationIsAReUsableMessageThatIsUsedToEncodeDataFromTheTargetToTheClientANotificationCarriesTwoTypesOfChangesToTheDataTreeDeletedValuesDeleteASetOfPathsThatHaveBeenRemovedFromTheDataTreeUpdatedValuesUpdateASetOfPathValuePairsIndicatingThePathWhoseValueHasChangedInTheDataTreeReferenceGNmiSpecificationSection21 +} +export type NetworkelementGetChangeListResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPrincipalNetworkDomain + change?: NetworkelementChange[] +} +export type NetworkelementSetChangeListResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + responses?: GosdnnetworkelementSetResponse[] +} +export type GosdnnetworkelementOperation = + | 'OPERATION_UNSPECIFIED' + | 'OPERATION_CREATE' + | 'OPERATION_COMMIT' + | 'OPERATION_CONFIRM' +export type NetworkelementSetChange = { + cuid?: string + op?: GosdnnetworkelementOperation +} +export type NetworkelementSetChangeListRequest = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + change?: NetworkelementSetChange[] + pid?: string +} +export type NetworkelementGetChangeResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPrincipalNetworkDomain + change?: NetworkelementChange[] +} +export type NetworkelementSetPathListResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + responses?: GosdnnetworkelementSetResponse[] +} +export type NetworkelementApiOperation = + | 'API_OPERATION_UNSPECIFIED' + | 'API_OPERATION_UPDATE' + | 'API_OPERATION_REPLACE' + | 'API_OPERATION_DELETE' +export type NetworkelementChangeRequest = { + mneid?: string + path?: GnmiPath + value?: GnmiTypedValue + apiOp?: NetworkelementApiOperation +} +export type NetworkelementSetPathListRequest = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + changeRequest?: NetworkelementChangeRequest[] + pid?: string +} +export type PluginRegistryManifest = { + name?: string + firmware?: string + author?: string + version?: string +} +export type PluginRegistryPlugin = { + id?: string + manifest?: PluginRegistryManifest +} +export type ConflictMetadata = { + resourceVersion?: string +} +export type NetworkelementManagedNetworkElement = { + id?: string + name?: string + model?: string + plugin?: PluginRegistryPlugin + mneNotification?: NotificationIsAReUsableMessageThatIsUsedToEncodeDataFromTheTargetToTheClientANotificationCarriesTwoTypesOfChangesToTheDataTreeDeletedValuesDeleteASetOfPathsThatHaveBeenRemovedFromTheDataTreeUpdatedValuesUpdateASetOfPathValuePairsIndicatingThePathWhoseValueHasChangedInTheDataTreeReferenceGNmiSpecificationSection21[] + transportAddress?: string + transportOption?: TransportTransportOption + metadata?: ConflictMetadata + associatedPnd?: string + gnmiSubscribePaths?: string[] +} +export type GosdnnetworkelementGetResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPrincipalNetworkDomain + mne?: NetworkelementManagedNetworkElement +} +export type GosdnnetworkelementDeleteResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type NetworkelementGetIntendedPathResponse = { + timestamp?: string + pnd?: PndPrincipalNetworkDomain + mneNotification?: NotificationIsAReUsableMessageThatIsUsedToEncodeDataFromTheTargetToTheClientANotificationCarriesTwoTypesOfChangesToTheDataTreeDeletedValuesDeleteASetOfPathsThatHaveBeenRemovedFromTheDataTreeUpdatedValuesUpdateASetOfPathValuePairsIndicatingThePathWhoseValueHasChangedInTheDataTreeReferenceGNmiSpecificationSection21[] +} +export type NetworkelementGetPathResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPrincipalNetworkDomain + mneNotification?: NotificationIsAReUsableMessageThatIsUsedToEncodeDataFromTheTargetToTheClientANotificationCarriesTwoTypesOfChangesToTheDataTreeDeletedValuesDeleteASetOfPathsThatHaveBeenRemovedFromTheDataTreeUpdatedValuesUpdateASetOfPathValuePairsIndicatingThePathWhoseValueHasChangedInTheDataTreeReferenceGNmiSpecificationSection21[] +} +export type NetworkelementUpdateNetworkElementResponse = { + timestamp?: string +} +export type TodoChangeNameToFitTheRest = { + timestamp?: string + networkElement?: NetworkelementManagedNetworkElement +} +export type GosdnpluginRegistryGetResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + plugins?: PluginRegistryPlugin[] +} +export type PndGetPndResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPrincipalNetworkDomain +} +export type PndGetPndListResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPrincipalNetworkDomain[] +} +export type PndCreatePndListResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type PndPndCreateProperties = { + name?: string + description?: string +} +export type PndCreatePndListRequest = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string + pnd?: PndPndCreateProperties[] +} +export type PndDeletePndResponse = { + /** Timestamp in nanoseconds since Epoch. */ + timestamp?: string +} +export type AppAppRegisterResponse = { + timestamp?: string + queueconnection?: string +} +export type AppAppRegisterRequest = { + timestamp?: string + appname?: string + token?: string +} +export type GosdnrbacRole = { + id?: string + name?: string + description?: string + permissions?: string[] +} +export type RbacGetRolesResponse = { + timestamp?: string + roles?: GosdnrbacRole[] +} +export type RbacCreateRolesResponse = { + timestamp?: string +} +export type CreateRoles = { + timestamp?: string + roles?: GosdnrbacRole[] +} +export type RbacDeleteRolesResponse = { + timestamp?: string +} +export type RbacDeletePermissionsForRoleResponse = { + timestamp?: string +} +export type RbacGetRoleResponse = { + timestamp?: string + role?: GosdnrbacRole +} +export type RbacUpdateRolesResponse = { + timestamp?: string +} +export type UpdateRoles = { + timestamp?: string + roles?: GosdnrbacRole[] +} +export type TopologyRoute = { + id?: string + targetIPRange?: string + nextHopIP?: string + portID?: string + metric?: string +} +export type TopologyRoutingTable = { + id?: string + nodeID?: string + routes?: TopologyRoute[] + metadata?: ConflictMetadata +} +export type TopologyGetRoutesResponse = { + timestamp?: string + routingTables?: TopologyRoutingTable[] +} +export type TopologyAddRoutingTableResponse = { + timestamp?: string +} +export type TopologyAddRoutingTableRequest = { + timestamp?: string + routingTable?: TopologyRoutingTable +} +export type TopologyDeleteRoutesResponse = { + timestamp?: string +} +export type SubscriptionmanagementResetAllSubscriptionsResponse = { + timestamp?: string +} +export type GosdnsubscriptionmanagementPath = { + elem?: string[] +} +export type SubscriptionmanagementSubscribeOptions = { + gnmiMode?: string + gnmiStreamMode?: string + sampleInterval?: string +} +export type GosdnsubscriptionmanagementSubscription = { + subid?: string + pid?: string + mneid?: string + mneName?: string + paths?: GosdnsubscriptionmanagementPath[] + subscribeOptions?: SubscriptionmanagementSubscribeOptions +} +export type GosdnsubscriptionmanagementGetAllResponse = { + timestamp?: string + subscriptions?: GosdnsubscriptionmanagementSubscription[] +} +export type SubscriptionmanagementAddResponse = { + timestamp?: string +} +export type SubscriptionmanagementSubscriptionManagementServiceAddBody = { + timestamp?: string + subscription?: GosdnsubscriptionmanagementSubscription +} +export type GosdnsubscriptionmanagementGetResponse = { + timestamp?: string + subscriptions?: GosdnsubscriptionmanagementSubscription +} +export type GosdnsubscriptionmanagementDeleteResponse = { + timestamp?: string +} +export type TopologyNode = { + id?: string + name?: string + metadata?: ConflictMetadata +} +export type GosdntopologyConfiguration = { + ip?: string + prefixLength?: string +} +export type TopologyPort = { + id?: string + name?: string + configuration?: GosdntopologyConfiguration + metadata?: ConflictMetadata +} +export type TopologyLink = { + id?: string + name?: string + sourceNode?: TopologyNode + targetNode?: TopologyNode + sourcePort?: TopologyPort + targetPort?: TopologyPort + metadata?: ConflictMetadata +} +export type TopologyTopology = { + links?: TopologyLink[] +} +export type TopologyGetTopologyResponse = { + timestamp?: string + toplogy?: TopologyTopology +} +export type TopologyAddLinkResponse = { + timestamp?: string +} +export type TopologyAddLinkRequest = { + timestamp?: string + link?: TopologyLink +} +export type TopologyDeleteLinkResponse = { + timestamp?: string +} +export type TopologyUpdateLinkResponse = { + timestamp?: string +} +export type TopologyUpdateLinkRequest = { + timestamp?: string + link?: TopologyLink +} +export type RbacUser = { + id?: string + name?: string + roles?: { + [key: string]: string + } + password?: string + token?: string + metadata?: ConflictMetadata +} +export type RbacGetUsersResponse = { + timestamp?: string + user?: RbacUser[] +} +export type RbacCreateUsersResponse = { + timestamp?: string +} +export type CreateUsers = { + timestamp?: string + user?: RbacUser[] +} +export type RbacDeleteUsersResponse = { + timestamp?: string +} +export type RbacGetUserResponse = { + timestamp?: string + user?: RbacUser +} +export type RbacUpdateUsersResponse = { + timestamp?: string +} +export type RbacUpdateUser = { + id?: string + name?: string + roles?: { + [key: string]: string + } + password?: string + token?: string + metadata?: ConflictMetadata +} +export type UpdateUsers = { + timestamp?: string + user?: RbacUpdateUser[] +} +export const { + useAppServiceDeregisterMutation, + useConfigurationManagementServiceExportSdnConfigQuery, + useConfigurationManagementServiceImportSdnConfigMutation, + useAuthServiceLoginMutation, + useAuthServiceLogoutMutation, + useNetworkElementServiceGetAllFlattenedQuery, + useNetworkElementServiceAddListMutation, + useNetworkElementServiceGetChangeListQuery, + useNetworkElementServiceSetChangeListMutation, + useNetworkElementServiceGetChangeQuery, + useNetworkElementServiceSetPathListMutation, + useNetworkElementServiceGetQuery, + useNetworkElementServiceDeleteMutation, + useNetworkElementServiceGetIntendedPathQuery, + useNetworkElementServiceGetPathQuery, + useNetworkElementServiceUpdateMutation, + usePluginInternalServiceAvailablePluginsQuery, + usePndServiceGetPndQuery, + usePndServiceGetPndListQuery, + usePndServiceCreatePndListMutation, + usePndServiceDeletePndMutation, + useAppServiceRegisterMutation, + useRoleServiceGetRolesQuery, + useRoleServiceCreateRolesMutation, + useRoleServiceDeleteRolesMutation, + useRoleServiceDeletePermissionsForRoleMutation, + useRoleServiceGetRoleQuery, + useRoleServiceUpdateRolesMutation, + useRoutingTableServiceGetRoutesQuery, + useRoutingTableServiceAddRoutingTableMutation, + useRoutingTableServiceDeleteRouteMutation, + useSubscriptionManagementServiceResetAllSubscriptionsQuery, + useSubscriptionManagementServiceGetAllQuery, + useSubscriptionManagementServiceAddMutation, + useSubscriptionManagementServiceGetQuery, + useSubscriptionManagementServiceDeleteMutation, + useTopologyServiceGetTopologyQuery, + useTopologyServiceAddLinkMutation, + useTopologyServiceDeleteLinkMutation, + useTopologyServiceUpdateLinkMutation, + useUserServiceGetUsersQuery, + useUserServiceCreateUsersMutation, + useUserServiceDeleteUsersMutation, + useUserServiceGetUserQuery, + useUserServiceUpdateUsersMutation, +} = injectedRtkApi diff --git a/react-ui/src/shared/components/README.md b/react-ui/src/shared/components/README.md new file mode 100644 index 000000000..6694ec6f8 --- /dev/null +++ b/react-ui/src/shared/components/README.md @@ -0,0 +1,3 @@ +#### Documentation + +Shared components are components that will be reused. Each shared component is completely isolated by other components as well as the rest of the project. \ No newline at end of file diff --git a/react-ui/src/shared/components/background/background.view.tsx b/react-ui/src/shared/components/background/background.view.tsx new file mode 100644 index 000000000..27cf56ceb --- /dev/null +++ b/react-ui/src/shared/components/background/background.view.tsx @@ -0,0 +1,92 @@ +import { useEffect, useRef, useState } from 'react'; + +const AnimatedBackground = ({ children }) => { + const containerRef = useRef(null); + const [linePaths, setLinePaths] = useState([]); + + useEffect(() => { + const updatePaths = () => { + if (containerRef.current) { + const box = containerRef.current.getBoundingClientRect(); + const width = box.width; + const height = box.height; + + // Calculate starting points and angles for parallel lines + const startX = width * 0; // Start from right side + const startY = height * 0.9; // Start from bottom + const endX = width * 1.2; // End at 30% of width + const endY = height * -0.3; // End at 30% of height + const spacing = 80; // 2em spacing between lines + + // Calculate angle and offsets + const angle = Math.atan2(startY - endY, startX - endX); + const xOffset = spacing * Math.sin(angle); + const yOffset = spacing * Math.cos(angle); + + // Create 5 parallel lines + const paths = Array.from({ length: 7 }).map((_, index) => { + const startXOffset = index * xOffset; + const startYOffset = index * yOffset; + + return `M ${startX - startXOffset} ${startY - startYOffset} + L ${endX - startXOffset} ${endY - startYOffset}`; + }); + + setLinePaths(paths); + } + }; + + updatePaths(); + window.addEventListener('resize', updatePaths); + return () => window.removeEventListener('resize', updatePaths); + }, []); + + return ( + <div ref={containerRef} className="position-relative min-vh-100"> + + {/* Animated lines */} + <div className="position-absolute w-100 h-100"> + <svg className="w-100 h-100"> + {linePaths.map((path, index) => ( + <g key={index}> + {/* Background line */} + {/* Animated border */} + <path + d={path} + fill="none" + stroke={`${index % 2 === 0 ? 'rgba(179, 80, 224, 0.4)' : 'rgba(150, 50, 190, .2)'}`} + strokeWidth="2" + strokeLinecap="round" + strokeDasharray="40 240" + style={{ + animation: `dash ${0.4 * index + 20}s linear infinite`, + }} + /> + </g> + ))} + </svg> + </div> + + {/* Content container */} + <div className="position-relative" style={{ zIndex: 10 }}> + {children} + </div> + + <style> + {` + @keyframes dash { + from { + stroke-dashoffset: 280; + } + to { + stroke-dashoffset: -280; + } + } + + `} + </style> + </div> + ); +}; + +export default AnimatedBackground; \ No newline at end of file diff --git a/react-ui/src/shared/components/box/gridBox.view.scss b/react-ui/src/shared/components/box/gridBox.view.scss new file mode 100644 index 000000000..38d6f9f3b --- /dev/null +++ b/react-ui/src/shared/components/box/gridBox.view.scss @@ -0,0 +1,73 @@ +@import "/src/shared/style/colors.scss"; + +.grid-box:hover .grid-box-dependency { + opacity: 0.7; + transition: opacity 0.3s ease-in-out; +} + +.grid-box-dependency { + opacity: 0.4; + font-size: 0.9em; +} + +.grid-box .content { + overflow-x: clip; + overflow-y: auto; +} + +$box-padding: 1.5em; +$border-radius: 0.25em; +$border-width: 2px; +$transition-duration: 0.3s; + +.c-box { + padding: $box-padding / 2 $box-padding !important; + background-color: white; + position: relative; + transition: box-shadow $transition-duration ease-in-out; + + @extend .rounded; + box-shadow: $box-shadow; + + &:hover { + box-shadow: 0 0.5rem 1rem rgba(map-get($theme-colors, "primary"), 0.2); + + &::before { + opacity: 1; + } + } + + &.disabled { + box-shadow: 0 0.5rem 1rem rgba(map-get($theme-colors, "disabled"), 0.2); + @extend .border-gradient-disabled; + } + @extend .border-gradient-primary; +} + +.c-box-title { + $text-color: black; + color: $text-color; + padding: 0.5em 0; + margin-top: 0.2em; + + small { + font-size: 0.75em; + color: rgba($text-color, 0.65); + &::before { + content: "("; + } + &::after { + content: ")"; + } + } +} + +.rounded { + border-radius: $border-radius; +} + +.abstract-box { + padding: $box-padding; + font-size: 0.9em; + border-radius: calc($border-radius / 2); +} diff --git a/react-ui/src/shared/components/box/gridBox.view.tsx b/react-ui/src/shared/components/box/gridBox.view.tsx new file mode 100644 index 000000000..0e3b0bffe --- /dev/null +++ b/react-ui/src/shared/components/box/gridBox.view.tsx @@ -0,0 +1,55 @@ +import { faGripVertical, IconDefinition } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import UpdateIndicator from '@layout/grid.layout/update-inidicator.layout/update-indicator.layout' +import { Category, CategoryType } from '@shared/types/category.type' +import { Col, Container, Row } from 'react-bootstrap' +import { Scrollbar } from '../scrollbar/Scrollbar.view' + +interface GridBoxProps { + title: string + title_icon: IconDefinition + children: React.ReactNode + className?: string + disabled?: boolean +} + +export const GridBox: React.FC<GridBoxProps> = ({ + children, + title, + title_icon, + className = '', + disabled = false, +}) => { + return ( + <div className="grid-box h-100"> + <Container + fluid + className={`c-box d-flex ${disabled && 'text-disabled disabled'} flex-column h-100 ${className}`}> + <div> + {!disabled && ( + <UpdateIndicator + category={Category.DEVICE as CategoryType} + updateInterval={15000} + /> + )} + <FontAwesomeIcon icon={faGripVertical} className="drag-handle" /> + <Row className="mb-0"> + <Col xs={12}> + <h4 className={`c-box-title ${disabled && 'text-disabled'}`}> + <FontAwesomeIcon + icon={title_icon} + size="1x" + className={`me-2 ${disabled ? 'text-disabled' : 'text-primary'}`} + /> + {title} + </h4> + </Col> + </Row> + </div> + <Scrollbar scrollX={false} className="flex-grow-1 content"> + {children} + </Scrollbar> + </Container> + </div> + ) +} 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 new file mode 100755 index 000000000..093dde850 --- /dev/null +++ b/react-ui/src/shared/components/json_viewer/reducer/json_viewer.reducer.ts @@ -0,0 +1,83 @@ +import { PayloadAction, createSlice } from '@reduxjs/toolkit' + +export enum CollapseValues { + TOGGLE, + FALSE, + TRUE +} + +const CollapseActions = { + [CollapseValues.TOGGLE]: (collapse: boolean) => { return collapse = !collapse }, + [CollapseValues.FALSE]: () => { return false }, + [CollapseValues.TRUE]: () => { return true }, +} + +type Identifier = { + key: string, + nested: number +} + + +// containg object location and collapsed information +interface CollapsedItem { + identifier: Identifier + collapsed: boolean +} + +export interface ReducerState { + /** + * Meta container containg identifier of + * all non collapsed json objects + */ + collapseContainer: Array<CollapsedItem> +} + +const initialState: ReducerState = { + collapseContainer: [], +} + +export const compareIdentifier = (a: Identifier, b: Identifier): boolean => { + return a.key === b.key && a.nested === b.nested; +} + +/** + * Every component instance has its own id. + * This id is getting used as key to define the respective object container + */ +const JsonViewerSlice = createSlice({ + name: 'json_viewer', + initialState, + reducers: { + toggleCollapse: (state, { payload }: PayloadAction<{ identifier: Identifier, collapse: CollapseValues }>) => { + const { identifier, collapse } = payload + + // potentially find already collapsed + const i = state.collapseContainer.findIndex(i => compareIdentifier(identifier, i.identifier)) + + + if (i === -1) { + // create new collapse + const newItem = { identifier, collapsed: true } + state.collapseContainer = [...state.collapseContainer, newItem] + return; + } + + // update nested attribute + state.collapseContainer = state.collapseContainer.map((item, index) => { + if (index !== i) { + return item + } + + return { + ...item, + collapsed: CollapseActions[collapse](item.collapsed) + } + }) + } + } +}) + +export const { toggleCollapse, } = JsonViewerSlice.actions + + +export default JsonViewerSlice.reducer diff --git a/react-ui/src/shared/components/json_viewer/view/json_viewer.scss b/react-ui/src/shared/components/json_viewer/view/json_viewer.scss new file mode 100755 index 000000000..832766470 --- /dev/null +++ b/react-ui/src/shared/components/json_viewer/view/json_viewer.scss @@ -0,0 +1,72 @@ +@import "/src/shared/style/colors.scss"; + +.list-group-tr { + list-style-type: none; + margin: 0; + padding: 0 0; +} + +.list-item-td { + & > td { + color: lighten(map-get($map: $theme-colors, $key: "black"), 20%) !important; + background-color: white !important; + border: 0; + padding: 0.2em 0 !important; + } + + & > td:nth-child(2) { + text-align: left; + } + + &:hover > td { + background-color: map-get($theme-colors, "primary-hover") !important; + } + + &:hover .icons { + color: map-get($theme-colors, "black") !important; + opacity: 100%; + transition: gap 0.3s; + gap: 0.7em; + } + + & > .text-end { + vertical-align: middle; + padding-top: 0 !important; + padding-right: 5px !important; + } + + & > .text-element { + max-width: 100px; + } +} + +.list-item-td.object { + & > td { + color: map-get($map: $theme-colors, $key: "black") !important; + } + + &:hover { + cursor: pointer; + } +} + +.list-item-td:not(.object) > td:first-child { + border-left: 2px solid black; + padding-left: 0.2em !important; +} + +td .icon { + font-size: 0.8em; +} + +.icons { + color: lighten(map-get($map: $theme-colors, $key: "dark"), 20%); + gap: 0.5em; + opacity: 0%; + + min-width: 3em; +} + +span.highlight { + background-color: darken(yellow, $amount: 0.5); +} diff --git a/react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx b/react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx new file mode 100755 index 000000000..02a08978c --- /dev/null +++ b/react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx @@ -0,0 +1,163 @@ +import { faAlignRight, faPenToSquare, faTrashCan } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { insertMarkTags } from '@helper/text' +import DOMPurify from 'dompurify' +import React, { Suspense, useMemo, useRef } from 'react' +import { Form, Table } from 'react-bootstrap' +import { useTranslation } from 'react-i18next' +import Skeleton from 'react-loading-skeleton' +import { useJsonViewer } from '../viewmodel/json_viewer.viewmodel' +import './json_viewer.scss' + +type JsonViewerProbs = { + json: JSON + options?: { + searchEnabled?: boolean + editable?: boolean + } +} + +export const JsonViewer = ({ + json, + options = { searchEnabled: true, editable: true }, +}: JsonViewerProbs) => { + const { t } = useTranslation('common') + const htmlContainer = useRef(null) + const search = useRef<HTMLInputElement>(null) + + const { getSubset, isCollapsed, collapseable, collapse, parameterizedJson, searchTerm } = + useJsonViewer({ json, search, container: htmlContainer }) + + const renderInner = ( + innerJson: JSON, + nested: number = 0, + parentKey: string = '', + path: string = '/network-instance/0/', + ): JSX.Element => { + path += parentKey + (parentKey === '' ? '' : '/') + + if (Object.entries(innerJson).length === 0) { + return ( + <tr> + <td> + <Skeleton count={3}></Skeleton> + </td> + </tr> + ) + } + + return Object.entries(innerJson).map(([key, child]): JSX.Element => { + let collapsed = isCollapsed(key, nested) + + // display only keys and values that matches + if (searchTerm !== '') { + const foundPaths = parameterizedJson.current.filter(_path => _path === path) + + //collapsed = !collapsed ? !!foundPaths.length : collapsed + collapsed = !!foundPaths.length + } + + const isObject = child instanceof Object + let readableValue: string = isObject ? '' : DOMPurify.sanitize(child) + + if (searchTerm !== '' && readableValue.includes(searchTerm)) { + readableValue = insertMarkTags(readableValue, searchTerm) + } + + const icon = isObject ? ( + <span className={collapsed ? 'fa-rotate-90' : ''}>></span> + ) : ( + <FontAwesomeIcon className="icon fa-rotate-180" icon={faAlignRight} size="xs" /> + ) + + // determine the margin-left: n indent + let tabs = 0.0 + for (let i = 0; i < nested; i++) { + tabs += 0.4 + } + + let concatenatedKey = key + let innerChild = child + while (innerChild.length === 1) { + const innerKey = Object.keys(innerChild)[0] + concatenatedKey += '/' + innerKey + innerChild = innerChild[innerKey] + } + + concatenatedKey = DOMPurify.sanitize(concatenatedKey) + + if (searchTerm !== '' && concatenatedKey.includes(searchTerm)) { + concatenatedKey = insertMarkTags(concatenatedKey, searchTerm) + } + + return ( + <React.Fragment key={`${nested}-${key}`}> + <tr + className={ + 'list-item-td ' + key + ' ' + nested + ' ' + (isObject ? 'object' : '') + } + data-copy-value={readableValue} + onClick={() => { + isObject ? collapse(key, nested, child) : null + }}> + <td + style={{ marginLeft: tabs + 'em' }} + className={'d-flex align-items-center '}> + {icon} + <span> +   + <span dangerouslySetInnerHTML={{ __html: concatenatedKey }} /> + </span> + </td> + <td + className="text-element text-truncate" + dangerouslySetInnerHTML={{ __html: readableValue }}></td> + {options?.editable && ( + <td className="text-end"> + <div className="d-flex icons justify-content-end align-items-center"> + <FontAwesomeIcon icon={faPenToSquare} size="sm" /> + <FontAwesomeIcon icon={faTrashCan} size="sm" /> + </div> + </td> + )} + </tr> + {isObject && + collapsed && + renderInner(innerChild, nested + 1, concatenatedKey, path)} + </React.Fragment> + ) + }) + } + + const renderJson = (json: JSON): JSX.Element => { + return ( + <Table className="m-0 p-0 list-unstyled"> + <tbody>{renderInner(json)}</tbody> + </Table> + ) + } + + const Hierarchy = useMemo(() => { + const subset = getSubset(json) + return <Suspense>{renderJson(subset)}</Suspense> + }, [json, collapseable, searchTerm]) + + const Search = (): React.ReactElement => { + return ( + <Form.Group controlId="json_viewer.search" className="p-0 "> + <Form.Control + type="text" + placeholder={t('device.search.placeholder')} + ref={search} + /> + </Form.Group> + ) + } + + return ( + <div ref={htmlContainer}> + {options?.searchEnabled && Search()} + {Hierarchy} + </div> + ) +} diff --git a/react-ui/src/shared/components/json_viewer/viewmodel/json_viewer.viewmodel.tsx b/react-ui/src/shared/components/json_viewer/viewmodel/json_viewer.viewmodel.tsx new file mode 100644 index 000000000..1662058dc --- /dev/null +++ b/react-ui/src/shared/components/json_viewer/viewmodel/json_viewer.viewmodel.tsx @@ -0,0 +1,161 @@ +import { faCopy } from "@fortawesome/free-solid-svg-icons"; +import { useAppDispatch, useAppSelector } from "@hooks"; +import { useMenu } from "@provider/menu/menu.provider"; +import { useUtils } from "@provider/utils.provider"; +import React, { MutableRefObject, useEffect, useMemo, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { compareIdentifier, toggleCollapse } from "../reducer/json_viewer.reducer"; + +export enum CollapseValues { + TOGGLE, + FALSE, + TRUE +} + +interface JsonViewerViewModelType { + json: JSON, + search: React.RefObject<HTMLInputElement>, + container: React.RefObject<HTMLElement> +} + +export const useJsonViewer = ({ json, search, container }: JsonViewerViewModelType) => { + const { collapseContainer } = useAppSelector(state => state.json_viwer) + const dispatch = useAppDispatch(); + const [searchTerm, setSearchTerm] = useState(''); + const { toClipboard } = useUtils(); + const { t } = useTranslation('common'); + const { subscribe } = useMenu(); + + // Map that contains a filtered key list with all keys that are found by the searchTerm + // The number represents + const parameterizedJsonMap = useRef<Array<string>>([]); + + + const getSubset = (json: JSON): JSON => { + let inner = json; + const keys: Array<string> = []; + while (Object.keys(inner).length === 1) { + const key: string = Object.keys(inner)[0]; + inner = inner[key]; + keys.push(key); + } + + return inner + } + + const isCollapsed = (key: string, nested: number): boolean => { + const item = collapseContainer + .filter(({ identifier, collapsed }) => compareIdentifier(identifier, { key, nested }) && collapsed); + return !!item.length; + } + + const collapse = (key: string, nested: number, json: object, collapseState: CollapseValues = CollapseValues.TOGGLE) => { + const identifier = { key, nested }; + dispatch(toggleCollapse({ identifier, collapse: collapseState })) + + const keys = Object.keys(json) + if (keys.length === 1) { + collapse(keys[0], nested + 1, json[keys[0]], CollapseValues.TRUE) + } + } + + const handleSearchInput = () => { + setSearchTerm(search.current!.value) + } + + const registerMenuOptions = () => { + if (!container.current) { + return () => { } + } + + const subscription = subscribe({ + target: container.current, + actions: [ + { + key: t('json_viewer.copy'), + icon: faCopy, + action: (clickedElement) => { + let parent = clickedElement; + while (parent && parent.tagName !== 'TR') { + parent = parent.parentNode; + } + + const copyValue = parent.dataset.copyValue + toClipboard(copyValue) + } + } + ] + }) + + return () => { + subscription.unsubscribe(); + } + } + + const innerSearch = (json: object, searchValue: string, parentKey: string = "", path: string = "/"): boolean => { + let found = false; + path += parentKey + (parentKey === "" ? "" : "/") + + for (const [key, childJson] of Object.entries(json)) { + // leaf + if (!(childJson instanceof Object)) { + const marked = key.includes(searchValue) || childJson.includes(searchValue); + if (marked) { + parameterizedJsonMap.current.push(path + key) + found = true + } + + continue + } + + if (key.includes(searchValue)) { + parameterizedJsonMap.current.push(path + key) + found = true + } + + const marked = innerSearch(childJson, searchValue, key, path); + + // if found in some child leaf save the parent + if (marked) { + found = true + parameterizedJsonMap.current.push(path) + } + } + + return found + } + + const parameterizedJson = useMemo<MutableRefObject<string[]>>(() => { + parameterizedJsonMap.current = [] + if (searchTerm === "") { + return json + } + + innerSearch(json, searchTerm); + return parameterizedJsonMap + }, [searchTerm, json]) + + useEffect(() => { + const unsubscribe = registerMenuOptions(); + + if (search.current) { + search.current.addEventListener('input', handleSearchInput) + } + + return () => { + if (search.current) { + search.current.removeEventListener('input', handleSearchInput) + } + unsubscribe() + } + }, []) + + return { + getSubset, + collapseable: collapseContainer, + isCollapsed, + collapse, + searchTerm, + parameterizedJson + } +} \ No newline at end of file diff --git a/react-ui/src/shared/components/scrollbar/Scrollbar.view.tsx b/react-ui/src/shared/components/scrollbar/Scrollbar.view.tsx new file mode 100644 index 000000000..16191c32f --- /dev/null +++ b/react-ui/src/shared/components/scrollbar/Scrollbar.view.tsx @@ -0,0 +1,25 @@ +import './scrollbar.scss' + +export const Scrollbar = ({ children, className = '', scrollX = true, scrollY = true }) => { + // Determine overflow classes based on scroll options + const getOverflowClass = () => { + if (scrollX && scrollY) return 'overflow-auto' + if (scrollX) return 'overflow-x-auto overflow-y-hidden' + if (scrollY) return 'overflow-y-auto overflow-x-hidden' + return 'overflow-hidden' + } + + // Determine scroll direction classes + const getScrollDirectionClass = () => { + const classes = ['scrollable-content'] + if (scrollX) classes.push('scroll-x') + if (scrollY) classes.push('scroll-y') + return classes.join(' ') + } + + return ( + <div className={`custom-scrollbar position-relative h-100 overflow-hidden ${className}`}> + <div className={`${getScrollDirectionClass()} ${getOverflowClass()}`}>{children}</div> + </div> + ) +} diff --git a/react-ui/src/shared/components/scrollbar/scrollbar.scss b/react-ui/src/shared/components/scrollbar/scrollbar.scss new file mode 100644 index 000000000..5fb481933 --- /dev/null +++ b/react-ui/src/shared/components/scrollbar/scrollbar.scss @@ -0,0 +1,50 @@ +@import "/src/shared/style/colors.scss"; + +// Import or reference to your theme variables +$scrollbar-width: 6px; +$scrollbar-track-bg: rgba(grey, 0.1); +$scrollbar-thumb-bg: map-get($theme-colors, "black"); +$scrollbar-thumb-hover-bg: map-get($theme-colors, "primary-hover"); + +.custom-scrollbar { + --scrollbar-width: #{$scrollbar-width}; + --scrollbar-track-bg: #{$scrollbar-track-bg}; + --scrollbar-thumb-bg: #{$scrollbar-thumb-bg}; + --scrollbar-thumb-hover-bg: #{$scrollbar-thumb-hover-bg}; + + .scrollable-content { + height: 100%; + width: 100%; + + // Padding and margin for scrollbars + &.scroll-y { + padding-right: calc(#{$scrollbar-width} + 4px); + margin-right: calc(#{$scrollbar-width} * -1); + } + + &.scroll-x { + padding-bottom: calc(#{$scrollbar-width} + 4px); + margin-bottom: calc(#{$scrollbar-width} * -1); + } + + // Webkit scrollbar styles + &::-webkit-scrollbar { + width: $scrollbar-width; + height: $scrollbar-width; + } + + &::-webkit-scrollbar-track { + background: $scrollbar-track-bg; + } + + &::-webkit-scrollbar-thumb { + background-color: $scrollbar-thumb-hover-bg; + border-radius: calc(#{$scrollbar-width} / 2); + transition: background-color 0.2s ease-in-out; + } + + // Firefox scrollbar styles + scrollbar-width: thin; + scrollbar-color: $scrollbar-thumb-hover-bg $scrollbar-track-bg; + } +} diff --git a/react-ui/src/shared/error/Error.ts b/react-ui/src/shared/error/Error.ts new file mode 100644 index 000000000..b4c878601 --- /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 000000000..a1655e19d --- /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/coookie.ts b/react-ui/src/shared/helper/coookie.ts new file mode 100755 index 000000000..d15e2702c --- /dev/null +++ b/react-ui/src/shared/helper/coookie.ts @@ -0,0 +1,14 @@ +export const getCookieValue = (name: string): string => { + const regex = new RegExp(`(^| )${name}=([^;]+)`) + const match = document.cookie.match(regex) + + if (match) { + return match[2]; + } + + return ''; +} + +export const setCookieValue = (key: string, value: string): void => { + document.cookie = `${key}=${value}; Secure; SameSite=Lax; path=/`; +} \ No newline at end of file diff --git a/react-ui/src/shared/helper/debug.ts b/react-ui/src/shared/helper/debug.ts new file mode 100644 index 000000000..db10a0979 --- /dev/null +++ b/react-ui/src/shared/helper/debug.ts @@ -0,0 +1,11 @@ +export const warnMessage = (message: string) => { + if (window?.env === 'development') { + console.warn("Debug: \n" + message) + } +} + +export const infoMessage = (message: string) => { + if (window?.env === 'development') { + console.info("Info: \n" + message) + } +} \ No newline at end of file diff --git a/react-ui/src/shared/helper/hash.ts b/react-ui/src/shared/helper/hash.ts new file mode 100644 index 000000000..e185c87a5 --- /dev/null +++ b/react-ui/src/shared/helper/hash.ts @@ -0,0 +1,11 @@ +export const stringToHash = (text: string): number => { + let hash = 0; + + if (text.length === 0) return hash; + + for (const char of text) { + hash ^= char.charCodeAt(0); + } + + return hash; +} \ No newline at end of file diff --git a/react-ui/src/shared/helper/text.ts b/react-ui/src/shared/helper/text.ts new file mode 100644 index 000000000..6aee13790 --- /dev/null +++ b/react-ui/src/shared/helper/text.ts @@ -0,0 +1,12 @@ + +import DOMPurify from 'dompurify' + +export const insertMarkTags = (text: string, search: string): string => { + const start = text.indexOf(search) + if (start === -1) { + return DOMPurify.sanitize(text) + } + const end = start + search.length + + return DOMPurify.sanitize(text.substring(0, start)) + "<span class='highlight'>" + DOMPurify.sanitize(search) + "</span>" + DOMPurify.sanitize(text.substring(end, text.length)) +} \ No newline at end of file diff --git a/react-ui/src/shared/icons/icons.ts b/react-ui/src/shared/icons/icons.ts new file mode 100755 index 000000000..9c8791cc9 --- /dev/null +++ b/react-ui/src/shared/icons/icons.ts @@ -0,0 +1,4 @@ +import { library } from '@fortawesome/fontawesome-svg-core' +import { faSpinner } from '@fortawesome/free-solid-svg-icons' + +library.add(faSpinner) \ 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 new file mode 100755 index 000000000..e3728ac6d --- /dev/null +++ b/react-ui/src/shared/layouts/basic.layout.tsx @@ -0,0 +1,12 @@ +import { AuthProvider } from "@provider/auth.provider"; +import { useOutlet } from "react-router-dom"; + +export const BasicLayout = () => { + const outlet = useOutlet(); + + return ( + <AuthProvider> + {outlet} + </AuthProvider> + ) +} \ No newline at end of file diff --git a/react-ui/src/shared/layouts/grid.layout/grid.layout.scss b/react-ui/src/shared/layouts/grid.layout/grid.layout.scss new file mode 100644 index 000000000..0bacb29b5 --- /dev/null +++ b/react-ui/src/shared/layouts/grid.layout/grid.layout.scss @@ -0,0 +1,88 @@ +@import "/src/shared/style/colors.scss"; + +.custom-resize-handle { + position: absolute; + right: 0; + bottom: 0; + width: 20px; + height: 20px; + cursor: se-resize; + + .resize-handle-inner { + position: absolute; + right: 4px; + bottom: 4px; + width: 12px; + height: 12px; + border-right: 2px solid rgba(0, 0, 0, 0.2); + border-bottom: 2px solid rgba(0, 0, 0, 0.2); + } +} + +.react-grid-item { + &.resizing { + z-index: 1; + will-change: transform; + } +} + +.react-grid-item { + .custom-resize-handle { + opacity: 0; + transition: opacity 0.2s ease-in-out; + } + + &:hover .custom-resize-handle { + opacity: 1; + } +} + +.drag-handle { + position: absolute; + top: 0; + right: 0; + padding: 10px; + cursor: grab; + color: map-get($theme-colors, "dark"); + background-color: lighten(map-get($theme-colors, primary), 38%); + border-radius: 0 0.25rem 0 0.25rem; + border-left: 1px solid lighten(map-get($theme-colors, dark), 35%); + border-bottom: 1px solid lighten(map-get($theme-colors, dark), 35%); + z-index: 10; + + &:hover { + color: map-get($theme-colors, primary); + background-color: lighten(map-get($theme-colors, primary), 35%); + } + + &:active { + cursor: grabbing; + } +} + +.react-grid-item.react-grid-placeholder { + background: lighten(map-get($theme-colors, primary), 10%) !important; + opacity: 0.2; + transition-duration: 100ms; + z-index: 2; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.react-resizable-handle-se { + position: absolute; + right: 0; + bottom: 0; + width: 20px; + height: 20px; + background-image: url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiPjxwYXRoIGQ9Ik02IDZIMHYtNmg2djZ6TTUgMUgxdjRoNFYxeiIgZmlsbD0iIzk5OTk5OSIvPjwvc3ZnPg=="); + background-position: bottom right; + background-repeat: no-repeat; + background-size: 10px 10px; + cursor: se-resize; + z-index: 10; +} diff --git a/react-ui/src/shared/layouts/grid.layout/grid.layout.tsx b/react-ui/src/shared/layouts/grid.layout/grid.layout.tsx new file mode 100644 index 000000000..b2d36561a --- /dev/null +++ b/react-ui/src/shared/layouts/grid.layout/grid.layout.tsx @@ -0,0 +1,79 @@ +import React, { ReactElement, useEffect, useRef, useState } from 'react' +import RGL, { WidthProvider } from 'react-grid-layout' + +import 'react-grid-layout/css/styles.css' +import 'react-resizable/css/styles.css' +import './grid.layout.scss' + +const ResponsiveGridLayout = WidthProvider(RGL) + +interface GridLayoutProps { + children: ReactElement +} + +const RowCount = 2 +const padding = 80 + +export const GridLayout: React.FC<GridLayoutProps> = ({ children }) => { + const [rowHeight, setRowHeight] = useState<number>(0) + const [containerHeight, setContainerHeight] = useState<number>(0) + const [mounted, setMounted] = useState<boolean>(false) + const containerRef = useRef<HTMLDivElement>(null) + + const layouts = [ + { i: 'device-list', x: 0, y: 0, w: 2, h: 1, minW: 1, minH: 1 }, + { i: 'device-metadata', x: 0, y: 1, w: 2, h: 1, minW: 1, minH: 1 }, + { i: 'device-details', x: 3, y: 0, w: 2, h: 2, minW: 1, minH: 1 }, + ] + + const calcHeights = () => { + const container = containerRef.current + if (!container) { + const height = document.body.clientHeight * 0.7 + setRowHeight(Math.floor(height / RowCount)) + return + } + const { top } = container.getBoundingClientRect() + const height = document.body.clientHeight - (top + padding) + setContainerHeight(height) + setRowHeight(Math.floor(height / RowCount)) + } + + useEffect(() => { + calcHeights() + }, [containerRef.current]) + + useEffect(() => { + setMounted(true) + window.addEventListener('resize', calcHeights) + return () => window.removeEventListener('resize', calcHeights) + }, []) + + return ( + <div + ref={containerRef} + style={{ + display: mounted ? 'block' : 'none', + height: `${containerHeight}px`, + }}> + <ResponsiveGridLayout + cols={5} + layout={layouts} + maxRows={RowCount} + rowHeight={rowHeight} + margin={[20, 20]} + draggableHandle=".drag-handle" + isDraggable={true} + isResizable={true} + resizeHandles={['se']} + useCSSTransforms={true} + resizeHandle={ + <div className="custom-resize-handle"> + <div className="resize-handle-inner" /> + </div> + }> + {children.props.children} + </ResponsiveGridLayout> + </div> + ) +} diff --git a/react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.layout.tsx b/react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.layout.tsx new file mode 100644 index 000000000..d71bb6cce --- /dev/null +++ b/react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.layout.tsx @@ -0,0 +1,52 @@ +import { faCircle } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import React, { useState } from 'react' +import { Overlay, Tooltip } from 'react-bootstrap' +import { useTranslation } from 'react-i18next' +import { CategoryType } from '../types' +import { useUpdateIndicatorViewModel } from './update-indicator.viewmodel' + +interface UpdateIndicatorProps { + category: CategoryType + updateInterval: number +} + +const UpdateIndicator: React.FC<UpdateIndicatorProps> = ({ category, updateInterval }) => { + const [showTooltip, setShowTooltip] = useState(false) + const { t } = useTranslation('common') + const target = React.useRef(null) + const { secondsSinceUpdate, getStatusColor } = useUpdateIndicatorViewModel(category) + + return ( + <div + className="position-absolute" + style={{ + top: 0, + right: '40px', + padding: '10px', + zIndex: 10 + }} + > + <div + ref={target} + onMouseEnter={() => setShowTooltip(true)} + onMouseLeave={() => setShowTooltip(false)} + style={{ cursor: 'pointer' }} + > + <FontAwesomeIcon + icon={faCircle} + className={getStatusColor(updateInterval)} + size="sm" + /> + </div> + + <Overlay target={target.current} show={showTooltip} placement="bottom"> + <Tooltip id="update-tooltip"> + {t('device.box.lastUpdate', { seconds: secondsSinceUpdate })} + </Tooltip> + </Overlay> + </div> + ) +} + +export default UpdateIndicator \ No newline at end of file diff --git a/react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.viewmodel.tsx b/react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.viewmodel.tsx new file mode 100644 index 000000000..bb91b0b17 --- /dev/null +++ b/react-ui/src/shared/layouts/grid.layout/update-inidicator.layout/update-indicator.viewmodel.tsx @@ -0,0 +1,39 @@ +import { useAppSelector } from "@hooks" +import { CategoryType } from "@shared/types/category.type" +import { useEffect, useState } from 'react' + +export const useUpdateIndicatorViewModel = (category: CategoryType) => { + const { thunks } = useAppSelector((state) => state.routine) + const [secondsSinceUpdate, setSecondsSinceUpdate] = useState<number>(-1) + + useEffect(() => { + const updateTimer = () => { + const lastupdate = thunks[category]?.lastupdate + if (lastupdate) { + setSecondsSinceUpdate(Math.round((Date.now() - lastupdate) / 1000)) + } else { + setSecondsSinceUpdate(-1) + } + } + + // Initial update + updateTimer() + + // Set up interval for updates + const intervalId = setInterval(updateTimer, 1000) + + return () => clearInterval(intervalId) + }, [category, thunks]) + + const getStatusColor = (updateInterval: number) => { + const updateIntervalSeconds = updateInterval / 1000 + if (secondsSinceUpdate > updateIntervalSeconds * 0.9) return "text-primary" + if (secondsSinceUpdate > updateIntervalSeconds * 1.3) return "text-danger" + return "text-bg-primary" + } + + return { + secondsSinceUpdate, + getStatusColor + } +} \ No newline at end of file diff --git a/react-ui/src/shared/layouts/protected.layout/protected.layout.scss b/react-ui/src/shared/layouts/protected.layout/protected.layout.scss new file mode 100755 index 000000000..6f255d331 --- /dev/null +++ b/react-ui/src/shared/layouts/protected.layout/protected.layout.scss @@ -0,0 +1,61 @@ +@import "/src/shared/style/colors.scss"; + +.head-links { + text-decoration: none; + color: map-get($theme-colors, dark); + font-weight: 500; + margin-right: 20px; + + &:hover { + color: map-get($theme-colors, primary); + } + + &.active { + color: map-get($theme-colors, primary); + font-weight: 600; + } +} + +#navbar { + padding: 1em !important; +} + +// Add these styles to your protected.layout.scss +nav { + border-radius: $border-radius $border-radius; + padding: 0 !important; + + .head-links { + text-decoration: none; + color: map-get($theme-colors, "dark"); + padding: 8px 16px; + margin: 0 4px; + border-radius: 12px; + transition: all 0.2s ease; + + &:hover { + background-color: map-get($theme-colors, "bg-primary"); + } + + &.active { + color: map-get($theme-colors, "primary"); + background-color: map-get($theme-colors, "primary-button"); + } + } + + .dropdown-menu { + border-radius: $border-radius; + box-shadow: $box-shadow; + border: none; + padding: 8px; + + .dropdown-item { + border-radius: 8px; + padding: 8px 16px; + + &:hover { + background-color: map-get($theme-colors, "bg-primary"); + } + } + } +} diff --git a/react-ui/src/shared/layouts/protected.layout/protected.layout.tsx b/react-ui/src/shared/layouts/protected.layout/protected.layout.tsx new file mode 100755 index 000000000..4e54f58de --- /dev/null +++ b/react-ui/src/shared/layouts/protected.layout/protected.layout.tsx @@ -0,0 +1,114 @@ +import { faCircleUser, faRightFromBracket } from "@fortawesome/free-solid-svg-icons"; +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 { fetchPnds, fetchUser } from '@shared/routine/user.routine'; +import React, { useEffect } from "react"; +import { Col, Container, Dropdown, Row } from "react-bootstrap"; +import { useTranslation } from "react-i18next"; +import { Link, Outlet, useNavigate } from "react-router-dom"; +import "./protected.layout.scss"; +import logo from '/public/logo.png'; + + +export const ProtectedLayout = () => { + const { isAuthenticated, logout } = useAuth(); + const { user } = useAppSelector(state => state.user); + const navigate = useNavigate(); + const { t } = useTranslation('common') + const dispatch = useAppDispatch(); + + useEffect(() => { + if (!isAuthenticated()) { + navigate(LOGIN_URL) + return; + } + + dispatch(fetchUser()); + dispatch(fetchPnds()); + }, [dispatch]); + + /** + * Applies active css class to link if the link is active + */ + const handleActiveLink = (targetPath: string): string => { + const href = window.location.href; + return href.includes(targetPath) ? ' active' : ''; + } + + /** renders the corpus for the user icon dropdown */ + const UserIconToggle = React.forwardRef(({ children, onClick }: React.LinkHTMLAttributes<any>, ref: any) => ( + <div + ref={ref} + onClick={(e) => { + e.preventDefault(); + onClick!(e); + }} + > + {children} + </div> + )); + + /** renders the single items inside the user dropdown corpus */ + const UserIconMenu = React.forwardRef( + ({ children, style, className, 'aria-labelledby': labeledBy }: React.LinkHTMLAttributes<any>, ref: any) => { + return ( + <div + ref={ref} + style={style} + className={className} + aria-labelledby={labeledBy} + > + <ul className="list-unstyled"> + {React.Children.toArray(children)} + </ul> + </div> + ); + } + ); + + const HorizontalNavbar = () => { + return ( + <Container fluid className="mb-4"> + <Row> + <Col> + <nav id="navbar" className="bg-white mx-4 mt-4 d-flex align-items-center c-box overflow-visible"> + <Link to="/"><img src={logo} className="mx-4" width={45} 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> + <Link className={"head-links" + handleActiveLink('/configuration_management')} to="/">{t('protected.link.configuration_mgmt')}</Link> + + <Dropdown className="ms-auto px-3"> + <Dropdown.Toggle as={UserIconToggle}> + <FontAwesomeIcon icon={faCircleUser} className="clickable" size="2x" /> + </Dropdown.Toggle> + + <Dropdown.Menu as={UserIconMenu}> + <Dropdown.Item eventKey="1">{user?.name}</Dropdown.Item> + <hr /> + <Dropdown.Item eventKey="2"> + <Link className="text-decoration-none text-reset" to="/">{t('protected.link.settings')}</Link> + </Dropdown.Item> + <Dropdown.Item eventKey="3" onClick={logout}> + <Link className="text-decoration-none text-reset" to="/"><FontAwesomeIcon className="clickable" icon={faRightFromBracket} /><span className="ms-1">{t('global.menu_item.logout')}</span></Link> + </Dropdown.Item> + </Dropdown.Menu> + </Dropdown> + </nav> + </Col> + </Row> + </Container> + ) + } + + return ( + <MenuProvider> + {HorizontalNavbar()} + <div className="px-3"> + <Outlet /> + </div> + </MenuProvider> + ) +}; \ 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 new file mode 100755 index 000000000..77219bdce --- /dev/null +++ b/react-ui/src/shared/provider/auth.provider.tsx @@ -0,0 +1,119 @@ +import { AuthServiceLoginApiArg, AuthServiceLoginApiResponse, useAuthServiceLoginMutation } from "@api/api"; +import { getCookieValue } from "@helper/coookie"; +import { useAppDispatch, useAppSelector } from "@hooks"; +import { DEVICE_URL, LOGIN_URL } from "@routes"; +import { BasicProp } from "@shared/types/interfaces.type"; +import { jwtDecode } from "jwt-decode"; +import { createContext, useContext, useEffect, useMemo } from "react"; +import { useNavigate } from "react-router-dom"; +import { setToken } from "../reducer/user.reducer"; + +interface AuthProviderType { + login: (username: string, password: string) => void, + logout: () => void, + // todo figure out the type of loginProperties + loginProperties: any, + isAuthenticated: () => boolean +} + +const AuthContext = createContext<AuthProviderType>({ + login: () => { throw new Error("login function not implemented"); }, + logout: () => { throw new Error("logout function not implemented"); }, + loginProperties: undefined, + isAuthenticated: () => { throw new Error("login function not implemented"); }, +}); + +export const AuthProvider: React.FC<BasicProp> = ({ children }) => { + const dispatch = useAppDispatch() + const navigate = useNavigate() + const { username } = useAppSelector(state => state.user) + + useEffect(() => { + const token = getCookieValue('token'); + + if (!token) { + navigate(LOGIN_URL) + } + + }, [username, navigate]); + + const [ + sendLogin, + loginProperties, + ] = useAuthServiceLoginMutation() + + + /** + * Returns the /login payload + */ + const getAuthPayload = (username: string, password: string): AuthServiceLoginApiArg => { + const payload: AuthServiceLoginApiArg = { + rbacLoginRequest: { + username, + pwd: password, + timestamp: new Date().getTime().toString(), + }, + } + + return payload; + } + + const executeLogin = (username: string, password: string) => { + const authPayload = getAuthPayload(username, password); + + sendLogin(authPayload).unwrap().then((response: AuthServiceLoginApiResponse) => { + if (!response.token) { + // reset the action by calling the reset hook + throw Error("Response is successful but no token was provided. Expected response {token: '<jwt-token>'}"); + } + + dispatch(setToken({ token: response.token, username })); + navigate(DEVICE_URL); + }).catch(() => { + // determine whether 500 or 401 err + }); + } + + const isAuthenticated = () => { + const token = getCookieValue('token'); + if (!token) { + return false; + } + + const { exp } = jwtDecode(token); + const currentTime = new Date().getTime() / 1000; + + // TODO this is currently a workaround for the never expiring token + if (process.env.NODE_ENV === 'development') { + return !!token; + } else { + return !!token && exp! > currentTime; + } + } + + const logout = () => { + dispatch(setToken(null)); + // TODO: purge other information + } + + const value = useMemo<AuthProviderType>( + () => ({ + login: executeLogin, + logout, + isAuthenticated, + loginProperties + }), + [executeLogin, loginProperties, logout] + ); + + return ( + <AuthContext.Provider value={value}> + {children} + </AuthContext.Provider> + ) +} + +export const useAuth = () => { + return useContext(AuthContext); +} + diff --git a/react-ui/src/shared/provider/menu/menu.provider.scss b/react-ui/src/shared/provider/menu/menu.provider.scss new file mode 100644 index 000000000..12393085a --- /dev/null +++ b/react-ui/src/shared/provider/menu/menu.provider.scss @@ -0,0 +1,11 @@ +.menu-container { + box-shadow: 0px 0px 5px gray; + + border-radius: 4px !important; +} + +.menu-button { + & > span { + margin-left: 10px; + } +} diff --git a/react-ui/src/shared/provider/menu/menu.provider.tsx b/react-ui/src/shared/provider/menu/menu.provider.tsx new file mode 100644 index 000000000..f3af8e5c1 --- /dev/null +++ b/react-ui/src/shared/provider/menu/menu.provider.tsx @@ -0,0 +1,158 @@ +import { faRightFromBracket, IconDefinition } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useAuth } from "@provider/auth.provider"; +import { BasicProp } from "@shared/types/interfaces.type"; +import React, { createContext, useContext, useEffect, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; +import './menu.provider.scss'; + +interface MenuSubscription { + unsubscribe: () => void +} + +// describes a action decorated with a item name +// on click the action is getting executed +type Action = { + key: string, + icon: IconDefinition, + action: (clickedHtmlElement: HTMLElement | undefined) => void +} + +interface MenuProviderType { + subscribe: ((value: SubscriptionValue) => MenuSubscription) | null; +} + +const MenuContext = createContext<MenuProviderType>({ + subscribe: null +}) + +interface SubscriptionValue { + target: HTMLElement, + actions: Array<Action> +} + +interface SubscriptionMap { + [id: string]: SubscriptionValue +} + + +export const MenuProvider: React.FC<BasicProp> = ({ children }) => { + const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 }); + const [showMenu, setShowMenu] = useState(false); + const [subscribedTargets, setSubscribedTargets] = useState<SubscriptionMap>({}); + + const { logout } = useAuth() + + 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 setMenuItems = (menuItems: Array<SubscriptionValue>) => { + _setMenuItems([...menuItems, globalMenuItems]) + } + + const handleContextMenu = (event: React.MouseEvent<HTMLElement>) => { + event.preventDefault(); + + const targets = Object.values(subscribedTargets).filter( + ({ target }) => target.contains(event.target as HTMLElement) + ); + + setMenuPosition({ top: event.pageY, left: event.pageX }); + setMenuItems(targets); + setClickedHtmlElement(event.target as HTMLElement); + displayMenu(); + }; + + const displayMenu = () => { + setShowMenu(true); + } + + const hideMenu = () => { + setShowMenu(false); + setMenuItems([]); + } + + const handleClick = () => hideMenu(); + + useEffect(() => { + document.addEventListener('keyup', (e) => { + if (e.code === "Escape") { + hideMenu(); + } + }); + }, [hideMenu]) + + const value = useMemo<MenuProviderType>(() => { + return { + subscribe(target: SubscriptionValue) { + const subscriptionId = crypto.randomUUID(); // Generate unique ID + + setSubscribedTargets(prev => ({ + ...prev, + [subscriptionId]: target + })); + + const subscription: MenuSubscription = { + unsubscribe() { + setSubscribedTargets(prev => { + const next = { ...prev }; + delete next[subscriptionId]; + return next; + }); + }, + } + return subscription; + }, + } as MenuProviderType + }, []); + + return ( + <MenuContext.Provider value={value}> + <div onContextMenu={handleContextMenu} onClick={handleClick} style={{ height: "100vh" }}> + <div + className={`menu-container dropdown-menu ${showMenu ? "show" : ""}`} + style={{ position: "absolute", top: `${menuPosition.top}px`, left: `${menuPosition.left}px` }} + > + { + menuItems.map((item, i) => { + // for each new action array (for each new subscription entity) draw a seperator line except the last action + 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) + + return ( + <button className="menu-button dropdown-item" key={key + " " + i} disabled={disabled} onClick={() => action(clickedHtmlElement)}> + <FontAwesomeIcon icon={icon} size="sm" /> + <span>{key}</span> + </button> + ) + }) + + return [...dropdownItems, seperator] + }) + } + </div> + {children} + </div> + </MenuContext.Provider> + ) +} + +export const useMenu = () => { + return useContext(MenuContext) +} \ No newline at end of file diff --git a/react-ui/src/shared/provider/utils.provider.tsx b/react-ui/src/shared/provider/utils.provider.tsx new file mode 100644 index 000000000..3a76bbe69 --- /dev/null +++ b/react-ui/src/shared/provider/utils.provider.tsx @@ -0,0 +1,37 @@ +import { BasicProp } from "@shared/types/interfaces.type"; +import React, { createContext, useContext, useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { toast } from "react-toastify"; + +interface UtilsProviderType { + toClipboard: (text: string) => void +} + +const UtilsContext = createContext<UtilsProviderType>({ + toClipboard: function (): void { + throw new Error("Function not implemented."); + } +}) + +export const UtilsProvider: React.FC<BasicProp> = ({ children }) => { + const { t } = useTranslation('common'); + + const value = useMemo<UtilsProviderType>(() => { + return { + toClipboard(text) { + navigator.clipboard.writeText(text); + toast.info(t('global.toast.copied')) + }, + } as UtilsProviderType + }, [t]) + + return ( + <UtilsContext.Provider value={value}> + {children} + </UtilsContext.Provider> + ) +} + +export const useUtils = () => { + return useContext(UtilsContext) +} \ No newline at end of file diff --git a/react-ui/src/shared/reducer/routine.reducer.ts b/react-ui/src/shared/reducer/routine.reducer.ts new file mode 100755 index 000000000..95d5f06e7 --- /dev/null +++ b/react-ui/src/shared/reducer/routine.reducer.ts @@ -0,0 +1,94 @@ +import { PayloadAction, createSlice } from '@reduxjs/toolkit' +import { CategoryType } from '@shared/types/category.type' +import { ThunkDTO, ThunkPersist } from '@shared/types/thunk.type' +import { RoutineManager } from '@utils/routine.manager' +import { RootState } from '../../stores' +import { startListening } from '../../stores/middleware/listener.middleware' +import { setToken } from './user.reducer' + +export interface ReducerState { + thunks: Record<CategoryType, ThunkPersist | null> +} + +const initialState: ReducerState = { + thunks: { + DEVICE: null, + TABLE: null, + TAB: null + }, + +} + + +const RoutineSlice = createSlice({ + name: 'routine', + initialState, + reducers: { + addRoutine: (state: any, { payload }: PayloadAction<ThunkDTO>) => { + const thunk: ThunkPersist = { + category: payload.category, + payload: payload.payload, + thunkId: payload.thunk.id, + lastupdate: Date.now() + } + + state.thunks[payload.category] = thunk + }, + + refreshUpdateTimer: (state: any, { payload }: PayloadAction<CategoryType>) => { + state.thunks[payload].lastupdate = Date.now() + }, + + removeAll: (state) => { + state.thunks = initialState.thunks + }, + }, +}) + +export const { addRoutine, refreshUpdateTimer } = RoutineSlice.actions + +// on logout remove all routine +startListening({ + predicate: (action) => setToken.match(action) && action.payload === null, + effect: async (_, listenerApi) => { + RoutineManager.unsubscribeAll() + listenerApi.dispatch(RoutineSlice.actions.removeAll()) + }, +}) + +/** + * Add new routine + * + * This listener handles the connection between the RoutingManager that + * stores the non persistable thunk object and the peristable thunk information. + * The persistable information are stored in this reducer + */ +startListening({ + predicate: (action) => addRoutine.match(action), + effect: async (action, listenerApi) => { + const { thunk } = action.payload as ThunkDTO + const subscription = await listenerApi.dispatch(thunk(action.payload.payload)) + + if (subscription.error) { + throw new Error('Error during routine execution: ' + subscription.error.message) + } + + RoutineManager.add(subscription.payload, action.payload.category) + }, +}) + +// unsubscribe old routine that is in the same category +startListening({ + predicate: (action) => addRoutine.match(action), + effect: async (action, listenerApi) => { + const { routine } = listenerApi.getOriginalState() as RootState + const category = action.payload.category; + + const lastThunk = routine.thunks[category as CategoryType] + if (lastThunk) { + RoutineManager.unsubscribe(category) + } + }, +}) + +export default RoutineSlice.reducer diff --git a/react-ui/src/shared/reducer/user.reducer.ts b/react-ui/src/shared/reducer/user.reducer.ts new file mode 100755 index 000000000..a0f2d4222 --- /dev/null +++ b/react-ui/src/shared/reducer/user.reducer.ts @@ -0,0 +1,36 @@ +import { RbacUser } from '@api/api' +import { setCookieValue } from '@helper/coookie' +import { createSlice, PayloadAction } from '@reduxjs/toolkit' + +export interface UserSliceState { + // defined by the frontend user input. This value is getting compared with the backend response + username: string + user: RbacUser | null +} + +const initialState: UserSliceState = { + username: '', + user: null, +} + +const userSlice = createSlice({ + name: 'user', + initialState, + reducers: { + setToken: (state, action: PayloadAction<{ token: string; username: string } | null>) => { + const token = action.payload?.token || '' + setCookieValue('token', token) + + state.username = action.payload?.username || '' + }, + setUser: (state, action: PayloadAction<RbacUser>) => { + state.user = action.payload + }, + }, +}) + +export const { setToken } = userSlice.actions +export const { setUser } = userSlice.actions + +export default userSlice.reducer +export const userReducerPath = userSlice.reducerPath \ No newline at end of file diff --git a/react-ui/src/shared/routine/user.routine.ts b/react-ui/src/shared/routine/user.routine.ts new file mode 100644 index 000000000..368ccf412 --- /dev/null +++ b/react-ui/src/shared/routine/user.routine.ts @@ -0,0 +1,37 @@ +import { api, PndServiceGetPndListApiArg, UserServiceGetUsersApiArg } from "@api/api" +import { setPnds } from "@component/devices/reducer/device.reducer" +import { createAsyncThunk } from "@reduxjs/toolkit" +import { setUser } from "@shared/reducer/user.reducer" +import { RootState } from "src/stores" + +export const fetchUser = createAsyncThunk('user/fetchUser', (_, thunkAPI) => { + const payload: UserServiceGetUsersApiArg = {} + + thunkAPI.dispatch(api.endpoints.userServiceGetUsers.initiate(payload)).then((response) => { + if (response.error || !response.data?.user?.length) { + // TODO proper error handling + throw new Error('Fetching the pnd list after successful login failed') + } + + const { user } = thunkAPI.getState() as RootState + const matchedUser = response.data.user.find((_user) => _user.name === user.username) + + if (!matchedUser) { + // TODO proper error handling => logout + throw new Error('No user found with the provided username') + } + + thunkAPI.dispatch(setUser(matchedUser)) + }) +}) + +export const fetchPnds = createAsyncThunk('device/fetchPnds', (_, thunkApi) => { + const payload: PndServiceGetPndListApiArg = { + timestamp: new Date().getTime().toString(), + } + + const subscription = thunkApi.dispatch(api.endpoints.pndServiceGetPndList.initiate(payload)) + subscription.unwrap().then((response) => { + thunkApi.dispatch(setPnds(response.pnd)) + }) +}) \ No newline at end of file diff --git a/react-ui/src/shared/style/box.scss b/react-ui/src/shared/style/box.scss new file mode 100755 index 000000000..53158f515 --- /dev/null +++ b/react-ui/src/shared/style/box.scss @@ -0,0 +1,59 @@ +@import "./colors.scss"; + +$box-padding: 10px; +$border-radius: 0.25em; +$border-width: 2px; +$transition-duration: 0.3s; + +.c-box { + padding: $box-padding; + background-color: white; + position: relative; + border-radius: $border-radius; + transition: box-shadow $transition-duration ease-in-out; + + background: + linear-gradient(white, white) padding-box, + linear-gradient( + 180deg, + rgba(map-get($theme-colors, "primary"), 0.4) 0%, + rgba(map-get($theme-colors, "primary"), 0.2) 40%, + rgba(map-get($theme-colors, "primary"), 0.1) 100% + ) + border-box; + border: $border-width solid transparent; + box-shadow: $box-shadow; + + &::before { + content: ""; + position: absolute; + top: -$border-width; + left: -$border-width; + right: -$border-width; + bottom: -$border-width; + background: linear-gradient( + 180deg, + rgba(map-get($theme-colors, "primary"), 0.4) 0%, + rgba(map-get($theme-colors, "primary"), 0.2) 60%, + rgba(map-get($theme-colors, "primary"), 0.1) 100% + ); + border-radius: inherit; + z-index: -1; + opacity: 0; + transition: opacity $transition-duration ease-in-out; + } + + &:hover { + box-shadow: 0 0.5rem 1rem rgba(map-get($theme-colors, "primary"), 0.2); + + &::before { + opacity: 1; + } + } +} + +.abstract-box { + padding: $box-padding; + font-size: 0.9em; + border-radius: calc($border-radius / 2); +} diff --git a/react-ui/src/shared/style/colors.scss b/react-ui/src/shared/style/colors.scss new file mode 100755 index 000000000..1b567b7c6 --- /dev/null +++ b/react-ui/src/shared/style/colors.scss @@ -0,0 +1,45 @@ +$theme-colors: ( + "primary": #b350e0, + "primary-hover": #ddaff3af, + "primary-button": #ddaff3af, + "bg-primary": #ededed, + "danger": #ff0000, + "warning": #dbd116, + "dark": #595959, + "black": #000000, + "disabled": #8e8e8e +); + +$box-shadow: 0px 4px 8px rgba(map-get($theme-colors, "primary"), 0.2); +$transition-duration: 0.3s; + +@import "/node_modules/bootstrap/scss/bootstrap"; + +// Gradients +$gradient-colors: ( + "primary": map-get($theme-colors, "primary"), + "disabled": map-get($theme-colors, "disabled") +); + +@each $name, $color in $gradient-colors { + .border-gradient-#{$name} { + background: + linear-gradient(white, white) padding-box, + linear-gradient(180deg, rgba($color, 0.4) 0%, rgba($color, 0.2) 40%, rgba($color, 0.1) 100%) border-box; + border: $border-width solid transparent; + + &::before { + content: ""; + position: absolute; + top: -$border-width; + left: -$border-width; + right: -$border-width; + bottom: -$border-width; + background: linear-gradient(180deg, rgba($color, 0.4) 0%, rgba($color, 0.2) 60%, rgba($color, 0.1) 100%); + border-radius: inherit; + z-index: -1; + opacity: 0; + transition: opacity $transition-duration ease-in-out; + } + } +} diff --git a/react-ui/src/shared/style/fonts.scss b/react-ui/src/shared/style/fonts.scss new file mode 100755 index 000000000..3af44e155 --- /dev/null +++ b/react-ui/src/shared/style/fonts.scss @@ -0,0 +1,12 @@ +@font-face { + font-family: Inter; + src: + url("/fonts/inter-webfont.woff2") format("woff2"), + url("/fonts/inter-webfont.woff") format("woff"); + font-weight: normal; + font-style: normal; +} + +* { + font-family: Inter; +} diff --git a/react-ui/src/shared/style/index.scss b/react-ui/src/shared/style/index.scss new file mode 100755 index 000000000..22d919a9a --- /dev/null +++ b/react-ui/src/shared/style/index.scss @@ -0,0 +1,8 @@ +@import "./fonts.scss"; +@import "./colors.scss"; +@import "./utils.scss"; +@import "./toast.scss"; +@import "./skeleton.scss"; +@import "../components/box/gridBox.view.scss"; + +@import "/node_modules/react-loading-skeleton/dist/skeleton.css"; diff --git a/react-ui/src/shared/style/skeleton.scss b/react-ui/src/shared/style/skeleton.scss new file mode 100644 index 000000000..680cadd74 --- /dev/null +++ b/react-ui/src/shared/style/skeleton.scss @@ -0,0 +1,3 @@ +.react-loading-skeleton { + margin: 0.25em 0; +} diff --git a/react-ui/src/shared/style/toast.scss b/react-ui/src/shared/style/toast.scss new file mode 100755 index 000000000..6b6ba4d67 --- /dev/null +++ b/react-ui/src/shared/style/toast.scss @@ -0,0 +1 @@ +@import 'react-toastify/dist/ReactToastify.css'; \ No newline at end of file diff --git a/react-ui/src/shared/style/utils.scss b/react-ui/src/shared/style/utils.scss new file mode 100755 index 000000000..d6f34d301 --- /dev/null +++ b/react-ui/src/shared/style/utils.scss @@ -0,0 +1,9 @@ +.vh-100 { + height: 100vh !important; +} + +.clickable { + &:hover { + cursor: pointer; + } +} diff --git a/react-ui/src/shared/types/category.type.ts b/react-ui/src/shared/types/category.type.ts new file mode 100644 index 000000000..e08282341 --- /dev/null +++ b/react-ui/src/shared/types/category.type.ts @@ -0,0 +1,17 @@ + +const DeviceListView = { + TABLE: "device_list/table", + TAB: "device_list/tab", +} + +const Shared = { + DEVICE: 'objects/device' +} + + +export const Category = { + ...DeviceListView, + ...Shared +} + +export type CategoryType = keyof typeof Category \ No newline at end of file diff --git a/react-ui/src/shared/types/interfaces.type.ts b/react-ui/src/shared/types/interfaces.type.ts new file mode 100644 index 000000000..97a822706 --- /dev/null +++ b/react-ui/src/shared/types/interfaces.type.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/types/thunk.type.ts b/react-ui/src/shared/types/thunk.type.ts new file mode 100644 index 000000000..ff037d796 --- /dev/null +++ b/react-ui/src/shared/types/thunk.type.ts @@ -0,0 +1,24 @@ +import { CategoryType } from "./category.type" + + +// The actual Thunk type is hard to determine because is very generic +export type ThunkFunc = any + + +export interface ThunkDTO { + thunk: ThunkFunc + payload: Object + + /** + * Only one subscription per category is allowed. + * New subscription will unsubscribe and overwrite the old one + */ + category: CategoryType +} + +export interface ThunkPersist { + thunkId: number, + payload: Object + category: CategoryType, + lastupdate: number +} diff --git a/react-ui/src/shared/utils/loading-fallback.tsx b/react-ui/src/shared/utils/loading-fallback.tsx new file mode 100644 index 000000000..d1c6daa4a --- /dev/null +++ b/react-ui/src/shared/utils/loading-fallback.tsx @@ -0,0 +1,117 @@ +import React, { useEffect, useState } from 'react'; +import { Col, Container, Row } from 'react-bootstrap'; +import logo from '/public/logo.png'; + +interface DelayedRenderProps { + children: React.ReactNode; + loading?: { + minimumLoadingTime: number; + component: () => JSX.Element + } +} + +export const SplashScreen = () => { + const [dots, setDots] = useState(''); + + useEffect(() => { + const dotsInterval = setInterval(() => { + setDots(prev => prev.length >= 3 ? '' : prev + '.'); + }, 500); + + return () => clearInterval(dotsInterval); + }, []); + + return ( + <div className="splash-screen-overlay"> + <Container fluid className="h-100 d-flex align-items-center justify-content-center bg-bg-primary"> + <Row> + <Col className="text-center"> + <div className="loading-bounce mb-4"> + <img + src={logo} + alt="Logo" + className="img-fluid" + style={{ width: '120px', height: '120px', objectFit: 'contain' }} + /> + </div> + <div className="loading-text"> + <span className="h4 text-secondary">Loading</span> + <span className="h4 text-secondary dots-width">{dots}</span> + </div> + </Col> + </Row> + </Container> + + <style> + {` + .splash-screen-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #f8f9fa; + z-index: 0; + display: flex; + align-items: center; + justify-content: center; + } + + .loading-bounce { + animation: bounce 1s infinite; + } + + @keyframes bounce { + 0%, 100% { + transform: translateY(0); + } + 50% { + transform: translateY(-20px); + } + } + + .loading-text { + display: flex; + justify-content: center; + align-items: center; + } + + .dots-width { + min-width: 24px; + text-align: left; + margin-left: 2px; + } + `} + </style> + </div> + ); +}; + +export const DelayedRender: React.FC<DelayedRenderProps> = ({ + children, + loading +}) => { + const [shouldRender, setShouldRender] = useState(false); + + useEffect(() => { + if (!loading) { + setShouldRender(true); + return; + } + + const timer = setTimeout(() => { + setShouldRender(true); + }, loading.minimumLoadingTime); + + return () => clearTimeout(timer); + }, [loading]); + + if (!shouldRender && loading) { + const LoadingComponent = loading.component; + return <LoadingComponent />; + } + + return <>{children}</>; +}; + +export default DelayedRender; \ No newline at end of file diff --git a/react-ui/src/shared/utils/routine.manager.ts b/react-ui/src/shared/utils/routine.manager.ts new file mode 100755 index 000000000..1fee6723e --- /dev/null +++ b/react-ui/src/shared/utils/routine.manager.ts @@ -0,0 +1,80 @@ +import { infoMessage, warnMessage } from '@helper/debug' +import { QueryActionCreatorResult } from '@reduxjs/toolkit/query' +import { Category, CategoryType } from '@shared/types/category.type' + +type Routine = QueryActionCreatorResult<any> + +interface Entity { + routine: Routine +} + + +interface RoutineState { + routines: Record<CategoryType, Entity | null> +} + +const initalState: RoutineState = { + routines: { + DEVICE: null, + TABLE: null, + TAB: null + } +} + +/** +* Routine manager is a singleton that holds all running routines. +* The redux store holds any persistable information about the routines. +* The routine objects itself are stored in the RoutineManager. +*/ +export const RoutineManager = (() => { + let state = initalState + + const add = (routine: Routine, category: CategoryType): boolean => { + const entity: Entity = { + routine: routine, + } + + state.routines = { + ...state.routines, + [category]: entity + } + infoMessage("Routine subscribed to category " + category) + + return true + } + + const unsubscribeAll = () => { + Object.keys(state.routines) + .forEach((category) => { + unsubscribe(category as CategoryType) + }) + + state = initalState + } + + /** + * @param id + * @returns returns true if the routine was stopped, false if it was not found + */ + const unsubscribe = (category: CategoryType): boolean => { + const entity = state.routines[category] + + if (entity) { + entity.routine.unsubscribe() + state.routines[category] = null + infoMessage("Routine unsubscribed from category " + category) + } + + if (!!entity) { + warnMessage("Desired routine to unsubscribe does not exist in category " + Category[category]) + } + + return !!entity + } + + return { + add, + unsubscribe, + unsubscribeAll, + } +})() \ No newline at end of file diff --git a/react-ui/src/stores/api.store.ts b/react-ui/src/stores/api.store.ts new file mode 100755 index 000000000..57ed95b64 --- /dev/null +++ b/react-ui/src/stores/api.store.ts @@ -0,0 +1,19 @@ +import { getCookieValue } from '@helper/coookie' +import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' + +// initialize an empty api service that we'll inject endpoints into later as needed +export const emptySplitApi = createApi({ + baseQuery: fetchBaseQuery({ + baseUrl: '/api', + prepareHeaders: (headers) => { + const token = getCookieValue('token') + + if (token) { + headers.set('authorize', `${token}`) + } + + return headers + }, + }), + endpoints: () => ({}), +}) diff --git a/react-ui/src/stores/index.ts b/react-ui/src/stores/index.ts new file mode 100755 index 000000000..9b738e47f --- /dev/null +++ b/react-ui/src/stores/index.ts @@ -0,0 +1,42 @@ +import { FETCH_DEVICE_ACTION } from '@component/devices/routines/device.routine' +import { FETCH_MNE_ACTION } from '@component/devices/routines/mne.routine' +import { configureStore } from '@reduxjs/toolkit' +import { setupListeners } from '@reduxjs/toolkit/query' +import { FLUSH, PAUSE, PERSIST, PURGE, REGISTER, REHYDRATE } from 'redux-persist' +import persistStore from 'redux-persist/es/persistStore' +import { emptySplitApi } from './api.store' +import { rtkQueryErrorLogger } from './middleware/api.listener.middleware' +import { listenerMiddleware } from './middleware/listener.middleware' +import persistedReducer from './persist.store' + +export const store = configureStore({ + reducer: persistedReducer, + middleware: (getDefaultMiddleware) => + getDefaultMiddleware({ + serializableCheck: { + ignoredActions: [ + FLUSH, + REHYDRATE, + PAUSE, + PERSIST, + PURGE, + REGISTER, + FETCH_DEVICE_ACTION + '/fulfilled', + FETCH_MNE_ACTION + '/fulfilled', + 'routine/addRoutine', + ], + ignoredPaths: ['routine.thunks'], + }, + }) + .prepend(listenerMiddleware.middleware) + .concat(emptySplitApi.middleware, rtkQueryErrorLogger), +}) + +export const persistor = persistStore(store) + +// TODO +setupListeners(store.dispatch) + +export type RootState = ReturnType<typeof store.getState> +export type MyState = ReturnType<typeof persistedReducer> +export type AppDispatch = typeof store.dispatch diff --git a/react-ui/src/stores/middleware/api.listener.middleware.ts b/react-ui/src/stores/middleware/api.listener.middleware.ts new file mode 100755 index 000000000..b6a1a713e --- /dev/null +++ b/react-ui/src/stores/middleware/api.listener.middleware.ts @@ -0,0 +1,26 @@ +import { isRejectedWithValue } from '@reduxjs/toolkit' +import { setToken } from '@shared/reducer/user.reducer' +import { toast } from 'react-toastify' +import { Middleware, MiddlewareAPI } from 'redux' + +/** + * Log a warning and show a toast! + */ +export const rtkQueryErrorLogger: Middleware = (api: MiddlewareAPI) => (next) => (action) => { + if (!isRejectedWithValue(action)) { + return next(action) + } + + const errorCode = action.payload.status || -1 + switch (errorCode) { + case 403: + case 401: + api.dispatch(setToken(null)) + toast.info('Your session has expired. Please login again', {}) + break + default: + console.warn('An unkown error code returned: ' + errorCode) + } + + return next(action) +} diff --git a/react-ui/src/stores/middleware/listener.middleware.ts b/react-ui/src/stores/middleware/listener.middleware.ts new file mode 100755 index 000000000..3802e575c --- /dev/null +++ b/react-ui/src/stores/middleware/listener.middleware.ts @@ -0,0 +1,5 @@ +import { createListenerMiddleware } from "@reduxjs/toolkit"; + +export const listenerMiddleware = createListenerMiddleware() + +export const { startListening, stopListening } = listenerMiddleware \ No newline at end of file diff --git a/react-ui/src/stores/persist.store.ts b/react-ui/src/stores/persist.store.ts new file mode 100755 index 000000000..91d961cad --- /dev/null +++ b/react-ui/src/stores/persist.store.ts @@ -0,0 +1,31 @@ +import deviceReducer from '@component/devices/reducer/device.reducer' +import pluginReducer from '@component/devices/reducer/plugin.reducer' +import jsonViewerReducer from '@shared/components/json_viewer/reducer/json_viewer.reducer' +import routineReducer from '@shared/reducer/routine.reducer' +import userReducer from '@shared/reducer/user.reducer' +import { combineReducers } from 'redux' +import { persistReducer } from 'redux-persist' +import storage from 'redux-persist/es/storage' +import { emptySplitApi } from './api.store' + + + +/** local storage config */ +const rootPersistConfig = { + key: 'root', + storage, + blacklist: [emptySplitApi.reducerPath], +} + +const rootReducer = combineReducers({ + user: userReducer, + device: deviceReducer, + routine: routineReducer, + json_viwer: jsonViewerReducer, + plugin: pluginReducer, + [emptySplitApi.reducerPath]: emptySplitApi.reducer, +}) + +const persistedReducer = persistReducer(rootPersistConfig, rootReducer) + +export default persistedReducer diff --git a/react-ui/tsconfig.eslint.json b/react-ui/tsconfig.eslint.json new file mode 100755 index 000000000..40086b5ba --- /dev/null +++ b/react-ui/tsconfig.eslint.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "allowJs": true, + "types": ["jest"] + }, + "include": ["src", "tests"] +} diff --git a/react-ui/tsconfig.json b/react-ui/tsconfig.json new file mode 100755 index 000000000..d40af31cc --- /dev/null +++ b/react-ui/tsconfig.json @@ -0,0 +1,47 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + "baseUrl": ".", + "paths": { + "@api/*": ["src/shared/api/*"], + "@reducer/*": ["src/stores/reducer/*"], + "@provider/*": ["src/shared/provider/*"], + "@layout/*": ["src/shared/layouts/*"], + "@hooks": ["src/hooks"], + "@routes": ["src/routes.tsx"], + "@task/*": ["src/shared/tasks/*"], + "@helper/*": ["src/shared/helper/*"], + "@utils/*": ["src/shared/utils/*"], + "@shared/*": ["src/shared/*"], + "@component/*": ["src/components/*"], + "@build/*": ["build/*"] + } + }, + "include": [ + "src/**/*.d.ts", + "src/**/*.ts", + "src/**/*.tsx", + "src/stores/api.store.ts", + "scripts/test.ts", + "src/shared/utils/yang_parser/go/assets/wasm_exec.d.ts.generated" + ] +} diff --git a/react-ui/tsconfig.node.json b/react-ui/tsconfig.node.json new file mode 100755 index 000000000..3a29b0309 --- /dev/null +++ b/react-ui/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ES2020", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": false + }, + "include": [ + "vite.config.ts" + ] +} \ No newline at end of file diff --git a/react-ui/vite.config.mjs b/react-ui/vite.config.mjs new file mode 100755 index 000000000..33fd69cc7 --- /dev/null +++ b/react-ui/vite.config.mjs @@ -0,0 +1,74 @@ +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [react()], + build: { + sourcemap: false, + + rollupOptions: { + output: { + manualChunks: { + 'required': [ + 'bootstrap', 'react-bootstrap', + 'react', 'react-dom', 'react-router-dom', + 'redux', '@reduxjs/toolkit', 'react-redux', 'redux-observable', 'redux-persist', + 'i18next', 'react-i18next', + '@fortawesome/fontawesome-svg-core', + '@fortawesome/free-regular-svg-icons', + '@fortawesome/free-solid-svg-icons', + '@fortawesome/react-fontawesome' + ], + 'lazy': [ + 'react-toastify' + ] + } + } + } + }, + // develop server + server: { + sourcemap: true, + host: true, + port: 3000, + proxy: { + '/api': { + target: 'http://clab-gosdn_csbi_arista_base-gosdn:8080', + changeOrigin: true, + secure: false, + rewrite: (path) => path.replace(/^\/api/, ''), + configure: (proxy, _options) => { + proxy.on('error', (err, _req, _res) => { + console.log('proxy error', err) + }) + proxy.on('proxyReq', (proxyReq, req, _res) => { + console.log('Sending Request to the Target:', req.method, req.url) + }) + proxy.on('proxyRes', (proxyRes, req, _res) => { + console.log( + 'Received Response from the Target:', + proxyRes.statusCode, + req.url + ) + }) + }, + }, + }, + }, + resolve: { + alias: { + '@api': '/src/shared/api', + '@reducer': '/src/stores/reducer', + '@provider': '/src/shared/provider', + '@layout': '/src/shared/layouts', + '@hooks': '/src/hooks.ts', + '@task': '/src/shared/tasks', + '@helper': '/src/shared/helper', + '@routes': '/src/routes.tsx', + '@utils': '/src/shared/utils', + '@shared': '/src/shared', + '@component': '/src/components', + '@build': '/build/', + }, + }, +}) diff --git a/react-ui/yarn.lock b/react-ui/yarn.lock new file mode 100755 index 000000000..5e4047ff1 --- /dev/null +++ b/react-ui/yarn.lock @@ -0,0 +1,11395 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adobe/css-tools@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.1.tgz#2447a230bfe072c1659e6815129c03cf170710e3" + integrity sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ== + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@apidevtools/json-schema-ref-parser@9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" + integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== + dependencies: + "@jsdevtools/ono" "^7.1.3" + call-me-maybe "^1.0.1" + js-yaml "^3.13.1" + +"@apidevtools/openapi-schemas@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== + +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@^10.0.2", "@apidevtools/swagger-parser@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6" + integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.6" + "@apidevtools/openapi-schemas" "^2.1.0" + "@apidevtools/swagger-methods" "^3.0.2" + "@jsdevtools/ono" "^7.1.3" + ajv "^8.6.3" + ajv-draft-04 "^1.0.0" + call-me-maybe "^1.0.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.8.3": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.26.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/eslint-parser@^7.16.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz#603c68a63078796527bc9d0833f5e52dd5f9224c" + integrity sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.1" + +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3", "@babel/generator@^7.7.2": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-class-properties@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-decorators@^7.16.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz#8680707f943d1a3da2cd66b948179920f097e254" + integrity sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-decorators" "^7.25.9" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-optional-chaining@^7.16.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz#986b4ca8b7b5df3f67cee889cedeffc2e2bf14b3" + integrity sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-flow@^7.25.9": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz#96507595c21b45fccfc2bc758d5c45452e6164fa" + integrity sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.25.9", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-flow-strip-types@^7.16.0": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz#85879b42a8f5948fd6317069978e98f23ef8aec1" + integrity sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-flow" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== + dependencies: + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" + integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.25.9" + +"@babel/plugin-transform-react-jsx-self@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858" + integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-jsx-source@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503" + integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-runtime@^7.16.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz#62723ea3f5b31ffbe676da9d6dae17138ae580ea" + integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-typescript@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" + +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== + dependencies: + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.38.1" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" + +"@babel/preset-typescript@^7.16.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" + +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.7", "@babel/runtime@^7.25.0", "@babel/runtime@^7.26.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.25.9", "@babel/template@^7.3.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.7.2": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@bufbuild/protobuf@^2.0.0": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.3.tgz#9cd136f6b687e63e9b517b3a54211ece942897ee" + integrity sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg== + +"@csstools/normalize.css@*": + version "12.1.1" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.1.1.tgz#f0ad221b7280f3fc814689786fd9ee092776ef8f" + integrity sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ== + +"@csstools/postcss-cascade-layers@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" + integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== + dependencies: + "@csstools/selector-specificity" "^2.0.2" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-color-function@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" + integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-font-format-keywords@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" + integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-hwb-function@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" + integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-ic-unit@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" + integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-is-pseudo-class@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" + integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-nested-calc@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" + integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-normalize-display-values@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" + integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" + integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" + integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-stepped-value-functions@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" + integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-text-decoration-shorthand@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" + integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" + integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-unset-value@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" + integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== + +"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== + +"@esbuild/aix-ppc64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz#b57697945b50e99007b4c2521507dc613d4a648c" + integrity sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw== + +"@esbuild/android-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz#1add7e0af67acefd556e407f8497e81fddad79c0" + integrity sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w== + +"@esbuild/android-arm@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.0.tgz#ab7263045fa8e090833a8e3c393b60d59a789810" + integrity sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew== + +"@esbuild/android-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.0.tgz#e8f8b196cfdfdd5aeaebbdb0110983460440e705" + integrity sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ== + +"@esbuild/darwin-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz#2d0d9414f2acbffd2d86e98253914fca603a53dd" + integrity sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw== + +"@esbuild/darwin-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz#33087aab31a1eb64c89daf3d2cf8ce1775656107" + integrity sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA== + +"@esbuild/freebsd-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz#bb76e5ea9e97fa3c753472f19421075d3a33e8a7" + integrity sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA== + +"@esbuild/freebsd-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz#e0e2ce9249fdf6ee29e5dc3d420c7007fa579b93" + integrity sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ== + +"@esbuild/linux-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz#d1b2aa58085f73ecf45533c07c82d81235388e75" + integrity sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g== + +"@esbuild/linux-arm@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz#8e4915df8ea3e12b690a057e77a47b1d5935ef6d" + integrity sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw== + +"@esbuild/linux-ia32@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz#8200b1110666c39ab316572324b7af63d82013fb" + integrity sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA== + +"@esbuild/linux-loong64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz#6ff0c99cf647504df321d0640f0d32e557da745c" + integrity sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g== + +"@esbuild/linux-mips64el@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz#3f720ccd4d59bfeb4c2ce276a46b77ad380fa1f3" + integrity sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA== + +"@esbuild/linux-ppc64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz#9d6b188b15c25afd2e213474bf5f31e42e3aa09e" + integrity sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ== + +"@esbuild/linux-riscv64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz#f989fdc9752dfda286c9cd87c46248e4dfecbc25" + integrity sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw== + +"@esbuild/linux-s390x@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz#29ebf87e4132ea659c1489fce63cd8509d1c7319" + integrity sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g== + +"@esbuild/linux-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz#4af48c5c0479569b1f359ffbce22d15f261c0cef" + integrity sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA== + +"@esbuild/netbsd-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz#1ae73d23cc044a0ebd4f198334416fb26c31366c" + integrity sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg== + +"@esbuild/openbsd-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz#5d904a4f5158c89859fd902c427f96d6a9e632e2" + integrity sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg== + +"@esbuild/openbsd-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz#4c8aa88c49187c601bae2971e71c6dc5e0ad1cdf" + integrity sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q== + +"@esbuild/sunos-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz#8ddc35a0ea38575fa44eda30a5ee01ae2fa54dd4" + integrity sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA== + +"@esbuild/win32-arm64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz#6e79c8543f282c4539db684a207ae0e174a9007b" + integrity sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA== + +"@esbuild/win32-ia32@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz#057af345da256b7192d18b676a02e95d0fa39103" + integrity sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw== + +"@esbuild/win32-x64@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz#168ab1c7e1c318b922637fad8f339d48b01e1244" + integrity sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.0": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" + integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== + dependencies: + "@eslint/object-schema" "^2.1.5" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.9.1.tgz#31763847308ef6b7084a4505573ac9402c51f9d1" + integrity sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@eslint/js@9.16.0": + version "9.16.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.16.0.tgz#3df2b2dd3b9163056616886c86e4082f45dbf3f4" + integrity sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg== + +"@eslint/object-schema@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" + integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== + +"@eslint/plugin-kit@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz#2b78e7bb3755784bb13faa8932a1d994d6537792" + integrity sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg== + dependencies: + levn "^0.4.1" + +"@exodus/schemasafe@^1.0.0-rc.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f" + integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== + +"@fortawesome/fontawesome-common-types@6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.1.tgz#6201640f39fdcf8e41cd9d1a92b2da3a96817fa4" + integrity sha512-gbDz3TwRrIPT3i0cDfujhshnXO9z03IT1UKRIVi/VEjpNHtSBIP2o5XSm+e816FzzCFEzAxPw09Z13n20PaQJQ== + +"@fortawesome/fontawesome-svg-core@^6.6.0": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.1.tgz#1f8ebb6f35cf02f89c110198514e848de17ac99e" + integrity sha512-8dBIHbfsKlCk2jHQ9PoRBg2Z+4TwyE3vZICSnoDlnsHA6SiMlTwfmW6yX0lHsRmWJugkeb92sA0hZdkXJhuz+g== + dependencies: + "@fortawesome/fontawesome-common-types" "6.7.1" + +"@fortawesome/free-regular-svg-icons@^6.6.0": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.7.1.tgz#d7ec06f896ee91116a388a5a234cd26420ccdfe4" + integrity sha512-e13cp+bAx716RZOTQ59DhqikAgETA9u1qTBHO3e3jMQQ+4H/N1NC1ZVeFYt1V0m+Th68BrEL1/X6XplISutbXg== + dependencies: + "@fortawesome/fontawesome-common-types" "6.7.1" + +"@fortawesome/free-solid-svg-icons@^6.6.0": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.1.tgz#c1f9a6c25562a12c283e87e284f9d82a5b0dbcc0" + integrity sha512-BTKc0b0mgjWZ2UDKVgmwaE0qt0cZs6ITcDgjrti5f/ki7aF5zs+N91V6hitGo3TItCFtnKg6cUVGdTmBFICFRg== + dependencies: + "@fortawesome/fontawesome-common-types" "6.7.1" + +"@fortawesome/react-fontawesome@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz#68b058f9132b46c8599875f6a636dad231af78d4" + integrity sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g== + dependencies: + prop-types "^15.8.1" + +"@fullhuman/postcss-purgecss@^7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-7.0.2.tgz#ccacdbc312248c76c42cfac359f4ca5121001e67" + integrity sha512-U4zAXNaVztbDxO9EdcLp51F3UxxYsb/7DN89rFxFJhfk2Wua2pvw2Kf3HdspbPhW/wpHjSjsxWYoIlbTgRSjbQ== + dependencies: + purgecss "^7.0.2" + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@parcel/watcher-android-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz#e32d3dda6647791ee930556aee206fcd5ea0fb7a" + integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== + +"@parcel/watcher-darwin-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz#0d9e680b7e9ec1c8f54944f1b945aa8755afb12f" + integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== + +"@parcel/watcher-darwin-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz#f9f1d5ce9d5878d344f14ef1856b7a830c59d1bb" + integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== + +"@parcel/watcher-freebsd-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz#2b77f0c82d19e84ff4c21de6da7f7d096b1a7e82" + integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== + +"@parcel/watcher-linux-arm-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz#92ed322c56dbafa3d2545dcf2803334aee131e42" + integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== + +"@parcel/watcher-linux-arm-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz#cd48e9bfde0cdbbd2ecd9accfc52967e22f849a4" + integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== + +"@parcel/watcher-linux-arm64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz#7b81f6d5a442bb89fbabaf6c13573e94a46feb03" + integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== + +"@parcel/watcher-linux-arm64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz#dcb8ff01077cdf59a18d9e0a4dff7a0cfe5fd732" + integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== + +"@parcel/watcher-linux-x64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz#2e254600fda4e32d83942384d1106e1eed84494d" + integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== + +"@parcel/watcher-linux-x64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz#01fcea60fedbb3225af808d3f0a7b11229792eef" + integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== + +"@parcel/watcher-win32-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz#87cdb16e0783e770197e52fb1dc027bb0c847154" + integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== + +"@parcel/watcher-win32-ia32@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz#778c39b56da33e045ba21c678c31a9f9d7c6b220" + integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== + +"@parcel/watcher-win32-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz#33873876d0bbc588aacce38e90d1d7480ce81cb7" + integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== + +"@parcel/watcher@^2.4.1": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.0.tgz#5c88818b12b8de4307a9d3e6dc3e28eba0dfbd10" + integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.0" + "@parcel/watcher-darwin-arm64" "2.5.0" + "@parcel/watcher-darwin-x64" "2.5.0" + "@parcel/watcher-freebsd-x64" "2.5.0" + "@parcel/watcher-linux-arm-glibc" "2.5.0" + "@parcel/watcher-linux-arm-musl" "2.5.0" + "@parcel/watcher-linux-arm64-glibc" "2.5.0" + "@parcel/watcher-linux-arm64-musl" "2.5.0" + "@parcel/watcher-linux-x64-glibc" "2.5.0" + "@parcel/watcher-linux-x64-musl" "2.5.0" + "@parcel/watcher-win32-arm64" "2.5.0" + "@parcel/watcher-win32-ia32" "2.5.0" + "@parcel/watcher-win32-x64" "2.5.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@pmmmwh/react-refresh-webpack-plugin@^0.5.3": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz#f126be97c30b83ed777e2aeabd518bc592e6e7c4" + integrity sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ== + dependencies: + ansi-html "^0.0.9" + core-js-pure "^3.23.3" + error-stack-parser "^2.0.6" + html-entities "^2.1.0" + loader-utils "^2.0.4" + schema-utils "^4.2.0" + source-map "^0.7.3" + +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@react-aria/ssr@^3.5.0": + version "3.9.7" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.7.tgz#d89d129f7bbc5148657e6c952ac31c9353183770" + integrity sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg== + dependencies: + "@swc/helpers" "^0.5.0" + +"@reduxjs/toolkit@^2.2.4": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.4.0.tgz#29fd3a19530fc50d648a9b1e0132da0cd5618f19" + integrity sha512-wJZEuSKj14tvNfxiIiJws0tQN77/rDqucBq528ApebMIRHyWpCanJVQRxQ8WWZC19iCDKxDsGlbAir3F1layxA== + dependencies: + immer "^10.0.3" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.1.0" + +"@remix-run/router@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.21.0.tgz#c65ae4262bdcfe415dbd4f64ec87676e4a56e2b5" + integrity sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA== + +"@restart/hooks@^0.4.9": + version "0.4.16" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.16.tgz#95ae8ac1cc7e2bd4fed5e39800ff85604c6d59fb" + integrity sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w== + dependencies: + dequal "^2.0.3" + +"@restart/hooks@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.5.0.tgz#a594af7c3b64f5e65a7aca011551b0cdd93ec14e" + integrity sha512-wS+h6IusJCPjTkmOOrRZxIPICD/mtFA3PRZviutoM23/b7akyDGfZF/WS+nIFk27u7JDhPE2+0GBdZxjSqHZkg== + dependencies: + dequal "^2.0.3" + +"@restart/ui@^1.9.0": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.9.1.tgz#f0f22d255470e02f6fee6dcc449e56f0f1b8ebc1" + integrity sha512-qghR21ynHiUrpcIkKCoKYB+3rJtezY5Y7ikrwradCL+7hZHdQ2Ozc5ffxtpmpahoAGgc31gyXaSx2sXXaThmqA== + dependencies: + "@babel/runtime" "^7.26.0" + "@popperjs/core" "^2.11.8" + "@react-aria/ssr" "^3.5.0" + "@restart/hooks" "^0.5.0" + "@types/warning" "^3.0.3" + dequal "^2.0.3" + dom-helpers "^5.2.0" + uncontrollable "^8.0.4" + warning "^4.0.3" + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/rollup-android-arm-eabi@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz#7f4c4d8cd5ccab6e95d6750dbe00321c1f30791e" + integrity sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ== + +"@rollup/rollup-android-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz#17ea71695fb1518c2c324badbe431a0bd1879f2d" + integrity sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA== + +"@rollup/rollup-darwin-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz#dac0f0d0cfa73e7d5225ae6d303c13c8979e7999" + integrity sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ== + +"@rollup/rollup-darwin-x64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz#8f63baa1d31784904a380d2e293fa1ddf53dd4a2" + integrity sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ== + +"@rollup/rollup-freebsd-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz#30ed247e0df6e8858cdc6ae4090e12dbeb8ce946" + integrity sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA== + +"@rollup/rollup-freebsd-x64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz#57846f382fddbb508412ae07855b8a04c8f56282" + integrity sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz#378ca666c9dae5e6f94d1d351e7497c176e9b6df" + integrity sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA== + +"@rollup/rollup-linux-arm-musleabihf@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz#a692eff3bab330d5c33a5d5813a090c15374cddb" + integrity sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg== + +"@rollup/rollup-linux-arm64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz#6b1719b76088da5ac1ae1feccf48c5926b9e3db9" + integrity sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA== + +"@rollup/rollup-linux-arm64-musl@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz#865baf5b6f5ff67acb32e5a359508828e8dc5788" + integrity sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A== + +"@rollup/rollup-linux-loongarch64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz#23c6609ba0f7fa7a7f2038b6b6a08555a5055a87" + integrity sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz#652ef0d9334a9f25b9daf85731242801cb0fc41c" + integrity sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A== + +"@rollup/rollup-linux-riscv64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz#1eb6651839ee6ebca64d6cc64febbd299e95e6bd" + integrity sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA== + +"@rollup/rollup-linux-s390x-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz#015c52293afb3ff2a293cf0936b1d43975c1e9cd" + integrity sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg== + +"@rollup/rollup-linux-x64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz#b83001b5abed2bcb5e2dbeec6a7e69b194235c1e" + integrity sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw== + +"@rollup/rollup-linux-x64-musl@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz#6cc7c84cd4563737f8593e66f33b57d8e228805b" + integrity sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g== + +"@rollup/rollup-win32-arm64-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz#631ffeee094d71279fcd1fe8072bdcf25311bc11" + integrity sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A== + +"@rollup/rollup-win32-ia32-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz#06d1d60d5b9f718e8a6c4a43f82e3f9e3254587f" + integrity sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA== + +"@rollup/rollup-win32-x64-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz#4dff5c4259ebe6c5b4a8f2c5bc3829b7a8447ff0" + integrity sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA== + +"@rtk-query/codegen-openapi@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@rtk-query/codegen-openapi/-/codegen-openapi-2.0.0.tgz#4ef9a2055f64a441a772912630cd8b13e091905d" + integrity sha512-uIOshfqX6bcsMpiwUMKAC+oFEw2fUxICMruhXunB6wq7tHpUg2b+gz+qGjiWAWw1Ly6g6jjvb3N4HRxWy9Yqew== + dependencies: + "@apidevtools/swagger-parser" "^10.0.2" + commander "^6.2.0" + lodash.camelcase "^4.3.0" + oazapfts "^6.1.0" + prettier "^3.2.5" + semver "^7.3.5" + swagger2openapi "^7.0.4" + typescript "^5.5.4" + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@rushstack/eslint-patch@^1.1.0": + version "1.10.4" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz#427d5549943a9c6fce808e39ea64dbe60d4047f1" + integrity sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== + +"@sinclair/typebox@^0.24.1": + version "0.24.51" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== + +"@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@swc/helpers@^0.5.0": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + dependencies: + tslib "^2.8.0" + +"@testing-library/jest-dom@^6.4.8": + version "6.6.3" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz#26ba906cf928c0f8172e182c6fe214eb4f9f2bd2" + integrity sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA== + dependencies: + "@adobe/css-tools" "^4.4.0" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" + lodash "^4.17.21" + redent "^3.0.0" + +"@testing-library/react@^16.0.0": + version "16.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.1.0.tgz#aa0c61398bac82eaf89776967e97de41ac742d71" + integrity sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg== + dependencies: + "@babel/runtime" "^7.12.5" + +"@testing-library/user-event@^14.5.2": + version "14.5.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/eslint@^7.29.0 || ^8.4.1": + version "8.56.12" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.12.tgz#1657c814ffeba4d2f84c0d4ba0f44ca7ea1ca53a" + integrity sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@1.0.6", "@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz#812d2871e5eea17fb0bd5214dda7a7b748c0e12a" + integrity sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c" + integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/express@^4.17.13": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/http-proxy@^1.17.8": + version "1.17.15" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" + integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "22.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" + integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== + dependencies: + undici-types "~6.20.0" + +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/prettier@^2.1.5": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/prop-types@*": + version "15.7.14" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" + integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== + +"@types/q@^1.5.1": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.8.tgz#95f6c6a08f2ad868ba230ead1d2d7f7be3db3837" + integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== + +"@types/qs@*": + version "6.9.17" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a" + integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/react-dom@^18.2.22": + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.3.tgz#3654138d0da1b0c7916f6ed0dc1cc2b576d47650" + integrity sha512-uTYkxTLkYp41nq/ULXyXMtkNT1vu5fXJoqad6uTNCOGat5t9cLgF4vMNLBXsTOXpdOI44XzKPY1M5RRm0bQHuw== + +"@types/react-grid-layout@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/react-grid-layout/-/react-grid-layout-1.3.5.tgz#f4b52bf27775290ee0523214be0987be14e66823" + integrity sha512-WH/po1gcEcoR6y857yAnPGug+ZhkF4PaTUxgAbwfeSH/QOgVSakKHBXoPGad/sEznmkiaK3pqHk+etdWisoeBQ== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.6": + version "4.4.11" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.11.tgz#d963253a611d757de01ebb241143b1017d5d63d5" + integrity sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@>=16.9.11": + version "19.0.1" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.1.tgz#a000d5b78f473732a08cecbead0f3751e550b3df" + integrity sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ== + dependencies: + csstype "^3.0.2" + +"@types/react@^18.2.66": + version "18.3.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.15.tgz#14674f041072c2b17062ae2edb0eb95a45787f98" + integrity sha512-XQzbwkCwrsabawgWsvDDwsDTRuH1sf6Uj1fnFYoG03ZXfT54/aBvlylKR9ix70pXAtTn8dFzj358zVcZN4m83w== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.1": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/sockjs@^0.3.33": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/trusted-types@^2.0.2", "@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + +"@types/use-sync-external-store@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc" + integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== + +"@types/warning@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798" + integrity sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q== + +"@types/ws@^8.5.5": + version "8.5.13" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.13.tgz#6414c280875e2691d0d1e080b05addbf5cb91e20" + integrity sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^16.0.0": + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@8.18.0", "@typescript-eslint/eslint-plugin@^8.0.1": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz#0901933326aea4443b81df3f740ca7dfc45c7bea" + integrity sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/type-utils" "8.18.0" + "@typescript-eslint/utils" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/eslint-plugin@^5.5.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz#14559bf73383a308026b427a4a6129bae2146741" + integrity sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw== + dependencies: + "@typescript-eslint/utils" "5.62.0" + +"@typescript-eslint/parser@8.18.0", "@typescript-eslint/parser@^8.0.1": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.0.tgz#a1c9456cbb6a089730bf1d3fc47946c5fb5fe67b" + integrity sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q== + dependencies: + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/typescript-estree" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + debug "^4.3.4" + +"@typescript-eslint/parser@^5.5.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz#30b040cb4557804a7e2bcc65cf8fdb630c96546f" + integrity sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw== + dependencies: + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/type-utils@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz#6f0d12cf923b6fd95ae4d877708c0adaad93c471" + integrity sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow== + dependencies: + "@typescript-eslint/typescript-estree" "8.18.0" + "@typescript-eslint/utils" "8.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.0.tgz#3afcd30def8756bc78541268ea819a043221d5f3" + integrity sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz#d8ca785799fbb9c700cdff1a79c046c3e633c7f9" + integrity sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg== + dependencies: + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.58.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/utils@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.0.tgz#48f67205d42b65d895797bb7349d1be5c39a62f7" + integrity sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/typescript-estree" "8.18.0" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@8.18.0": + version "8.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz#7b6d33534fa808e33a19951907231ad2ea5c36dd" + integrity sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw== + dependencies: + "@typescript-eslint/types" "8.18.0" + eslint-visitor-keys "^4.2.0" + +"@ungap/structured-clone@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" + integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== + +"@vitejs/plugin-react@^4.2.1": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20" + integrity sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug== + dependencies: + "@babel/core" "^7.26.0" + "@babel/plugin-transform-react-jsx-self" "^7.25.9" + "@babel/plugin-transform-react-jsx-source" "^7.25.9" + "@types/babel__core" "^7.20.5" + react-refresh "^0.14.2" + +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== + +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== + +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== + +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== + +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" + +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +accepts@~1.3.4, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.14.0, acorn@^8.2.4, acorn@^8.8.2, acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +address@^1.0.1, address@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +adjust-sourcemap-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" + integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-draft-04@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.6.3, ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-html@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.9.tgz#6512d02342ae2cc68131952644a129cb734cd3f0" + integrity sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.0.0, aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.13: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + dependencies: + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@^4.10.0: + version "4.10.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df" + integrity sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w== + +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + +babel-jest@^27.4.2, babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-loader@^8.2.3: + version "8.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.4.1.tgz#6ccb75c66e62c3b144e1c5f2eaec5b8f6c08c675" + integrity sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.4" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +babel-plugin-named-asset-import@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" + integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.3" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.3" + +babel-plugin-transform-react-remove-prop-types@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-current-node-syntax@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-app@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584" + integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg== + dependencies: + "@babel/core" "^7.16.0" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-decorators" "^7.16.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-transform-flow-strip-types" "^7.16.0" + "@babel/plugin-transform-react-display-name" "^7.16.0" + "@babel/plugin-transform-runtime" "^7.16.4" + "@babel/preset-env" "^7.16.4" + "@babel/preset-react" "^7.16.0" + "@babel/preset-typescript" "^7.16.0" + "@babel/runtime" "^7.16.3" + babel-plugin-macros "^3.1.0" + babel-plugin-transform-react-remove-prop-types "^0.4.24" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bfj@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.1.0.tgz#c5177d522103f9040e1b12980fe8c38cf41d3f8b" + integrity sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw== + dependencies: + bluebird "^3.7.2" + check-types "^11.2.3" + hoopy "^0.1.4" + jsonpath "^1.1.1" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== + dependencies: + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bootstrap@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.3.tgz#de35e1a765c897ac940021900fcbb831602bac38" + integrity sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.2: + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== + dependencies: + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-builder@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/buffer-builder/-/buffer-builder-0.2.0.tgz#3322cd307d8296dab1f604618593b261a3fade8f" + integrity sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtin-modules@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +call-bind-apply-helpers@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0, camelcase@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: + version "1.0.30001687" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz#d0ac634d043648498eedf7a3932836beba90ebae" + integrity sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ== + +case-sensitive-paths-webpack-plugin@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" + integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== + +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +char-regex@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.2.tgz#81385bb071af4df774bff8721d0ca15ef29ea0bb" + integrity sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg== + +check-types@^11.2.3: + version "11.2.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.3.tgz#1ffdf68faae4e941fce252840b1787b8edc93b71" + integrity sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg== + +chokidar@^3.4.2, chokidar@^3.5.3, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + dependencies: + readdirp "^4.0.1" + +chrome-trace-event@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" + integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== + +classnames@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + +clean-css@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== + dependencies: + source-map "~0.6.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clsx@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +clsx@^2.0.0, clsx@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +colorjs.io@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/colorjs.io/-/colorjs.io-0.5.2.tgz#63b20139b007591ebc3359932bef84628eb3fcef" + integrity sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.5.tgz#fdd256c0a642e39e314c478f6c2cd654edd74c93" + integrity sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q== + dependencies: + bytes "3.1.2" + compressible "~2.0.18" + debug "2.6.9" + negotiator "~0.6.4" + on-headers "~1.0.2" + safe-buffer "5.2.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + +core-js-compat@^3.38.0, core-js-compat@^3.38.1: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== + dependencies: + browserslist "^4.24.2" + +core-js-pure@^3.23.3: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.39.0.tgz#aa0d54d70a15bdc13e7c853db87c10abc30d68f3" + integrity sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg== + +core-js@^3.19.2: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.39.0.tgz#57f7647f4d2d030c32a72ea23a0555b2eaa30f83" + integrity sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-blank-pseudo@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" + integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== + dependencies: + postcss-selector-parser "^6.0.9" + +css-declaration-sorter@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" + integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== + +css-has-pseudo@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" + integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== + dependencies: + postcss-selector-parser "^6.0.9" + +css-loader@^6.5.1: + version "6.11.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.5.4" + +css-minimizer-webpack-plugin@^3.2.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" + integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== + dependencies: + cssnano "^5.0.6" + jest-worker "^27.0.2" + postcss "^8.3.5" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-prefers-color-scheme@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" + integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + +cssdb@^7.1.0: + version "7.11.2" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.11.2.tgz#127a2f5b946ee653361a5af5333ea85a39df5ae5" + integrity sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.0.6: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + dependencies: + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.0.2, csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decimal.js@^10.2.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +dompurify@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.3.tgz#05dd2175225324daabfca6603055a09b2382a4cd" + integrity sha512-U1U5Hzc2MO0oW3DF+G9qYN0aT7atAou4AgI0XjWz061nyBPbdxkfdhfy5uMgGn6+oLFCfn44ZGbdDqCzVmlOWA== + optionalDependencies: + "@types/trusted-types" "^2.0.7" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +dunder-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80" + integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.6: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.5.41: + version "1.5.72" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz#a732805986d3a5b5fedd438ddf4616c7d78ac2df" + integrity sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +enhanced-resolve@^5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5: + version "1.23.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz#2f1a3ab998b30cb2d10b195b587c6d9ebdebf152" + integrity sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.3" + safe-array-concat "^1.1.2" + +es-module-lexer@^1.2.1: + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +es6-promise@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +esbuild@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.0.tgz#f2d470596885fcb2e91c21eb3da3b3c89c0b55e7" + integrity sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.0" + "@esbuild/android-arm" "0.24.0" + "@esbuild/android-arm64" "0.24.0" + "@esbuild/android-x64" "0.24.0" + "@esbuild/darwin-arm64" "0.24.0" + "@esbuild/darwin-x64" "0.24.0" + "@esbuild/freebsd-arm64" "0.24.0" + "@esbuild/freebsd-x64" "0.24.0" + "@esbuild/linux-arm" "0.24.0" + "@esbuild/linux-arm64" "0.24.0" + "@esbuild/linux-ia32" "0.24.0" + "@esbuild/linux-loong64" "0.24.0" + "@esbuild/linux-mips64el" "0.24.0" + "@esbuild/linux-ppc64" "0.24.0" + "@esbuild/linux-riscv64" "0.24.0" + "@esbuild/linux-s390x" "0.24.0" + "@esbuild/linux-x64" "0.24.0" + "@esbuild/netbsd-x64" "0.24.0" + "@esbuild/openbsd-arm64" "0.24.0" + "@esbuild/openbsd-x64" "0.24.0" + "@esbuild/sunos-x64" "0.24.0" + "@esbuild/win32-arm64" "0.24.0" + "@esbuild/win32-ia32" "0.24.0" + "@esbuild/win32-x64" "0.24.0" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^1.8.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb-typescript@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz#b1646db4134858d704b1d2bee47e1d72c180315f" + integrity sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg== + dependencies: + eslint-config-airbnb-base "^15.0.0" + +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-config-react-app@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" + integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA== + dependencies: + "@babel/core" "^7.16.0" + "@babel/eslint-parser" "^7.16.3" + "@rushstack/eslint-patch" "^1.1.0" + "@typescript-eslint/eslint-plugin" "^5.5.0" + "@typescript-eslint/parser" "^5.5.0" + babel-preset-react-app "^10.0.1" + confusing-browser-globals "^1.0.11" + eslint-plugin-flowtype "^8.0.3" + eslint-plugin-import "^2.25.3" + eslint-plugin-jest "^25.3.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.27.1" + eslint-plugin-react-hooks "^4.3.0" + eslint-plugin-testing-library "^5.0.1" + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== + dependencies: + debug "^3.2.7" + +eslint-plugin-flowtype@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" + integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== + dependencies: + lodash "^4.17.21" + string-natural-compare "^3.0.1" + +eslint-plugin-import@^2.25.3, eslint-plugin-import@^2.27.5: + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" + semver "^6.3.1" + string.prototype.trimend "^1.0.8" + tsconfig-paths "^3.15.0" + +eslint-plugin-jest@^25.3.0: + version "25.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + +eslint-plugin-jsx-a11y@^6.5.1, eslint-plugin-jsx-a11y@^6.7.1: + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== + dependencies: + aria-query "^5.3.2" + array-includes "^3.1.8" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "^4.10.0" + axobject-query "^4.1.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + hasown "^2.0.2" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.1" + +eslint-plugin-prettier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" + integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.9.1" + +eslint-plugin-react-hooks@^4.3.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + +eslint-plugin-react-hooks@^5.1.0-rc.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz#3d34e37d5770866c34b87d5b499f5f0b53bf0854" + integrity sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw== + +eslint-plugin-react-refresh@^0.4.9: + version "0.4.16" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz#149dbc9279bd16942409f1c1d2f0dce3299430ef" + integrity sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ== + +eslint-plugin-react@^7.27.1, eslint-plugin-react@^7.32.2: + version "7.37.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz#cd0935987876ba2900df2f58339f6d92305acc7a" + integrity sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.2" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.1.0" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.0" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.11" + string.prototype.repeat "^1.0.0" + +eslint-plugin-testing-library@^5.0.1: + version "5.11.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz#5b46cdae96d4a78918711c0b4792f90088e62d20" + integrity sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw== + dependencies: + "@typescript-eslint/utils" "^5.58.0" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint-webpack-plugin@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" + integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== + dependencies: + "@types/eslint" "^7.29.0 || ^8.4.1" + jest-worker "^28.0.2" + micromatch "^4.0.5" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + +eslint@^8.3.0: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +eslint@^9.9.0: + version "9.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.16.0.tgz#66832e66258922ac0a626f803a9273e37747f2a6" + integrity sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.9.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.16.0" + "@eslint/plugin-kit" "^0.2.3" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.5" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b" + integrity sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A== + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2, esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + +express@^4.17.3: + version "4.21.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.7.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.12" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-equals@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" + integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== + +fast-glob@^3.2.9, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + +follow-redirects@^1.0.0: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" + integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +form-data@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.2.tgz#83ad9ced7c03feaad97e293d6f6091011e1659c8" + integrity sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.5.tgz#dfe7dd1b30761b464fe51bf4bb00ac7c37b681e7" + integrity sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg== + dependencies: + call-bind-apply-helpers "^1.0.0" + dunder-proto "^1.0.0" + es-define-property "^1.0.1" + es-errors "^1.3.0" + function-bind "^1.1.2" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^10.3.10: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e" + integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^15.9.0: + version "15.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.13.0.tgz#bbec719d69aafef188ecd67954aae76a696010fc" + integrity sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g== + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1, gopd@^1.1.0, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.1, has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^2.1.0, html-entities@^2.3.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + +html-webpack-plugin@^5.5.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" + integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.3: + version "2.0.7" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6" + integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http2-client@^1.2.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" + integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +i18next@^24.0.5: + version "24.0.5" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-24.0.5.tgz#2678986eca46411cae0329542a84dd4cd7e5f2f0" + integrity sha512-1jSdEzgFPGLZRsQwydoMFCBBaV+PmrVEO5WhANllZPX4y2JSGTxUjJ+xVklHIsiS95uR8gYc/y0hYZWevucNjg== + dependencies: + "@babel/runtime" "^7.23.2" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +idb@^7.0.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + +identity-obj-proxy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== + dependencies: + harmony-reflect "^1.4.6" + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immer@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== + +immer@^9.0.7: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +immutable@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.0.3.tgz#aa037e2313ea7b5d400cd9298fa14e404c933db1" + integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== + +import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from-esm@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/import-from-esm/-/import-from-esm-1.3.4.tgz#39e97c84085e308fe66cf872a667046b45449df0" + integrity sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg== + dependencies: + debug "^4.3.4" + import-meta-resolve "^4.0.0" + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +import-meta-resolve@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" + integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.0.tgz#9743641e80a62c094b5941c5bb791d66a88e497a" + integrity sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2" + integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== + dependencies: + call-bind "^1.0.7" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.0.tgz#5a867e9ecc3d294dda740d9f127835857af7eb05" + integrity sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.0.tgz#41b9d266e7eb7451312c64efc37e8a7d453077cf" + integrity sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA== + dependencies: + call-bind "^1.0.7" + gopd "^1.1.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.7, is-string@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.0.tgz#8cb83c5d57311bf8058bc6c8db294711641da45d" + integrity sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.0.tgz#ae993830a56d4781886d39f9f0a46b3e89b7b60b" + integrity sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A== + dependencies: + call-bind "^1.0.7" + has-symbols "^1.0.3" + safe-regex-test "^1.0.3" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +iterator.prototype@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.3.tgz#016c2abe0be3bbdb8319852884f60908ac62bf9c" + integrity sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jackspeak@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.2.tgz#11f9468a3730c6ff6f56823a820d7e3be9bef015" + integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw== + dependencies: + "@isaacs/cliui" "^8.0.2" + +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-regex-util@^28.0.0: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.4.2, jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + +jest-watch-typeahead@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" + integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^28.0.0" + jest-watcher "^28.0.0" + slash "^4.0.0" + string-length "^5.0.1" + strip-ansi "^7.0.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-watcher@^28.0.0: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^28.0.2: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.4.3: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + +jiti@^1.21.6: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^3.0.2, jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2, json5@^2.2.0, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpath@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.1.1.tgz#0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901" + integrity sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w== + dependencies: + esprima "1.2.2" + static-eval "2.0.2" + underscore "1.12.1" + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +jwt-decode@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-4.0.0.tgz#2270352425fd413785b2faf11f6e755c5151bd4b" + integrity sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA== + +keyv@^4.5.3, keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4, klona@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +launch-editor@^2.6.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.9.1.tgz#253f173bd441e342d4344b4dae58291abb425047" + integrity sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.8.1" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lilconfig@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lilconfig@^3.0.0, lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0, loader-utils@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" + integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^11.0.0: + version "11.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" + integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== + dependencies: + fs-monkey "^1.0.4" + +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@^2.4.5: + version "2.9.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz#966031b468917a5446f4c24a80854b2947503c5b" + integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w== + dependencies: + schema-utils "^4.0.0" + tapable "^2.2.1" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.7: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-fetch-h2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" + integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== + dependencies: + http2-client "^1.2.5" + +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-readfiles@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" + integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== + dependencies: + es6-promise "^3.2.1" + +node-releases@^2.0.18: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0: + version "2.2.16" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43" + integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== + +oas-kit-common@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" + integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== + dependencies: + fast-safe-stringify "^2.0.7" + +oas-linter@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== + dependencies: + "@exodus/schemasafe" "^1.0.0-rc.2" + should "^13.2.1" + yaml "^1.10.0" + +oas-resolver@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +oas-schema-walker@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" + integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== + +oas-validator@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28" + integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw== + dependencies: + call-me-maybe "^1.0.1" + oas-kit-common "^1.0.8" + oas-linter "^3.2.2" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + reftools "^1.1.9" + should "^13.2.1" + yaml "^1.10.0" + +oazapfts@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/oazapfts/-/oazapfts-6.1.0.tgz#f986d5f02ea9a0895b9ed6237ac74a1bf1663721" + integrity sha512-+E0db72jn0AMJ36ZzEXF3qCZ+T4pnOem/tmiJVql1Kx4qkWBE4YGeiUicp3gkzLJ/OrmpvSyAufI8eZ7sODCYg== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + lodash "^4.17.21" + minimist "^1.2.8" + swagger2openapi "^7.0.8" + tapable "^2.2.1" + typescript "^5.4.5" + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.13.1, object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.5, object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.1.0, object.values@^1.1.6, object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1, pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss-attribute-case-insensitive@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" + integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-browser-comments@^4: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a" + integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-functional-notation@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" + integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-hex-alpha@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" + integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-rebeccapurple@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" + integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-custom-media@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" + integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-custom-properties@^12.1.10: + version "12.1.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" + integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" + integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-dir-pseudo-class@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" + integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-double-position-gradients@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" + integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +postcss-env-function@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" + integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-flexbugs-fixes@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" + integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== + +postcss-focus-visible@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" + integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== + dependencies: + postcss-selector-parser "^6.0.9" + +postcss-focus-within@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" + integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== + dependencies: + postcss-selector-parser "^6.0.9" + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" + integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== + +postcss-image-set-function@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" + integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" + integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-lab-function@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" + integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +postcss-load-config@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-loader@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" + integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.5" + +postcss-logical@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" + integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== + +postcss-media-minmax@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" + integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== + +postcss-modules-local-by-default@^4.0.5: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz#b0db6bc81ffc7bdc52eb0f84d6ca0bedf0e36d21" + integrity sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-nested@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== + dependencies: + postcss-selector-parser "^6.1.1" + +postcss-nesting@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" + integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7" + integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== + dependencies: + "@csstools/normalize.css" "*" + postcss-browser-comments "^4" + sanitize.css "*" + +postcss-opacity-percentage@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6" + integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-overflow-shorthand@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" + integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" + integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@^7.0.1: + version "7.8.3" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" + integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== + dependencies: + "@csstools/postcss-cascade-layers" "^1.1.1" + "@csstools/postcss-color-function" "^1.1.1" + "@csstools/postcss-font-format-keywords" "^1.0.1" + "@csstools/postcss-hwb-function" "^1.0.2" + "@csstools/postcss-ic-unit" "^1.0.1" + "@csstools/postcss-is-pseudo-class" "^2.0.7" + "@csstools/postcss-nested-calc" "^1.0.0" + "@csstools/postcss-normalize-display-values" "^1.0.1" + "@csstools/postcss-oklab-function" "^1.1.1" + "@csstools/postcss-progressive-custom-properties" "^1.3.0" + "@csstools/postcss-stepped-value-functions" "^1.0.1" + "@csstools/postcss-text-decoration-shorthand" "^1.0.0" + "@csstools/postcss-trigonometric-functions" "^1.0.2" + "@csstools/postcss-unset-value" "^1.0.2" + autoprefixer "^10.4.13" + browserslist "^4.21.4" + css-blank-pseudo "^3.0.3" + css-has-pseudo "^3.0.4" + css-prefers-color-scheme "^6.0.3" + cssdb "^7.1.0" + postcss-attribute-case-insensitive "^5.0.2" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^4.2.4" + postcss-color-hex-alpha "^8.0.4" + postcss-color-rebeccapurple "^7.1.1" + postcss-custom-media "^8.0.2" + postcss-custom-properties "^12.1.10" + postcss-custom-selectors "^6.0.3" + postcss-dir-pseudo-class "^6.0.5" + postcss-double-position-gradients "^3.1.2" + postcss-env-function "^4.0.6" + postcss-focus-visible "^6.0.4" + postcss-focus-within "^5.0.4" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.5" + postcss-image-set-function "^4.0.7" + postcss-initial "^4.0.1" + postcss-lab-function "^4.2.1" + postcss-logical "^5.0.4" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.2.0" + postcss-opacity-percentage "^1.1.2" + postcss-overflow-shorthand "^3.0.4" + postcss-page-break "^3.0.4" + postcss-place "^7.0.5" + postcss-pseudo-class-any-link "^7.1.6" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-pseudo-class-any-link@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" + integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" + integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz#41bd8b56f177c093ca49435f65731befe25d6b9c" + integrity sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^7.0.35: + version "7.0.39" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +postcss@^8.3.5, postcss@^8.4.33, postcss@^8.4.4, postcss@^8.4.47, postcss@^8.4.49: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.2.5, prettier@^3.3.3: + version "3.4.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== + +pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.0.1, prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types-extra@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@15.x, prop-types@^15.6.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +psl@^1.1.33: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +purgecss@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-7.0.2.tgz#b7dccc3ead65a4301eed98e014793719a511c633" + integrity sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ== + dependencies: + commander "^12.1.0" + glob "^11.0.0" + postcss "^8.4.47" + postcss-selector-parser "^6.1.2" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-app-polyfill@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" + integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w== + dependencies: + core-js "^3.19.2" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.9" + whatwg-fetch "^3.6.2" + +react-bootstrap@^2.10.2: + version "2.10.6" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.10.6.tgz#cb8b6f3604480b99b1e3cfa09cf53446e760bba7" + integrity sha512-fNvKytSp0nHts1WRnRBJeBEt+I9/ZdrnhIjWOucEduRNvFRU1IXjZueDdWnBiqsTSJ7MckQJi9i/hxGolaRq+g== + dependencies: + "@babel/runtime" "^7.24.7" + "@restart/hooks" "^0.4.9" + "@restart/ui" "^1.9.0" + "@types/react-transition-group" "^4.4.6" + classnames "^2.3.2" + dom-helpers "^5.2.1" + invariant "^2.2.4" + prop-types "^15.8.1" + prop-types-extra "^1.1.0" + react-transition-group "^4.4.5" + uncontrollable "^7.2.1" + warning "^4.0.3" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + +react-draggable@^4.0.3, react-draggable@^4.4.5: + version "4.4.6" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.6.tgz#63343ee945770881ca1256a5b6fa5c9f5983fe1e" + integrity sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw== + dependencies: + clsx "^1.1.1" + prop-types "^15.8.1" + +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" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-grid-layout@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-1.5.0.tgz#b6cc9412b58cf8226aebc0df7673d6fa782bdee2" + integrity sha512-WBKX7w/LsTfI99WskSu6nX2nbJAUD7GD6nIXcwYLyPpnslojtmql2oD3I2g5C3AK8hrxIarYT8awhuDIp7iQ5w== + dependencies: + clsx "^2.0.0" + fast-equals "^4.0.3" + prop-types "^15.8.1" + react-draggable "^4.4.5" + react-resizable "^3.0.5" + resize-observer-polyfill "^1.5.1" + +react-hook-form@^7.54.2: + version "7.54.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" + integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== + +react-i18next@^15.0.0: + version "15.1.4" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-15.1.4.tgz#65c03c31a5e42202000652e163f22f23a9306a60" + integrity sha512-2tai71gmehbvl9ZIqPMqlCCkm/cbeV1G4STpmM3C8Uzo6T2l8jDvZxEVSsQKt8blP9X34iRFP/k1ROqG2296MQ== + dependencies: + "@babel/runtime" "^7.25.0" + html-parse-stringify "^3.0.1" + +react-is@^16.13.1, react-is@^16.3.2: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loading-skeleton@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.5.0.tgz#da2090355b4dedcad5c53cb3f0ed364e3a76d6ca" + integrity sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ== + +react-redux@^9.1.2: + version "9.2.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5" + integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g== + dependencies: + "@types/use-sync-external-store" "^0.0.6" + use-sync-external-store "^1.4.0" + +react-refresh@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" + integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== + +react-refresh@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== + +react-resizable@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" + integrity sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w== + dependencies: + prop-types "15.x" + react-draggable "^4.0.3" + +react-router-dom@^6.23.1: + version "6.28.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.28.0.tgz#f73ebb3490e59ac9f299377062ad1d10a9f579e6" + integrity sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg== + dependencies: + "@remix-run/router" "1.21.0" + react-router "6.28.0" + +react-router@6.28.0: + version "6.28.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.28.0.tgz#29247c86d7ba901d7e5a13aa79a96723c3e59d0d" + integrity sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg== + dependencies: + "@remix-run/router" "1.21.0" + +react-scripts@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" + integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== + dependencies: + "@babel/core" "^7.16.0" + "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" + "@svgr/webpack" "^5.5.0" + babel-jest "^27.4.2" + babel-loader "^8.2.3" + babel-plugin-named-asset-import "^0.3.8" + babel-preset-react-app "^10.0.1" + bfj "^7.0.2" + browserslist "^4.18.1" + camelcase "^6.2.1" + case-sensitive-paths-webpack-plugin "^2.4.0" + css-loader "^6.5.1" + css-minimizer-webpack-plugin "^3.2.0" + dotenv "^10.0.0" + dotenv-expand "^5.1.0" + eslint "^8.3.0" + eslint-config-react-app "^7.0.1" + eslint-webpack-plugin "^3.1.1" + file-loader "^6.2.0" + fs-extra "^10.0.0" + html-webpack-plugin "^5.5.0" + identity-obj-proxy "^3.0.0" + jest "^27.4.3" + jest-resolve "^27.4.2" + jest-watch-typeahead "^1.0.0" + mini-css-extract-plugin "^2.4.5" + postcss "^8.4.4" + postcss-flexbugs-fixes "^5.0.2" + postcss-loader "^6.2.1" + postcss-normalize "^10.0.1" + postcss-preset-env "^7.0.1" + prompts "^2.4.2" + react-app-polyfill "^3.0.0" + react-dev-utils "^12.0.1" + react-refresh "^0.11.0" + resolve "^1.20.0" + resolve-url-loader "^4.0.0" + sass-loader "^12.3.0" + semver "^7.3.5" + source-map-loader "^3.0.0" + style-loader "^3.3.1" + tailwindcss "^3.0.2" + terser-webpack-plugin "^5.2.5" + webpack "^5.64.4" + webpack-dev-server "^4.6.0" + webpack-manifest-plugin "^4.0.2" + workbox-webpack-plugin "^6.4.1" + optionalDependencies: + fsevents "^2.3.2" + +react-toastify@^10.0.5: + version "10.0.6" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-10.0.6.tgz#19c364b1150f495522c738d592d1dcc93879ade1" + integrity sha512-yYjp+omCDf9lhZcrZHKbSq7YMuK0zcYkDFTzfRFgTXkTFHZ1ToxwAonzA4JI5CxA91JpjFLmwEsZEgfYfOqI1A== + dependencies: + clsx "^2.1.0" + +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redux-observable@^3.0.0-rc.2: + version "3.0.0-rc.2" + resolved "https://registry.yarnpkg.com/redux-observable/-/redux-observable-3.0.0-rc.2.tgz#baef603781c5dabd9ddd70526357076cd5c128a2" + integrity sha512-gG/pWIKgSrcTyyavm2so5tc7tuyCQ47p3VdCAG6wt+CV0WGhDr50cMQHLcYKxFZSGgTm19a8ZmyfJGndmGDpYg== + +redux-persist@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" + integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== + +redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== + +redux@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== + +reflect.getprototypeof@^1.0.4, reflect.getprototypeof@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz#c58afb17a4007b4d1118c07b92c23fca422c5d82" + integrity sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + dunder-proto "^1.0.0" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + gopd "^1.2.0" + which-builtin-type "^1.2.0" + +reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.9: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-parser@^2.2.11: + version "2.3.0" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.0.tgz#4bb61461b1a19b8b913f3960364bb57887f920ee" + integrity sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg== + +regexp.prototype.flags@^1.5.2, regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" + integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== + dependencies: + adjust-sourcemap-loader "^4.0.0" + convert-source-map "^1.7.0" + loader-utils "^2.0.0" + postcss "^7.0.35" + source-map "0.6.1" + +resolve.exports@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + +resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4, resolve@^1.22.8: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-plugin-visualizer@^5.11.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" + integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + +rollup@^2.43.1: + version "2.79.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.2.tgz#f150e4a5db4b121a21a747d762f701e5e9f49090" + integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== + optionalDependencies: + fsevents "~2.3.2" + +rollup@^4.23.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.1.tgz#7718ba34d62b449dfc49adbfd2f312b4fe0df4de" + integrity sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.28.1" + "@rollup/rollup-android-arm64" "4.28.1" + "@rollup/rollup-darwin-arm64" "4.28.1" + "@rollup/rollup-darwin-x64" "4.28.1" + "@rollup/rollup-freebsd-arm64" "4.28.1" + "@rollup/rollup-freebsd-x64" "4.28.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.28.1" + "@rollup/rollup-linux-arm-musleabihf" "4.28.1" + "@rollup/rollup-linux-arm64-gnu" "4.28.1" + "@rollup/rollup-linux-arm64-musl" "4.28.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.28.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.28.1" + "@rollup/rollup-linux-riscv64-gnu" "4.28.1" + "@rollup/rollup-linux-s390x-gnu" "4.28.1" + "@rollup/rollup-linux-x64-gnu" "4.28.1" + "@rollup/rollup-linux-x64-musl" "4.28.1" + "@rollup/rollup-win32-arm64-msvc" "4.28.1" + "@rollup/rollup-win32-ia32-msvc" "4.28.1" + "@rollup/rollup-win32-x64-msvc" "4.28.1" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.4.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize.css@*: + version "13.0.0" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" + integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== + +sass-embedded-android-arm64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.82.0.tgz#f67352258d52c655dcfa9ca444d0cdcc2d5a9232" + integrity sha512-bldHMs02QQWXsgHUZRgolNnZdMjN6XHvmUYoRkzmFq7lsvtLU6SJg2S1Wa9IZJs9jRWdTmOgA6YibSf3pROyFQ== + +sass-embedded-android-arm@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.82.0.tgz#9600c0c980f08be2b8bcd765d78bdd765d776ab9" + integrity sha512-ttGMvWnA/5TYdZTjr5fWHDbb9nZgKipHKCc9zZQRF5HjUydOYWKNqmAJHQtbFWaq35kd5qn6yiE73IJN6eJ6wA== + +sass-embedded-android-ia32@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.82.0.tgz#448f7f39f3d8fb4d759ba9ab54b94be9904c3c10" + integrity sha512-FUJOnxw8IYKuYuxxiOkk6QXle8/yQFtKjnuSAJuZ5ZpLVMcSZzLc3SWOtuEXYx5iSAfJCO075o2ZoG/pPrJ9aw== + +sass-embedded-android-riscv64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.82.0.tgz#20a8a890bd0cba3487d67d2ab7059c30694c68ad" + integrity sha512-rd+vc+sxJxNnbhaubiIJmnb1b3FvC9wxCIq8spstopbO7o1uufvBBDeRoFSJaN+7oNhamzjlYGdu6aQoQNs3+A== + +sass-embedded-android-x64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.82.0.tgz#e56065192cd68d4e14634e84f230a2f1ab7cfad6" + integrity sha512-EVlybGTgJ8wNLyWj8RUatPXSnmIcvCsx3EfsRfBfhGihLbn4NNpavYO9QsvZzI2XWbJqHLBCd+CvkTcDw/TaSQ== + +sass-embedded-darwin-arm64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.82.0.tgz#50c1f2fa71294b7fccfc7998d31bd52ebf72fd2c" + integrity sha512-LvdJPojjKlNGYOB0nSUR/ZtMDuAF4puspHlwK42aA/qK292bfSkMUKZPPapB2aSRwccc/ieBq5fI7n/WHrOCVw== + +sass-embedded-darwin-x64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.82.0.tgz#8251268ec519472415918e04ed8501a0c1491547" + integrity sha512-6LfnD6YmG1aBfd3ReqMOJDb6Pg2Z/hmlJB7nU+Lb3E+hCNjAZAgeUHQxU/Pm1eIqJJTU/h4ib5QP0Pt9O8yVnw== + +sass-embedded-linux-arm64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.82.0.tgz#149d8620d5d371feb32abec6e7e917805209baf1" + integrity sha512-590/y0HJr/JiyxaqgR7Xf9P20BIhJ+zhB/afAnVuZe/4lEfCpTyM5xMe2+sKLsqtrVyzs9Zm/M4S4ASUOPCggA== + +sass-embedded-linux-arm@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.82.0.tgz#c48a57c3e00050bb16a3195f10f5b863e856c777" + integrity sha512-ozjdC5rWzyi5Vo300I4tVZzneXOTQUiaxOr7DjtN26HuFaGAGCGmvThh2BRV4RvySg++5H9rdFu+VgyUQ5iukw== + +sass-embedded-linux-ia32@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.82.0.tgz#a4ff182f47b703d953364751073a1e576823a168" + integrity sha512-hpc4acZ3UTjjJ3Q/GUXqQOCSml6AFKaku0HMawra9bKyRmOpxn8V5hqgXeOWVjK2oQzCmCnJvwKoQUP+S/SIYQ== + +sass-embedded-linux-musl-arm64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.82.0.tgz#fed3baf77431637d97d50db63630aa13e5324594" + integrity sha512-bc2MUSMv/jabnNGEyKP2jQAYZoEzTT/c633W6QoeSEWETGCuTNjaHvWWE6qSI6/UfRg1EpuV1LQA2jPMzZfv/w== + +sass-embedded-linux-musl-arm@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.82.0.tgz#5799eb6de083a08f47a4eb925ff2c7b70ed65656" + integrity sha512-R5PQmY/I+GSoMtfLo8GgHkvF/q6x6y8VNM7yu/Ac1mJj86n48VFi29W1HfY2496+Q6cpAq7toobDj7YfldIdVA== + +sass-embedded-linux-musl-ia32@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.82.0.tgz#39a3f41d95c47610c9f9ea3d19ab5894dcd2b9cf" + integrity sha512-ZQKCFKm5TBcJ19UG6uUQmIKfVCJIWMb7e1a93lGeujSb9gyKF5Fb6MN3tuExoT7iFK8zU0Z9iyHqh93F58lcCw== + +sass-embedded-linux-musl-riscv64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.82.0.tgz#337c57a8b4320e1b5c05f4864fa89824c052164a" + integrity sha512-5meSU8BHFeaT09RWfkuUrikRlC+WZcYb9To7MpfV1d9nlD7CZ2xydPExK+mj3DqRuQvTbvhMPcr7f+pHlgHINQ== + +sass-embedded-linux-musl-x64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.82.0.tgz#2a24459f8d41e53773d07cec80b4ac36de98f598" + integrity sha512-ASLAMfjWv7YEPBvEOVlb3zzHq8l4Y9Eh4x3m7B1dNauGVbO11Yng5cPCX/XbwGVf30BtE75pwqvV7oXxBtN15w== + +sass-embedded-linux-riscv64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.82.0.tgz#623a30b4c2a0eccacb2bcfe3864289c8be34d80c" + integrity sha512-qWvRDXCXH3GzD8OcP0ntd8gBTK3kZyUeyXmxQDZyEtMAM4STC2Tn7+5+2JYYHlppzqWnZPFBNESvpKeOtHaBBw== + +sass-embedded-linux-x64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.82.0.tgz#e119374e0ecb3675515c49bac782c34f8a12dd60" + integrity sha512-AmRaHqShztwfep+M4NagdGaY7fTyWGSOM3k4Z/dd7q4nZclXbALLqNJtKx8xOM7A41LHYJ9zDpIBVRkrh0PzTA== + +sass-embedded-win32-arm64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.82.0.tgz#d1db895b7314412c14542aee7a794ed5cad2e116" + integrity sha512-zL9JDQZHXHSGAZe5DqSrR86wMHbm9QPziU4/3hoIG+99StuS74CuV42+hw/+FXXBkXMWbjKWsyF/HZt+I/wJuw== + +sass-embedded-win32-ia32@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.82.0.tgz#55cab8c42d9df4853cd35354055326f00b963dae" + integrity sha512-xE+AzLquCkFPnnpo0NHjQdLRIhG1bVs42xIKx42aUbVLYKkBDvbBGpw6EtTscRMyvcjoOqGH5saRvSFComUQcw== + +sass-embedded-win32-x64@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.82.0.tgz#b95082047a18346452ee19a2dd92c2d6abab466c" + integrity sha512-cEgfOQG5womOzzk16ReTv2dxPq5BG16LgLUold/LH9IZH86u4E/MN7Fspf4RWeEJ2EcLdew9QYSC2YWs1l98dQ== + +sass-embedded@^1.80.6: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.82.0.tgz#2fe1f592840458d08c0b6d4893f8af6cdad7b379" + integrity sha512-v13sRVVZtWAQLpAGTz5D8hy+oyNKRHao5tKVc/P6AMqSP+jDM8X6GkEpL0jfbu3MaN2/hAQsd4Qx14GG1u0prQ== + dependencies: + "@bufbuild/protobuf" "^2.0.0" + buffer-builder "^0.2.0" + colorjs.io "^0.5.0" + immutable "^5.0.2" + rxjs "^7.4.0" + supports-color "^8.1.1" + sync-child-process "^1.0.2" + varint "^6.0.0" + optionalDependencies: + sass-embedded-android-arm "1.82.0" + sass-embedded-android-arm64 "1.82.0" + sass-embedded-android-ia32 "1.82.0" + sass-embedded-android-riscv64 "1.82.0" + sass-embedded-android-x64 "1.82.0" + sass-embedded-darwin-arm64 "1.82.0" + sass-embedded-darwin-x64 "1.82.0" + sass-embedded-linux-arm "1.82.0" + sass-embedded-linux-arm64 "1.82.0" + sass-embedded-linux-ia32 "1.82.0" + sass-embedded-linux-musl-arm "1.82.0" + sass-embedded-linux-musl-arm64 "1.82.0" + sass-embedded-linux-musl-ia32 "1.82.0" + sass-embedded-linux-musl-riscv64 "1.82.0" + sass-embedded-linux-musl-x64 "1.82.0" + sass-embedded-linux-riscv64 "1.82.0" + sass-embedded-linux-x64 "1.82.0" + sass-embedded-win32-arm64 "1.82.0" + sass-embedded-win32-ia32 "1.82.0" + sass-embedded-win32-x64 "1.82.0" + +sass-loader@^12.3.0: + version "12.6.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sass@1.82.0: + version "1.82.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.82.0.tgz#30da277af3d0fa6042e9ceabd0d984ed6d07df70" + integrity sha512-j4GMCTa8elGyN9A7x7bEglx0VgSpNUG4W4wNedQ33wSMdnkqQCT8HTwOaVSV4e6yQovcu/3Oc4coJP/l0xhL2Q== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0, schema-utils@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3, shell-quote@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" + integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== + +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-loader@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.2.tgz#af23192f9b344daa729f6772933194cc5fa54fee" + integrity sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.3" + source-map-js "^1.0.1" + +source-map-support@^0.5.6, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3, source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +static-eval@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42" + integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg== + dependencies: + escodegen "^1.8.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-length@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" + integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== + dependencies: + char-regex "^2.0.0" + strip-ansi "^7.0.1" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + +string.prototype.matchall@^4.0.11, string.prototype.matchall@^4.0.6: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-loader@^3.3.1: + version "3.3.4" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" + integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +sucrase@^3.35.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +swagger2openapi@^7.0.4, swagger2openapi@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" + integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== + dependencies: + call-me-maybe "^1.0.1" + node-fetch "^2.6.1" + node-fetch-h2 "^2.3.0" + node-readfiles "^0.2.0" + oas-kit-common "^1.0.8" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + oas-validator "^5.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +sync-child-process@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/sync-child-process/-/sync-child-process-1.0.2.tgz#45e7c72e756d1243e80b547ea2e17957ab9e367f" + integrity sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA== + dependencies: + sync-message-port "^1.0.0" + +sync-message-port@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sync-message-port/-/sync-message-port-1.1.3.tgz#6055c565ee8c81d2f9ee5aae7db757e6d9088c0c" + integrity sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg== + +synckit@^0.9.1: + version "0.9.2" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" + integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tailwindcss@^3.0.2: + version "3.4.16" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.16.tgz#35a7c3030844d6000fc271878db4096b6a8d2ec9" + integrity sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.6.0" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.2" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.6" + lilconfig "^3.1.3" + micromatch "^4.0.8" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.1.1" + postcss "^8.4.47" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.0.0, terser@^5.10.0, terser@^5.26.0: + version "5.37.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3" + integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +throat@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tmp@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^4.0.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.2, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz#3fa9f22567700cc86aaf86a1e7176f74b59600f2" + integrity sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + reflect.getprototypeof "^1.0.6" + +typed-array-length@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript-eslint@^8.0.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.18.0.tgz#41026f27a3481185f3239d817ae5b960572145a0" + integrity sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ== + dependencies: + "@typescript-eslint/eslint-plugin" "8.18.0" + "@typescript-eslint/parser" "8.18.0" + "@typescript-eslint/utils" "8.18.0" + +typescript@^5.4.5, typescript@^5.5.3, typescript@^5.5.4: + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +uncontrollable@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" + integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== + +underscore@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use-sync-external-store@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" + integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite-bundle-visualizer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/vite-bundle-visualizer/-/vite-bundle-visualizer-1.2.1.tgz#8be34033f0216de529abec4b18a8b62aa1b65c9e" + integrity sha512-cwz/Pg6+95YbgIDp+RPwEToc4TKxfsFWSG/tsl2DSZd9YZicUag1tQXjJ5xcL7ydvEoaC2FOZeaXOU60t9BRXw== + dependencies: + cac "^6.7.14" + import-from-esm "^1.3.3" + rollup-plugin-visualizer "^5.11.0" + tmp "^0.2.1" + +vite@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.3.tgz#cc01f403e326a9fc1e064235df8a6de084c8a491" + integrity sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw== + dependencies: + esbuild "^0.24.0" + postcss "^8.4.49" + rollup "^4.23.0" + optionalDependencies: + fsevents "~2.3.3" + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-vitals@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-4.2.4.tgz#1d20bc8590a37769bd0902b289550936069184b7" + integrity sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.6.0: + version "4.15.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" + integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.5" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.4" + ws "^8.13.0" + +webpack-manifest-plugin@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f" + integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== + dependencies: + tapable "^2.0.0" + webpack-sources "^2.2.0" + +webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.64.4: + version "5.97.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.97.1.tgz#972a8320a438b56ff0f1d94ade9e82eac155fa58" + integrity sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.6" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.14.0" + browserslist "^4.24.0" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.6.2: + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz#2d850d6c4ac37b95441a67890e19f3fda8b6c6d9" + integrity sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.0" + is-number-object "^1.1.0" + is-string "^1.1.0" + is-symbol "^1.1.0" + +which-builtin-type@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.0.tgz#58042ac9602d78a6d117c7e811349df1268ba63c" + integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA== + dependencies: + call-bind "^1.0.7" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.2" + which-typed-array "^1.1.15" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.16" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b" + integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5, word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +workbox-background-sync@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" + integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-broadcast-update@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e" + integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ== + dependencies: + workbox-core "6.6.1" + +workbox-build@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.6.1.tgz#6010e9ce550910156761448f2dbea8cfcf759cb0" + integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.6.1" + workbox-broadcast-update "6.6.1" + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-google-analytics "6.6.1" + workbox-navigation-preload "6.6.1" + workbox-precaching "6.6.1" + workbox-range-requests "6.6.1" + workbox-recipes "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + workbox-streams "6.6.1" + workbox-sw "6.6.1" + workbox-window "6.6.1" + +workbox-cacheable-response@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz#284c2b86be3f4fd191970ace8c8e99797bcf58e9" + integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag== + dependencies: + workbox-core "6.6.1" + +workbox-core@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265" + integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw== + +workbox-expiration@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.6.1.tgz#a841fa36676104426dbfb9da1ef6a630b4f93739" + integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-google-analytics@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz#a07a6655ab33d89d1b0b0a935ffa5dea88618c5d" + integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA== + dependencies: + workbox-background-sync "6.6.1" + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-navigation-preload@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059" + integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA== + dependencies: + workbox-core "6.6.1" + +workbox-precaching@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2" + integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-range-requests@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz#ddaf7e73af11d362fbb2f136a9063a4c7f507a39" + integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g== + dependencies: + workbox-core "6.6.1" + +workbox-recipes@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.6.1.tgz#ea70d2b2b0b0bce8de0a9d94f274d4a688e69fae" + integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g== + dependencies: + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-precaching "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-routing@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581" + integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg== + dependencies: + workbox-core "6.6.1" + +workbox-strategies@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf" + integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw== + dependencies: + workbox-core "6.6.1" + +workbox-streams@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.6.1.tgz#b2f7ba7b315c27a6e3a96a476593f99c5d227d26" + integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + +workbox-sw@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.6.1.tgz#d4c4ca3125088e8b9fd7a748ed537fa0247bd72c" + integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ== + +workbox-webpack-plugin@^6.4.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.1.tgz#4f81cc1ad4e5d2cd7477a86ba83c84ee2d187531" + integrity sha512-zpZ+ExFj9NmiI66cFEApyjk7hGsfJ1YMOaLXGXBoZf0v7Iu6hL0ZBe+83mnDq3YYWAfA3fnyFejritjOHkFcrA== + dependencies: + fast-json-stable-stringify "^2.1.0" + pretty-bytes "^5.4.1" + upath "^1.2.0" + webpack-sources "^1.4.3" + workbox-build "6.6.1" + +workbox-window@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e" + integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.6.1" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.4.6: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +ws@^8.13.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.0.1, yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -- GitLab